import { Viewlet } from './viewlet' ; import { Code } from './code' ; import path = require ( 'path' ) ; import fs = require ( 'fs' ) ; import { ncp } from 'ncp' ; import { promisify } from 'util' ; const SEARCH_BOX = 'div.extensions-viewlet[id="workbench.view.extensions"] .monaco-editor textarea' ; export class Extensions extends Viewlet { constructor ( code ) { super ( code ) ; } async openExtensionsViewlet ( ) { if ( process . platform === 'darwin' ) { await this . code . dispatchKeybinding ( 'cmd+shift+x' ) ; } else { await this . code . dispatchKeybinding ( 'ctrl+shift+x' ) ; } await this . code . waitForActiveElement ( SEARCH_BOX ) ; } async searchForExtension ( id ) { await this . code . waitAndClick ( SEARCH_BOX ) ; await this . code . waitForActiveElement ( SEARCH_BOX ) ; await this . code . waitForTypeInEditor ( SEARCH_BOX , `@id:${ id }` ) ; await this . code . waitForTextContent ( `div.part.sidebar div.composite.title h2` , 'Extensions: Marketplace' ) ; await this . code . waitForElement ( `div.extensions-viewlet[id="workbench.view.extensions"] .monaco-list-row[data-extension-id="${ id }"]` ) ; } async openExtension ( id ) { await this . searchForExtension ( id ) ; await this . code . waitAndClick ( `div.extensions-viewlet[id="workbench.view.extensions"] .monaco-list-row[data-extension-id="${ id }"]` ) ; } async closeExtension ( title ) { await this . code . waitAndClick ( `.tabs-container div.tab[title="Extension: ${ title }"] div.tab-actions a.action-label.codicon.codicon-close` ) ; } async installExtension ( id , waitUntilEnabled ) { await this . searchForExtension ( id ) ; await this . code . waitAndClick ( `div.extensions-viewlet[id="workbench.view.extensions"] .monaco-list-row[data-extension-id="${ id }"] .extension-list-item .monaco-action-bar .action-item:not(.disabled) .extension-action.install` ) ; await this . code . waitForElement ( `.extension-editor .monaco-action-bar .action-item:not(.disabled) .extension-action.uninstall` ) ; if ( waitUntilEnabled ) { await this . code . waitForElement ( `.extension-editor .monaco-action-bar .action-item:not(.disabled) .extension-action[title="Disable this extension"]` ) ; } } } export async function copyExtension ( repoPath , extensionsPath , extId ) { const dest = path . join ( extensionsPath , extId ) ; if ( ! fs . existsSync ( dest ) ) { const orig = path . join ( repoPath , 'extensions' , extId ) ; return promisify ( ncp ) ( orig , dest ) ; } }