|
@@ -0,0 +1,41 @@
|
|
|
|
+import {SemanticAnalyser} from './../processor/semantic/semanticAnalyser';
|
|
|
|
+import {IVProgProcessor} from './../processor/ivprogProcessor';
|
|
|
|
+import { InputTest } from './inputTest';
|
|
|
|
+import { OutputTest } from './outputTest';
|
|
|
|
+import { LocalizedStrings } from './../services/localizedStringsService'
|
|
|
|
+
|
|
|
|
+export function autoGenerateTestCaseOutput (program_text, testCases) {
|
|
|
|
+ let copyTestCases = testCases.map((test) => Object.assign({}, test));
|
|
|
|
+ try {
|
|
|
|
+ const program = SemanticAnalyser.analyseFromSource(program_text);
|
|
|
|
+ const resultList = testCases.map((test, id) => {
|
|
|
|
+ const input = new InputTest(test.input);
|
|
|
|
+ const output = new OutputTest();
|
|
|
|
+ const exec = new IVProgProcessor(program);
|
|
|
|
+ exec.registerInput(input);
|
|
|
|
+ exec.registerOutput(output);
|
|
|
|
+ return exec.interpretAST().then(_ => {
|
|
|
|
+ return {id: id, program: exec};
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+ return Promise.all(resultList).then(result_final => {
|
|
|
|
+ for(let i = 0; i < result_final.length; ++i) {
|
|
|
|
+ const result = result_final[i];
|
|
|
|
+ const output = result.program.output.list;
|
|
|
|
+ const input = result.program.input;
|
|
|
|
+ if(input.index != input.inputList.length) {
|
|
|
|
+ window.showAlert(LocalizedStrings.getMessage("testcase_autogen_unused_input", [result.id+1]));
|
|
|
|
+ return Promise.resolve(false);
|
|
|
|
+ }
|
|
|
|
+ if(output.length == 0) {
|
|
|
|
+ window.showAlert(LocalizedStrings.getMessage("testcase_autogen_empty", [result.id+1]));
|
|
|
|
+ }
|
|
|
|
+ copyTestCases[result.id].output = output;
|
|
|
|
+ }
|
|
|
|
+ window.outputGenerated(copyTestCases);
|
|
|
|
+ return Promise.resolve(true);
|
|
|
|
+ });
|
|
|
|
+ }catch (error) {
|
|
|
|
+ return Promise.reject(error)
|
|
|
|
+ }
|
|
|
|
+}
|