diff --git a/package-lock.json b/package-lock.json index 28749bcd..40ad9ab4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -77,9 +77,9 @@ } }, "@eslint/eslintrc": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", - "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -542,9 +542,9 @@ "dev": true }, "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true }, "agent-base": { @@ -1377,13 +1377,13 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "eslint": { - "version": "7.30.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.30.0.tgz", - "integrity": "sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==", + "version": "7.31.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.31.0.tgz", + "integrity": "sha512-vafgJpSh2ia8tnTkNUkwxGmnumgckLh5aAbLa1xRmIn9+owi8qBNGKL+B881kNKNTy7FFqTEkpNkUvmw0n6PkA==", "dev": true, "requires": { "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.2", + "@eslint/eslintrc": "^0.4.3", "@humanwhocodes/config-array": "^0.5.0", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -1712,9 +1712,9 @@ } }, "flatted": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.0.tgz", - "integrity": "sha512-XprP7lDrVT+kE2c2YlfiV+IfS9zxukiIOvNamPNsImNhXadSsQEbosItdL9bUQlCZXR13SvPk20BjWSWLA7m4A==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.1.tgz", + "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==", "dev": true }, "follow-redirects": { @@ -3207,9 +3207,9 @@ }, "dependencies": { "ajv": { - "version": "8.6.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.1.tgz", - "integrity": "sha512-42VLtQUOLefAvKFAQIxIZDaThq6om/PrfP0CYk3/vn+y4BMNkKnbli8ON2QCiHov4KkzOSJ/xSoBJdayiiYvVQ==", + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", + "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", diff --git a/package.json b/package.json index f93c9eec..8ebe1850 100644 --- a/package.json +++ b/package.json @@ -293,7 +293,7 @@ "@typescript-eslint/eslint-plugin": "^4.28.3", "@typescript-eslint/parser": "^4.28.3", "chai": "^4.3.4", - "eslint": "^7.30.0", + "eslint": "^7.31.0", "mocha": "^9.0.2", "mocha-jenkins-reporter": "^0.4.4", "sinon": "11.1.1", diff --git a/src/test/suite/stubDemoTutorial.test.ts b/src/test/suite/stubDemoTutorial.test.ts index bc9c676a..6b08531d 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'; @@ -33,11 +33,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 () => { @@ -97,6 +115,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}`);