diff --git a/package-lock.json b/package-lock.json index 81e1ed5..b116d53 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,10 +9,10 @@ "version": "0.1.0", "license": "AGPL-3.0-or-later", "dependencies": { - "@abaplint/cli": "^2.84.9", - "@abaplint/runtime": "^1.7.34", - "@abaplint/transpiler": "^1.7.34", - "@abaplint/transpiler-cli": "^1.7.34" + "@abaplint/cli": "^2.85.11", + "@abaplint/runtime": "^1.7.44", + "@abaplint/transpiler": "^1.7.44", + "@abaplint/transpiler-cli": "^1.7.44" }, "bin": { "abap-test-runner": "bin/run.sh" @@ -20,7 +20,7 @@ "devDependencies": { "@types/chai": "^4.3.0", "@types/mocha": "^9.1.0", - "@types/node": "^17.0.13", + "@types/node": "^17.0.15", "chai": "^4.3.6", "mocha": "^9.2.0", "source-map-support": "^0.5.21", @@ -28,9 +28,9 @@ } }, "node_modules/@abaplint/cli": { - "version": "2.84.9", - "resolved": "https://registry.npmjs.org/@abaplint/cli/-/cli-2.84.9.tgz", - "integrity": "sha512-As9xfHC2PUNdXYk7cCY5QK4WDS+GAABOdpU3VPyrxjyZkUwnbShtUIFveKZp9p6Ym1vOmKL/HxW6o+odWyKfhA==", + "version": "2.85.11", + "resolved": "https://registry.npmjs.org/@abaplint/cli/-/cli-2.85.11.tgz", + "integrity": "sha512-VZSAzt7OneY8rcetQoABBuZw+qyAU4f161rP0nLnhfvQwtF8/mKJ0jpYN9bhILJgO/n7UJsV+ZIk+HYqNLJcMw==", "bin": { "abaplint": "abaplint" }, @@ -39,11 +39,11 @@ } }, "node_modules/@abaplint/core": { - "version": "2.84.9", - "resolved": "https://registry.npmjs.org/@abaplint/core/-/core-2.84.9.tgz", - "integrity": "sha512-qBL8artV0AzVpZTImGqjSNR+LYskNv/+00T+oBH4GInawXaUcHDl9541Cd+BibegOTHNFuJrek4xWotj7TxLxg==", + "version": "2.85.10", + "resolved": "https://registry.npmjs.org/@abaplint/core/-/core-2.85.10.tgz", + "integrity": "sha512-GsOetLD3FW/kNgCkNe44/5LTh3lrodgBPAH2JPYDH4hIeAOa8VVNVxObpA3PwuvMF8lI7EyXk5T1GQjmvmX4Mw==", "dependencies": { - "fast-xml-parser": "^4.0.1", + "fast-xml-parser": "^4.0.2", "json5": "^2.2.0", "vscode-languageserver-protocol": "^3.16.0", "vscode-languageserver-types": "^3.16.0" @@ -53,27 +53,27 @@ } }, "node_modules/@abaplint/runtime": { - "version": "1.7.34", - "resolved": "https://registry.npmjs.org/@abaplint/runtime/-/runtime-1.7.34.tgz", - "integrity": "sha512-eob6xCSsUFuMt67sHJ6Hs1HSL0sWuLunUqw60aLdME/2DVQWsxLtye+zl7ebwxYa9tSTi+x1KxuhLN2CiHgtuQ==", + "version": "1.7.44", + "resolved": "https://registry.npmjs.org/@abaplint/runtime/-/runtime-1.7.44.tgz", + "integrity": "sha512-2wwXMM0V4eK1zAJvm0CiiLbNbPDY7LapJpWtW7YhhpYkqBKkLQdLga9cIyW8GHyY8NLY5wu5+rlIOUD7InCBew==", "dependencies": { "hdb": "^0.19.1", "sql.js": "^1.6.2" } }, "node_modules/@abaplint/transpiler": { - "version": "1.7.34", - "resolved": "https://registry.npmjs.org/@abaplint/transpiler/-/transpiler-1.7.34.tgz", - "integrity": "sha512-h68WyJijGbh3gnFfGdzr0St73/XUIJFcbz312qOBw6t6TaovQwHvxzxxlMHx6IiM5lxeGuQtX4Hw4+XYkgnCQw==", + "version": "1.7.44", + "resolved": "https://registry.npmjs.org/@abaplint/transpiler/-/transpiler-1.7.44.tgz", + "integrity": "sha512-mSb++JCuF43KRHUAyulp/68NnBGpueqsJD2ViGCk7D5UPV3bEME05ggIWDw7prc/VDnovz5ZQtlRT0vibyA+tg==", "dependencies": { - "@abaplint/core": "^2.84.9", + "@abaplint/core": "^2.85.10", "source-map": "^0.7.3" } }, "node_modules/@abaplint/transpiler-cli": { - "version": "1.7.34", - "resolved": "https://registry.npmjs.org/@abaplint/transpiler-cli/-/transpiler-cli-1.7.34.tgz", - "integrity": "sha512-UzInhr9Jfxn0ps18kIrTZFm/OAAhG32I/FAAOIXQ2d4qlXe5LU7blA0OtvL9+rggreS+6HPyHXwPqEVKf1GdEA==", + "version": "1.7.44", + "resolved": "https://registry.npmjs.org/@abaplint/transpiler-cli/-/transpiler-cli-1.7.44.tgz", + "integrity": "sha512-WpzPJAUsSDkYYNo6rh7MBdh+E47F2t0XYxj8o3/odqERgKpqX15Ag1OkSSWQp6W8ev4kZFBj9xnufm4ZGeLNGg==", "bin": { "abap_transpile": "abap_transpile" } @@ -99,9 +99,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.13.tgz", - "integrity": "sha512-Y86MAxASe25hNzlDbsviXl8jQHb0RDvKt4c40ZJQ1Don0AAL0STLZSs4N+6gLEO55pedy7r2cLwS+ZDxPm/2Bw==", + "version": "17.0.15", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.15.tgz", + "integrity": "sha512-zWt4SDDv1S9WRBNxLFxFRHxdD9tvH8f5/kg5/IaLFdnSNXsDY4eL3Q3XXN+VxUnWIhyVFDwcsmAprvwXoM/ClA==", "dev": true }, "node_modules/@ungap/promise-all-settled": { @@ -433,9 +433,9 @@ } }, "node_modules/fast-xml-parser": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.1.tgz", - "integrity": "sha512-EN1yOXDmMqpHrqkwTlCJDvFjepJBoBxjLRDtDxFmqrBILGV3NyFWpmcsofSKCCzc+YxhvNreB5rcKzG+TlyWpg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.2.tgz", + "integrity": "sha512-3GOSbMTZxxrPPQ+aURM7Wia10bi71HBbiG/3mOEEkRSAkRtg4m7UhMSnB2rzOhBeRHyJUWsllOfyNnjTT1b85w==", "dependencies": { "strnum": "^1.0.5" }, @@ -1240,36 +1240,36 @@ }, "dependencies": { "@abaplint/cli": { - "version": "2.84.9", - "resolved": "https://registry.npmjs.org/@abaplint/cli/-/cli-2.84.9.tgz", - "integrity": "sha512-As9xfHC2PUNdXYk7cCY5QK4WDS+GAABOdpU3VPyrxjyZkUwnbShtUIFveKZp9p6Ym1vOmKL/HxW6o+odWyKfhA==" + "version": "2.85.11", + "resolved": "https://registry.npmjs.org/@abaplint/cli/-/cli-2.85.11.tgz", + "integrity": "sha512-VZSAzt7OneY8rcetQoABBuZw+qyAU4f161rP0nLnhfvQwtF8/mKJ0jpYN9bhILJgO/n7UJsV+ZIk+HYqNLJcMw==" }, "@abaplint/core": { - "version": "2.84.9", - "resolved": "https://registry.npmjs.org/@abaplint/core/-/core-2.84.9.tgz", - "integrity": "sha512-qBL8artV0AzVpZTImGqjSNR+LYskNv/+00T+oBH4GInawXaUcHDl9541Cd+BibegOTHNFuJrek4xWotj7TxLxg==", + "version": "2.85.10", + "resolved": "https://registry.npmjs.org/@abaplint/core/-/core-2.85.10.tgz", + "integrity": "sha512-GsOetLD3FW/kNgCkNe44/5LTh3lrodgBPAH2JPYDH4hIeAOa8VVNVxObpA3PwuvMF8lI7EyXk5T1GQjmvmX4Mw==", "requires": { - "fast-xml-parser": "^4.0.1", + "fast-xml-parser": "^4.0.2", "json5": "^2.2.0", "vscode-languageserver-protocol": "^3.16.0", "vscode-languageserver-types": "^3.16.0" } }, "@abaplint/runtime": { - "version": "1.7.34", - "resolved": "https://registry.npmjs.org/@abaplint/runtime/-/runtime-1.7.34.tgz", - "integrity": "sha512-eob6xCSsUFuMt67sHJ6Hs1HSL0sWuLunUqw60aLdME/2DVQWsxLtye+zl7ebwxYa9tSTi+x1KxuhLN2CiHgtuQ==", + "version": "1.7.44", + "resolved": "https://registry.npmjs.org/@abaplint/runtime/-/runtime-1.7.44.tgz", + "integrity": "sha512-2wwXMM0V4eK1zAJvm0CiiLbNbPDY7LapJpWtW7YhhpYkqBKkLQdLga9cIyW8GHyY8NLY5wu5+rlIOUD7InCBew==", "requires": { "hdb": "^0.19.1", "sql.js": "^1.6.2" } }, "@abaplint/transpiler": { - "version": "1.7.34", - "resolved": "https://registry.npmjs.org/@abaplint/transpiler/-/transpiler-1.7.34.tgz", - "integrity": "sha512-h68WyJijGbh3gnFfGdzr0St73/XUIJFcbz312qOBw6t6TaovQwHvxzxxlMHx6IiM5lxeGuQtX4Hw4+XYkgnCQw==", + "version": "1.7.44", + "resolved": "https://registry.npmjs.org/@abaplint/transpiler/-/transpiler-1.7.44.tgz", + "integrity": "sha512-mSb++JCuF43KRHUAyulp/68NnBGpueqsJD2ViGCk7D5UPV3bEME05ggIWDw7prc/VDnovz5ZQtlRT0vibyA+tg==", "requires": { - "@abaplint/core": "^2.84.9", + "@abaplint/core": "^2.85.10", "source-map": "^0.7.3" }, "dependencies": { @@ -1281,9 +1281,9 @@ } }, "@abaplint/transpiler-cli": { - "version": "1.7.34", - "resolved": "https://registry.npmjs.org/@abaplint/transpiler-cli/-/transpiler-cli-1.7.34.tgz", - "integrity": "sha512-UzInhr9Jfxn0ps18kIrTZFm/OAAhG32I/FAAOIXQ2d4qlXe5LU7blA0OtvL9+rggreS+6HPyHXwPqEVKf1GdEA==" + "version": "1.7.44", + "resolved": "https://registry.npmjs.org/@abaplint/transpiler-cli/-/transpiler-cli-1.7.44.tgz", + "integrity": "sha512-WpzPJAUsSDkYYNo6rh7MBdh+E47F2t0XYxj8o3/odqERgKpqX15Ag1OkSSWQp6W8ev4kZFBj9xnufm4ZGeLNGg==" }, "@types/chai": { "version": "4.3.0", @@ -1298,9 +1298,9 @@ "dev": true }, "@types/node": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.13.tgz", - "integrity": "sha512-Y86MAxASe25hNzlDbsviXl8jQHb0RDvKt4c40ZJQ1Don0AAL0STLZSs4N+6gLEO55pedy7r2cLwS+ZDxPm/2Bw==", + "version": "17.0.15", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.15.tgz", + "integrity": "sha512-zWt4SDDv1S9WRBNxLFxFRHxdD9tvH8f5/kg5/IaLFdnSNXsDY4eL3Q3XXN+VxUnWIhyVFDwcsmAprvwXoM/ClA==", "dev": true }, "@ungap/promise-all-settled": { @@ -1548,9 +1548,9 @@ "dev": true }, "fast-xml-parser": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.1.tgz", - "integrity": "sha512-EN1yOXDmMqpHrqkwTlCJDvFjepJBoBxjLRDtDxFmqrBILGV3NyFWpmcsofSKCCzc+YxhvNreB5rcKzG+TlyWpg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.2.tgz", + "integrity": "sha512-3GOSbMTZxxrPPQ+aURM7Wia10bi71HBbiG/3mOEEkRSAkRtg4m7UhMSnB2rzOhBeRHyJUWsllOfyNnjTT1b85w==", "requires": { "strnum": "^1.0.5" } diff --git a/package.json b/package.json index d2ccee7..f1e89dc 100644 --- a/package.json +++ b/package.json @@ -26,10 +26,10 @@ "require": "source-map-support/register" }, "dependencies": { - "@abaplint/transpiler-cli": "^1.7.34", - "@abaplint/transpiler": "^1.7.34", - "@abaplint/cli": "^2.84.9", - "@abaplint/runtime": "^1.7.34" + "@abaplint/transpiler-cli": "^1.7.44", + "@abaplint/transpiler": "^1.7.44", + "@abaplint/cli": "^2.85.11", + "@abaplint/runtime": "^1.7.44" }, "devDependencies": { "@types/chai": "^4.3.0", @@ -38,6 +38,6 @@ "mocha": "^9.2.0", "source-map-support": "^0.5.21", "typescript": "^4.5.5", - "@types/node": "^17.0.13" + "@types/node": "^17.0.15" } } diff --git a/src/index.ts b/src/index.ts index 0b12ecf..90f1bdf 100644 --- a/src/index.ts +++ b/src/index.ts @@ -10,15 +10,27 @@ const inputDir = process.argv[3]; const outputDir = process.argv[4]; const outputFile = process.argv[5]; +interface IOutputTest { + name: string, + status: "pass" | "fail" | "error", + message: string, + output?: string, + test_code?: string, +} + interface IOutput { version: number, status: "pass" | "fail" | "error", message?: string, + tests: IOutputTest[], } +// ************************************** + const output: IOutput = { - version: 1, + version: 2, status: "pass", + tests: [], } class Runner { @@ -38,9 +50,25 @@ class Runner { this.link(); this.executeTests(); } + if (output.status === "pass") { + this.readJsonResult(); + } fs.writeFileSync(outputFile, JSON.stringify(output)); } + private readJsonResult() { + const list = JSON.parse(fs.readFileSync(path.join(this.tmpDir, "compiled", "output.json"), "utf-8")); + for (const t of list) { + if (t.status !== "SUCCESS") { + output.status = "fail"; + } + output.tests.push({ + name: t.method_name, + status: t.status === "SUCCESS" ? "pass" : "fail", + message: t.message}); + } + } + private syntaxAndDownport() { const LINT_RESULT = "_abaplint.txt"; const abaplintConfig = Transpiler.config; @@ -126,7 +154,7 @@ class Runner { const RUN_RESULT = "_run_result.txt"; try { - execSync(`node compiled/index.mjs > ` + RUN_RESULT, { + execSync(`node compiled/index_open.mjs > ` + RUN_RESULT, { stdio: 'pipe', cwd: this.tmpDir}); } catch (error) { diff --git a/tests/hello-world-pass/expected_results.json b/tests/hello-world-pass/expected_results.json index 1a178d3..34eab81 100644 --- a/tests/hello-world-pass/expected_results.json +++ b/tests/hello-world-pass/expected_results.json @@ -1 +1 @@ -{"version":1,"status":"pass"} \ No newline at end of file +{"version":2,"status":"pass","tests":[{"name":"TEST","status":"pass","message":""}]} \ No newline at end of file diff --git a/tests/simple-all-fail/expected_results.json b/tests/simple-all-fail/expected_results.json index 7fdc628..df71c16 100644 --- a/tests/simple-all-fail/expected_results.json +++ b/tests/simple-all-fail/expected_results.json @@ -1 +1 @@ -{"version":1,"status":"fail","message":"ZCL_SIMPLE: running ltcl_simple->test1\n\nError: ASSERT failed"} \ No newline at end of file +{"version":2,"status":"fail","tests":[{"name":"TEST1","status":"fail","message":"Expected 123, got 2"},{"name":"TEST2","status":"fail","message":"Expected 36, got 2"}]} \ No newline at end of file diff --git a/tests/simple-downport-definitions_top-pass/expected_results.json b/tests/simple-downport-definitions_top-pass/expected_results.json index 1a178d3..34eab81 100644 --- a/tests/simple-downport-definitions_top-pass/expected_results.json +++ b/tests/simple-downport-definitions_top-pass/expected_results.json @@ -1 +1 @@ -{"version":1,"status":"pass"} \ No newline at end of file +{"version":2,"status":"pass","tests":[{"name":"TEST","status":"pass","message":""}]} \ No newline at end of file diff --git a/tests/simple-downport-pass/expected_results.json b/tests/simple-downport-pass/expected_results.json index 1a178d3..34eab81 100644 --- a/tests/simple-downport-pass/expected_results.json +++ b/tests/simple-downport-pass/expected_results.json @@ -1 +1 @@ -{"version":1,"status":"pass"} \ No newline at end of file +{"version":2,"status":"pass","tests":[{"name":"TEST","status":"pass","message":""}]} \ No newline at end of file diff --git a/tests/simple-error/expected_results.json b/tests/simple-error/expected_results.json index be9eca5..9a0cdf5 100644 --- a/tests/simple-error/expected_results.json +++ b/tests/simple-error/expected_results.json @@ -1 +1 @@ -{"version":1,"status":"error","message":"./zcl_simple.clas.abap[9, 5] - Statement does not exist in ABAPopen-abap(or a parser error), \"blah\" (parser_error) [E]\nabaplint: 1 issue(s) found"} \ No newline at end of file +{"version":2,"status":"error","tests":[],"message":"./zcl_simple.clas.abap[9, 5] - Statement does not exist in ABAPopen-abap(or a parser error), \"blah\" (parser_error) [E]\nabaplint: 1 issue(s) found"} \ No newline at end of file diff --git a/tests/simple-fail/expected_results.json b/tests/simple-fail/expected_results.json index db74bd4..89e3444 100644 --- a/tests/simple-fail/expected_results.json +++ b/tests/simple-fail/expected_results.json @@ -1 +1 @@ -{"version":1,"status":"fail","message":"ZCL_SIMPLE: running ltcl_simple->test\n\nError: ASSERT failed"} \ No newline at end of file +{"version":2,"status":"fail","tests":[{"name":"TEST","status":"fail","message":"Expected 123456, got 3"}]} \ No newline at end of file diff --git a/tests/simple-pass/expected_results.json b/tests/simple-pass/expected_results.json index 1a178d3..34eab81 100644 --- a/tests/simple-pass/expected_results.json +++ b/tests/simple-pass/expected_results.json @@ -1 +1 @@ -{"version":1,"status":"pass"} \ No newline at end of file +{"version":2,"status":"pass","tests":[{"name":"TEST","status":"pass","message":""}]} \ No newline at end of file diff --git a/tests/simple-some-fail/expected_results.json b/tests/simple-some-fail/expected_results.json index 77113b5..5431a06 100644 --- a/tests/simple-some-fail/expected_results.json +++ b/tests/simple-some-fail/expected_results.json @@ -1 +1 @@ -{"version":1,"status":"fail","message":"ZCL_SIMPLE: running ltcl_simple->test1\nZCL_SIMPLE: running ltcl_simple->test2\n\nError: ASSERT failed"} \ No newline at end of file +{"version":2,"status":"fail","tests":[{"name":"TEST1","status":"pass","message":""},{"name":"TEST2","status":"fail","message":"Expected 36, got 2"}]} \ No newline at end of file diff --git a/tests/use-ddic-string-table/expected_results.json b/tests/use-ddic-string-table/expected_results.json index 1a178d3..34eab81 100644 --- a/tests/use-ddic-string-table/expected_results.json +++ b/tests/use-ddic-string-table/expected_results.json @@ -1 +1 @@ -{"version":1,"status":"pass"} \ No newline at end of file +{"version":2,"status":"pass","tests":[{"name":"TEST","status":"pass","message":""}]} \ No newline at end of file