diff --git a/.eslintrc.js b/.eslintrc.js index 7dda68b3..47fb6bef 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -71,6 +71,7 @@ module.exports = { '**/xod-client-electron/**/*.jsx', '**/xod-client/stories/*.jsx', '**/xod-client-browser/tools/*.js', + '**/xod-tabtest/tools/*.js', '**/xod-client-browser/test-func/*.js', '**/xod-client-browser/benchmark/*.js' ] diff --git a/packages/xod-tabtest/package.json b/packages/xod-tabtest/package.json index 76678262..05d4910c 100644 --- a/packages/xod-tabtest/package.json +++ b/packages/xod-tabtest/package.json @@ -3,7 +3,9 @@ "version": "0.25.2", "scripts": { "refmt": "find src/ test/ -name '*.re*' -exec refmt --in-place {} +", - "build": "bsb -make-world", + "build:lib": "node ./tools/loadTabtestLibPatches.js", + "build:re": "bsb -make-world", + "build": "yarn build:re && yarn build:lib", "clean:dist": "rimraf ./lib ./src/**/*.bs.js ./test/**/*.bs.js", "dev": "bsb -w", "test": "jest" @@ -22,7 +24,9 @@ }, "devDependencies": { "@glennsl/bs-jest": "^0.4.2", - "bs-platform": "^3.1.5" + "bs-platform": "^3.1.5", + "ramda": "^0.24.1", + "xod-fs": "^0.25.2" }, "jest": { "testMatch": [ diff --git a/packages/xod-tabtest/src/Tabtest.re b/packages/xod-tabtest/src/Tabtest.re index 915fba66..4eb884a3 100644 --- a/packages/xod-tabtest/src/Tabtest.re +++ b/packages/xod-tabtest/src/Tabtest.re @@ -283,8 +283,19 @@ module TestCase = { }; }; +[@bs.module] +external tabtestLibPatches : array(XodProject.Patch.t) = + "../lib/tabtestLibPatches.json"; + let generatePatchSuite = (project, patchPathToTest) : XResult.t(t) => { - let patchUnderTestOpt = Project.getPatchByPath(project, patchPathToTest); + let projectWithTabtestLib = + XodProject.Project.upsertPatches( + project, + Belt.List.fromArray(tabtestLibPatches), + ); + + let patchUnderTestOpt = + Project.getPatchByPath(projectWithTabtestLib, patchPathToTest); let tsvOpt = patchUnderTestOpt |. Option.flatMap(Patch.getTabtestContent); switch (patchUnderTestOpt, tsvOpt) { | (None, _) => @@ -298,7 +309,7 @@ let generatePatchSuite = (project, patchPathToTest) : XResult.t(t) => { ), ) | (Some(patchUnderTest), Some(tsv)) => - let bench = Bench.create(project, patchUnderTest); + let bench = Bench.create(projectWithTabtestLib, patchUnderTest); let probes = bench.probes; let tabData = TabData.parse(tsv); let realPinLabels = @@ -322,7 +333,7 @@ let generatePatchSuite = (project, patchPathToTest) : XResult.t(t) => { let sketchFilename = safeBasename ++ ".sketch.cpp"; let testFilename = safeBasename ++ ".catch.inl"; let sketchFooter = {j|\n\n#include "$testFilename"\n|j}; - Project.assocPatch(project, benchPatchPath, bench.patch) + Project.assocPatch(projectWithTabtestLib, benchPatchPath, bench.patch) |. XodArduino.Transpiler.transpile(_, benchPatchPath) |. BeltHoles.Result.map(program => { let idMap = diff --git a/packages/xod-tabtest/tools/loadTabtestLibPatches.js b/packages/xod-tabtest/tools/loadTabtestLibPatches.js new file mode 100644 index 00000000..0d37e31a --- /dev/null +++ b/packages/xod-tabtest/tools/loadTabtestLibPatches.js @@ -0,0 +1,28 @@ +const fs = require('fs'); +const path = require('path'); +const R = require('ramda'); + +const XP = require('xod-project'); +const { loadProject } = require('xod-fs'); + +const pathToTabtestLib = path.resolve( + __dirname, + '../workspace/__lib__/xod/tabtest' +); +const targetPath = path.resolve(__dirname, '../lib/tabtestLibPatches.json'); + +loadProject([], pathToTabtestLib).then(project => { + const tabtestLibPatches = R.compose( + R.map( + R.over( + R.lens(XP.getPatchPath, XP.setPatchPath), + R.replace('@', 'xod/tabtest') + ) + ), + XP.listLocalPatches + )(project); + + const json = JSON.stringify(tabtestLibPatches, null, 2); + fs.writeFileSync(targetPath, json); + process.exit(0); +});