From eac9a416756967501a4eb01a1a72bbd2bac1ddfc Mon Sep 17 00:00:00 2001 From: Brian Fitzpatrick Date: Fri, 11 Jun 2021 11:16:09 -0600 Subject: [PATCH 1/4] FUSETOOLS2-1152 fixing test Signed-off-by: Brian Fitzpatrick --- src/test/suite/stubDemoTutorial.test.ts | 69 ++++++++++++++++++++++++- 1 file changed, 67 insertions(+), 2 deletions(-) diff --git a/src/test/suite/stubDemoTutorial.test.ts b/src/test/suite/stubDemoTutorial.test.ts index 339baff9..ac1de2dd 100644 --- a/src/test/suite/stubDemoTutorial.test.ts +++ b/src/test/suite/stubDemoTutorial.test.ts @@ -16,7 +16,7 @@ */ import { expect } from 'chai'; -import { window, commands, env, Uri, Terminal } from 'vscode'; +import { window, commands, env, Uri, Terminal, Disposable } from 'vscode'; import { START_DIDACT_COMMAND, sendTerminalText, gatherAllCommandsLinks, getContext } from '../../extensionFunctions'; import { didactManager } from '../../didactManager'; import { DidactUri } from '../../didactUri'; @@ -34,11 +34,29 @@ const TERMINAL_WAIT_RETRY = 2000; suite('stub out a tutorial', () => { + let disposables: Disposable[] = []; + + teardown(() => { + disposables.forEach(d => d.dispose()); + disposables.length = 0; + }); + test('that we can send an echo command to the terminal and get the response', async () => { const name = 'echoTerminal'; const text = `echo \"Hello World ${name}\"`; const result = `Hello World echoTerminal`; - await validateTerminalResponse(name, text, result); + const winResult = [ + `Hello`, + `World`, + `echoTerminal` + ]; + await validateTerminalResponseWin(name, text, result); + + // if (process.platform === 'win32') { + // await validateTerminalResponseWin(name, text, winResult); + // } else { + // await validateTerminalResponse(name, text, result); + // } }); test('that we can get a response from each command in the demo tutorial', async () => { @@ -98,6 +116,53 @@ suite('stub out a tutorial', () => { } } + async function validateTerminalResponseWin(terminalName : string, terminalText : string, terminalResponse : string) { + let terminalData:string[] = []; + console.log(`validateTerminalResponse terminal ${terminalName} executing text ${terminalText}`); + const term = window.createTerminal(terminalName); + expect(term).to.not.be.null; + if (term) { + console.log(`-current terminal = ${term?.name}`); + await sendTerminalText(terminalName, terminalText); + await waitUntil(async () => { + await focusOnNamedTerminal(terminalName); + return terminalName === window.activeTerminal?.name; + }, 1000); + try { + const predicate = async () => { + const result: string = await getActiveTerminalOutput(); + await commands.executeCommand('workbench.action.terminal.clear'); + if (result.trim().length > 0) terminalData.push(result.trim()); + return true; + }; + var numberOfTimes = 5; + const delay = 1000; + for (let i = 0; i < numberOfTimes; i++) { + await predicate(); + await new Promise((res) => { setTimeout(res, delay); }); + } + console.log(`-terminal output = ${terminalData}`); + + const foundIt = searchStringInArray(terminalResponse, terminalData); + if (foundIt > -1) { + return; + } else { + fail(`Searching for ${terminalResponse} but not found in current content of active terminal ${window.activeTerminal?.name} : ${terminalData}`); + }; + } catch (error){ + fail(error); + } + findAndDisposeTerminal(terminalName); + } + } + + function searchStringInArray (strToFind : string, strArray : string[]) : number { + for (var j=0; j { const term = window.activeTerminal; console.log(`-current terminal = ${term?.name}`); From aa5d63e32f25f608f05934cbbb695f2d8314a625 Mon Sep 17 00:00:00 2001 From: Brian Fitzpatrick Date: Mon, 12 Jul 2021 15:00:30 -0600 Subject: [PATCH 2/4] FUSETOOLS2-1203 adding tutorials via prefs - add test - update to use environment variable - adjusting env variable name - fix test - cleanup Signed-off-by: Brian Fitzpatrick --- src/extension.ts | 7 ++- src/test/suite/registry.test.ts | 20 ++++++- src/test/suite/stubDemoTutorial.test.ts | 69 +------------------------ src/utils.ts | 29 +++++++++++ 4 files changed, 56 insertions(+), 69 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 698ad414..76beda73 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -22,7 +22,9 @@ import { clearRegisteredTutorials, getOpenAtStartupSetting, clearOutputChannels, registerTutorialWithJSON, getAutoInstallDefaultTutorialsSetting, addNewTutorialWithNameAndCategoryForDidactUri, removeTutorialByNameAndCategory, - registerEmbeddedTutorials} from './utils'; + registerEmbeddedTutorials, + appendAdditionalTutorialsFromEnv, + getAppendRegisteredSettingFromEnv} from './utils'; import { DidactUriCompletionItemProvider } from './didactUriCompletionItemProvider'; import { DidactPanelSerializer } from './didactPanelSerializer'; import { didactManager, VIEW_TYPE } from './didactManager'; @@ -116,6 +118,9 @@ export async function activate(context: vscode.ExtensionContext): Promise { await registerEmbeddedTutorials(context, 'Writing Your First Didact Tutorial', './demos/markdown/tutorial/tutorial.didact.md'); } + // append any additional tutorials if we have them + await appendAdditionalTutorialsFromEnv(); + // create the view createIntegrationsView(); diff --git a/src/test/suite/registry.test.ts b/src/test/suite/registry.test.ts index 90562519..9dd195ef 100644 --- a/src/test/suite/registry.test.ts +++ b/src/test/suite/registry.test.ts @@ -1,5 +1,5 @@ import * as assert from 'assert'; -import {getRegisteredTutorials, getDidactCategories, getTutorialsForCategory, getUriForDidactNameAndCategory, registerTutorialWithCategory, clearRegisteredTutorials, registerTutorialWithArgs} from '../../utils'; +import {getRegisteredTutorials, getDidactCategories, getTutorialsForCategory, getUriForDidactNameAndCategory, registerTutorialWithCategory, clearRegisteredTutorials, registerTutorialWithArgs, DIDACT_APPEND_REGISTERED_SETTING, getAppendRegisteredSettingFromEnv, appendAdditionalTutorialsFromEnv} from '../../utils'; import {before} from 'mocha'; import * as vscode from 'vscode'; import { ADD_TUTORIAL_TO_REGISTRY, getContext, REGISTER_TUTORIAL } from '../../extensionFunctions'; @@ -115,6 +115,24 @@ suite('Didact registry test suite', () => { assert.ok(foundTutorial, `Did not find new-tutorial-4 registered via JSON`); }); + test('append registry from environment variable', async() => { + const tutsToAppend : String = '[{"name":"AppendMe2","category":"AppendedCat2","sourceUri":"https%3A%2F%2Fraw.githubusercontent.com%2Fredhat-developer%2Fvscode-didact%2Fmaster%2Fexamples%2Fregistry.example.didact.md"}]'; + process.env[DIDACT_APPEND_REGISTERED_SETTING] = tutsToAppend.toString(); + + const envVarJson = getAppendRegisteredSettingFromEnv(); + console.log(`envVar = ` + envVarJson); + assert.ok(envVarJson, `Did not find envVarJson`); + + const registry = getRegisteredTutorials(); + assert.notStrictEqual(registry, undefined); + + const tutName = `AppendMe2`; + await appendAdditionalTutorialsFromEnv(); + const foundTutorial = verifyTutorialInRegistry(tutName); + delete process.env.DIDACT_APPEND_REGISTERED_SETTING; + assert.ok(foundTutorial, `Did not find ${tutName} registered after appending to tutorial list from settings`); + }); + test('Clear all the tutorials', async() => { const registry = getRegisteredTutorials(); assert.notStrictEqual(registry, undefined); diff --git a/src/test/suite/stubDemoTutorial.test.ts b/src/test/suite/stubDemoTutorial.test.ts index ac1de2dd..339baff9 100644 --- a/src/test/suite/stubDemoTutorial.test.ts +++ b/src/test/suite/stubDemoTutorial.test.ts @@ -16,7 +16,7 @@ */ import { expect } from 'chai'; -import { window, commands, env, Uri, Terminal, Disposable } from 'vscode'; +import { window, commands, env, Uri, Terminal } from 'vscode'; import { START_DIDACT_COMMAND, sendTerminalText, gatherAllCommandsLinks, getContext } from '../../extensionFunctions'; import { didactManager } from '../../didactManager'; import { DidactUri } from '../../didactUri'; @@ -34,29 +34,11 @@ const TERMINAL_WAIT_RETRY = 2000; suite('stub out a tutorial', () => { - let disposables: Disposable[] = []; - - teardown(() => { - disposables.forEach(d => d.dispose()); - disposables.length = 0; - }); - test('that we can send an echo command to the terminal and get the response', async () => { const name = 'echoTerminal'; const text = `echo \"Hello World ${name}\"`; const result = `Hello World echoTerminal`; - const winResult = [ - `Hello`, - `World`, - `echoTerminal` - ]; - await validateTerminalResponseWin(name, text, result); - - // if (process.platform === 'win32') { - // await validateTerminalResponseWin(name, text, winResult); - // } else { - // await validateTerminalResponse(name, text, result); - // } + await validateTerminalResponse(name, text, result); }); test('that we can get a response from each command in the demo tutorial', async () => { @@ -116,53 +98,6 @@ suite('stub out a tutorial', () => { } } - async function validateTerminalResponseWin(terminalName : string, terminalText : string, terminalResponse : string) { - let terminalData:string[] = []; - console.log(`validateTerminalResponse terminal ${terminalName} executing text ${terminalText}`); - const term = window.createTerminal(terminalName); - expect(term).to.not.be.null; - if (term) { - console.log(`-current terminal = ${term?.name}`); - await sendTerminalText(terminalName, terminalText); - await waitUntil(async () => { - await focusOnNamedTerminal(terminalName); - return terminalName === window.activeTerminal?.name; - }, 1000); - try { - const predicate = async () => { - const result: string = await getActiveTerminalOutput(); - await commands.executeCommand('workbench.action.terminal.clear'); - if (result.trim().length > 0) terminalData.push(result.trim()); - return true; - }; - var numberOfTimes = 5; - const delay = 1000; - for (let i = 0; i < numberOfTimes; i++) { - await predicate(); - await new Promise((res) => { setTimeout(res, delay); }); - } - console.log(`-terminal output = ${terminalData}`); - - const foundIt = searchStringInArray(terminalResponse, terminalData); - if (foundIt > -1) { - return; - } else { - fail(`Searching for ${terminalResponse} but not found in current content of active terminal ${window.activeTerminal?.name} : ${terminalData}`); - }; - } catch (error){ - fail(error); - } - findAndDisposeTerminal(terminalName); - } - } - - function searchStringInArray (strToFind : string, strArray : string[]) : number { - for (var j=0; j { const term = window.activeTerminal; console.log(`-current terminal = ${term?.name}`); diff --git a/src/utils.ts b/src/utils.ts index b38937e9..53e7694e 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -30,6 +30,7 @@ export const DIDACT_OPEN_AT_STARTUP = 'didact.openDefaultTutorialAtStartup'; export const DIDACT_AUTO_INSTALL_DEFAULT_TUTORIALS = 'didact.autoAddDefaultTutorials'; export const DIDACT_CLI_LINK_LF_SETTING = 'didact.edit.cliLinkLF'; export const DIDACT_CLI_LINK_TEXT_SETTING = 'didact.edit.cliLinkText'; +export const DIDACT_APPEND_REGISTERED_SETTING = 'DIDACT_APPEND_REGISTRY'; const CACHED_OUTPUT_CHANNELS: OutputChannel[] = new Array(); @@ -500,3 +501,31 @@ export function getFileExtension(pathAsString: string) : string | undefined { } return undefined; } + +export function getAppendRegisteredSettingFromEnv() : string | undefined { + console.log(process.env); + const envVar = process.env[DIDACT_APPEND_REGISTERED_SETTING]; + if (!envVar || (typeof envVar !== 'string')) { + return; + } + return envVar as string; +} + +export async function appendAdditionalTutorialsFromEnv() : Promise { + try { + const appendTutorialsAtStartup: string | undefined = getAppendRegisteredSettingFromEnv(); + if (appendTutorialsAtStartup) { + await extensionFunctions.sendTextToOutputChannel(`Didact tutorials appended at startup via ${DIDACT_APPEND_REGISTERED_SETTING}`); + const jsonTutorials = JSON.parse(appendTutorialsAtStartup); + for (var i = 0; i < jsonTutorials.length; i++) { + const jsonObj:any = jsonTutorials[i]; + await extensionFunctions.sendTextToOutputChannel(`--Adding tutorial ${jsonObj.sourceUri} as ${jsonObj.name}/${jsonObj.category}`); + await registerTutorialWithCategory(jsonObj.name, jsonObj.sourceUri, jsonObj.category); + } + } + } catch (ex) { + await extensionFunctions.sendTextToOutputChannel(ex); + console.error(ex); + return Promise.reject(ex); + } +} From 41c94b9d70c871c62bdc3d7c71a22351850ddb14 Mon Sep 17 00:00:00 2001 From: Brian Fitzpatrick Date: Tue, 20 Jul 2021 12:24:50 -0600 Subject: [PATCH 3/4] remove unneeded import Signed-off-by: Brian Fitzpatrick --- src/extension.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 76beda73..35424034 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -23,8 +23,7 @@ import { clearRegisteredTutorials, getOpenAtStartupSetting, addNewTutorialWithNameAndCategoryForDidactUri, removeTutorialByNameAndCategory, registerEmbeddedTutorials, - appendAdditionalTutorialsFromEnv, - getAppendRegisteredSettingFromEnv} from './utils'; + appendAdditionalTutorialsFromEnv} from './utils'; import { DidactUriCompletionItemProvider } from './didactUriCompletionItemProvider'; import { DidactPanelSerializer } from './didactPanelSerializer'; import { didactManager, VIEW_TYPE } from './didactManager'; From fe587d70f1758d38ba4c2cdc0cafbbabe1007741 Mon Sep 17 00:00:00 2001 From: Brian Fitzpatrick Date: Wed, 21 Jul 2021 07:48:04 -0600 Subject: [PATCH 4/4] addressing PR feedback Signed-off-by: Brian Fitzpatrick --- src/utils.ts | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/utils.ts b/src/utils.ts index 53e7694e..09b11a96 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -503,7 +503,6 @@ export function getFileExtension(pathAsString: string) : string | undefined { } export function getAppendRegisteredSettingFromEnv() : string | undefined { - console.log(process.env); const envVar = process.env[DIDACT_APPEND_REGISTERED_SETTING]; if (!envVar || (typeof envVar !== 'string')) { return; @@ -517,15 +516,13 @@ export async function appendAdditionalTutorialsFromEnv() : Promise { if (appendTutorialsAtStartup) { await extensionFunctions.sendTextToOutputChannel(`Didact tutorials appended at startup via ${DIDACT_APPEND_REGISTERED_SETTING}`); const jsonTutorials = JSON.parse(appendTutorialsAtStartup); - for (var i = 0; i < jsonTutorials.length; i++) { - const jsonObj:any = jsonTutorials[i]; - await extensionFunctions.sendTextToOutputChannel(`--Adding tutorial ${jsonObj.sourceUri} as ${jsonObj.name}/${jsonObj.category}`); - await registerTutorialWithCategory(jsonObj.name, jsonObj.sourceUri, jsonObj.category); + for (const jsonTutorial of jsonTutorials) { + await extensionFunctions.sendTextToOutputChannel(`--Adding tutorial ${jsonTutorial.sourceUri} as ${jsonTutorial.name}/${jsonTutorial.category}`); + await registerTutorialWithCategory(jsonTutorial.name, jsonTutorial.sourceUri, jsonTutorial.category); } } } catch (ex) { await extensionFunctions.sendTextToOutputChannel(ex); - console.error(ex); return Promise.reject(ex); } }