From eedcd4be798dd2711401a969241bdd731498b646 Mon Sep 17 00:00:00 2001 From: shmck Date: Sun, 8 Sep 2019 19:30:37 -0700 Subject: [PATCH] run tests from save --- src/Channel.ts | 4 +--- src/actions/runTest.ts | 3 --- src/actions/tutorialConfig.ts | 7 ++----- src/editor/commands.ts | 21 +++++++++++++------- src/services/node/index.ts | 12 ----------- web-app/src/services/state/actions/editor.ts | 5 ++++- 6 files changed, 21 insertions(+), 31 deletions(-) diff --git a/src/Channel.ts b/src/Channel.ts index e29e87cf..9146c07b 100644 --- a/src/Channel.ts +++ b/src/Channel.ts @@ -22,18 +22,16 @@ class Channel implements Channel { console.log('RECEIVED:', actionType) switch (actionType) { case 'TEST_RUN': - vscode.commands.executeCommand('coderoad.run_test', action.payload) return case 'TUTORIAL_CONFIG': tutorialConfig(action.payload) return case 'SETUP_ACTIONS': - console.log(action.payload) + vscode.commands.executeCommand('coderoad.set_current_step', action.payload) setupActions(action.payload) return case 'SOLUTION_ACTIONS': - console.log(action.payload) solutionActions(action.payload) return default: diff --git a/src/actions/runTest.ts b/src/actions/runTest.ts index 3bc8f637..da187ec3 100644 --- a/src/actions/runTest.ts +++ b/src/actions/runTest.ts @@ -139,9 +139,6 @@ async function runTest({onSuccess, onFail, onRun, onError}: Props): Promise { await git.setupRemote(tutorial.repo.uri) // TODO: allow multiple coding languages in a tutorial + const language = tutorial.codingLanguage.toLowerCase() // setup onSave hook // console.log(`languageIds: ${languageIds.join(', ')}`) vscode.workspace.onDidSaveTextDocument((document: vscode.TextDocument) => { - if (document.uri.scheme === 'file' && tutorial.codingLanguage === document.languageId) { - // do work - // TODO: resolve issue if client unaware or out of sync with running test + if (document.uri.scheme === 'file' && language === document.languageId) { vscode.commands.executeCommand('coderoad.run_test') } }) - - console.log('configured') } export default tutorialConfig \ No newline at end of file diff --git a/src/editor/commands.ts b/src/editor/commands.ts index bcb66db0..57c1238b 100644 --- a/src/editor/commands.ts +++ b/src/editor/commands.ts @@ -7,6 +7,7 @@ const COMMANDS = { START: 'coderoad.start', OPEN_WEBVIEW: 'coderoad.open_webview', RUN_TEST: 'coderoad.run_test', + SET_CURRENT_STEP: 'coderoad.set_current_step', } interface CreateCommandProps { @@ -16,7 +17,7 @@ interface CreateCommandProps { export const createCommands = ({vscodeExt}: CreateCommandProps) => { // React panel webview let webview: any - + let currentStepId = '' return { // initialize [COMMANDS.START]: async () => { @@ -52,26 +53,32 @@ export const createCommands = ({vscodeExt}: CreateCommandProps) => { webview.createOrShow(column) }, - [COMMANDS.RUN_TEST]: ({stepId}: {stepId: string}) => { - console.log('run test webview', Object.keys(webview)) + [COMMANDS.SET_CURRENT_STEP]: ({stepId}: {stepId: string}) => { + // NOTE: as async, may sometimes be inaccurate + // set from last setup stepAction + currentStepId = stepId + }, + [COMMANDS.RUN_TEST]: (current: {stepId: string} | undefined) => { + // use stepId from client, or last set stepId + const payload = {stepId: current ? current.stepId : currentStepId} runTest({ onSuccess: () => { console.log('COMMAND TEST_PASS') - webview.send({type: 'TEST_PASS', payload: {stepId}}) + webview.send({type: 'TEST_PASS', payload}) vscode.window.showInformationMessage('PASS') }, onFail: () => { console.log('COMMAND TEST_FAIL') - webview.send({type: 'TEST_FAIL', payload: {stepId}}) + webview.send({type: 'TEST_FAIL', payload}) vscode.window.showWarningMessage('FAIL') }, onError: () => { console.log('COMMAND TEST_ERROR') - webview.send({type: 'TEST_ERROR', payload: [stepId]}) + webview.send({type: 'TEST_ERROR', payload}) }, onRun: () => { console.log('COMMAND TEST_RUN') - webview.send({type: 'TEST_RUN', payload: {stepId}}) + webview.send({type: 'TEST_RUN', payload}) } }) }, diff --git a/src/services/node/index.ts b/src/services/node/index.ts index d6b583a0..f7859da8 100644 --- a/src/services/node/index.ts +++ b/src/services/node/index.ts @@ -23,15 +23,3 @@ class Node { } export default new Node() - - -// export async function clear(): Promise { -// // remove all files including ignored -// // NOTE: Linux only -// const command = 'ls -A1 | xargs rm -rf' -// const { stderr } = await exec(command) -// if (stderr) { -// console.error(stderr) -// throw new Error('Error removing all files & folders') -// } -// } diff --git a/web-app/src/services/state/actions/editor.ts b/web-app/src/services/state/actions/editor.ts index 14d5133a..2a0e0525 100644 --- a/web-app/src/services/state/actions/editor.ts +++ b/web-app/src/services/state/actions/editor.ts @@ -57,7 +57,10 @@ export default { // load step actions channel.editorSend({ type: 'SETUP_ACTIONS', - payload: step.setup, + payload: { + stepId: step.id, + ...step.setup, + } }) } },