diff --git a/packages/plugin-scalebox/CHANGELOG.md b/packages/plugin-scalebox/CHANGELOG.md index 1abe6cdd192..b7cc9903c11 100644 --- a/packages/plugin-scalebox/CHANGELOG.md +++ b/packages/plugin-scalebox/CHANGELOG.md @@ -1,6 +1,12 @@ # Change log for: @freesewing/plugin-scalebox +## unreleased (NaN-NaN-NaN) + +### Added + + - Added (esm) unit tests + ## 2.11.3 (2021-01-16) ### Added diff --git a/packages/plugin-scalebox/package.json b/packages/plugin-scalebox/package.json index 724572bc168..c2fcc3d14cf 100644 --- a/packages/plugin-scalebox/package.json +++ b/packages/plugin-scalebox/package.json @@ -30,18 +30,23 @@ "clean": "rimraf dist", "build": "rollup -c", "lernabuild": "rollup -c", - "test": "BABEL_ENV=production ../../node_modules/.bin/_mocha tests/*.test.js --require @babel/register", + "test": "BABEL_ENV=production ../../node_modules/.bin/_mocha tests/*.test.mjs --require @babel/register", "pubtest": "npm publish --registry http://localhost:6662", "pubforce": "npm publish", "symlink": "mkdir -p ./node_modules/@freesewing && cd ./node_modules/@freesewing && ln -s -f ../../../* . && cd -", "start": "rollup -c -w", - "prettier": "npx prettier --write 'src/*.js' 'tests/*.js'" + "testci": "BABEL_ENV=production ../../node_modules/.bin/_mocha tests/*.test.mjs --require @babel/register", + "prettier": "npx prettier --write 'src/*.js' 'tests/*.mjs'" }, "peerDependencies": { "@freesewing/core": "^2.19.5" }, "dependencies": {}, - "devDependencies": {}, + "devDependencies": { + "mocha": "^9.1.1", + "chai": "^4.2.0", + "@babel/register": "^7.10.5" + }, "files": [ "dist/*", "README.md", diff --git a/packages/plugin-scalebox/src/index.js b/packages/plugin-scalebox/src/index.js index f80f62646f6..b4a4f1a5287 100644 --- a/packages/plugin-scalebox/src/index.js +++ b/packages/plugin-scalebox/src/index.js @@ -6,9 +6,7 @@ export default { name: name, version: version, hooks: { - preRender: function (svg) { - svg.attributes.set('freesewing:plugin-scalebox', version) - }, + preRender: svg => svg.attributes.setIfUnset('freesewing:plugin-scalebox', version) }, macros: { scalebox, miniscale }, } diff --git a/packages/plugin-scalebox/tests/plugin.test.mjs b/packages/plugin-scalebox/tests/plugin.test.mjs new file mode 100644 index 00000000000..134bb48ecd3 --- /dev/null +++ b/packages/plugin-scalebox/tests/plugin.test.mjs @@ -0,0 +1,158 @@ +import chai from 'chai' +import freesewing from '@freesewing/core' +import plugin from '../dist/index.mjs' + +const expect = chai.expect +const round = freesewing.utils.round + +describe('Scalebox Plugin Tests', () => { + it("Should run the default scalebox macro", () => { + const pattern = new freesewing.Pattern().use(plugin) + pattern.parts.test = new pattern.Part(); + pattern.parts.test.points.anchor = new pattern.Point(100, 200); + const { macro } = pattern.parts.test.shorthand() + macro("scalebox", { + at: pattern.parts.test.points.anchor + }); + let p = pattern.parts.test.points; + expect(p.__scaleboxMetricTopLeft.x).to.equal(50); + expect(p.__scaleboxMetricTopLeft.y).to.equal(175); + expect(p.__scaleboxMetricTopRight.x).to.equal(150); + expect(p.__scaleboxMetricTopRight.y).to.equal(175); + expect(p.__scaleboxMetricBottomLeft.x).to.equal(50); + expect(p.__scaleboxMetricBottomLeft.y).to.equal(225); + expect(p.__scaleboxMetricBottomRight.x).to.equal(150); + expect(p.__scaleboxMetricBottomRight.y).to.equal(225); + expect(p.__scaleboxImperialTopLeft.x).to.equal(49.2); + expect(p.__scaleboxImperialTopLeft.y).to.equal(174.6); + expect(p.__scaleboxImperialTopRight.x).to.equal(150.8); + expect(p.__scaleboxImperialTopRight.y).to.equal(174.6); + expect(p.__scaleboxImperialBottomLeft.x).to.equal(49.2); + expect(p.__scaleboxImperialBottomLeft.y).to.equal(225.4); + expect(p.__scaleboxImperialBottomRight.x).to.equal(150.8); + expect(p.__scaleboxImperialBottomRight.y).to.equal(225.4); + expect(p.__scaleboxLead.x).to.equal(55); + expect(p.__scaleboxLead.y).to.equal(185); + expect(p.__scaleboxTitle.x).to.equal(55); + expect(p.__scaleboxTitle.y).to.equal(195); + expect(p.__scaleboxText.x).to.equal(55); + expect(p.__scaleboxText.y).to.equal(207); + expect(p.__scaleboxLink.x).to.equal(55); + expect(p.__scaleboxLink.y).to.equal(212); + expect(p.__scaleboxMetric.x).to.equal(100); + expect(p.__scaleboxMetric.y).to.equal(220); + expect(p.__scaleboxImperial.x).to.equal(100); + expect(p.__scaleboxImperial.y).to.equal(224); + p = pattern.parts.test.paths.__scaleboxMetric; + expect(p.ops[0].type).to.equal("move"); + expect(p.ops[1].type).to.equal("line"); + expect(p.ops[2].type).to.equal("line"); + expect(p.ops[3].type).to.equal("line"); + expect(p.ops[4].type).to.equal("close"); + expect(p.ops[0].to.x).to.equal(50); + expect(p.ops[0].to.y).to.equal(175); + expect(p.ops[1].to.x).to.equal(50); + expect(p.ops[1].to.y).to.equal(225); + expect(p.ops[2].to.x).to.equal(150); + expect(p.ops[2].to.y).to.equal(225); + expect(p.ops[3].to.x).to.equal(150); + expect(p.ops[3].to.y).to.equal(175); + p = pattern.parts.test.paths.__scaleboxImperial; + expect(p.ops[0].type).to.equal("move"); + expect(p.ops[1].type).to.equal("line"); + expect(p.ops[2].type).to.equal("line"); + expect(p.ops[3].type).to.equal("line"); + expect(p.ops[4].type).to.equal("close"); + expect(p.ops[0].to.x).to.equal(49.2); + expect(p.ops[0].to.y).to.equal(174.6); + expect(p.ops[1].to.x).to.equal(49.2); + expect(p.ops[1].to.y).to.equal(225.4); + expect(p.ops[2].to.x).to.equal(150.8); + expect(p.ops[2].to.y).to.equal(225.4); + expect(p.ops[3].to.x).to.equal(150.8); + expect(p.ops[3].to.y).to.equal(174.6); + }); + + it("Should run the scalebox macro with rotation", () => { + const pattern = new freesewing.Pattern().use(plugin) + pattern.parts.test = new pattern.Part(); + pattern.parts.test.points.anchor = new pattern.Point(100, 200); + const { macro } = pattern.parts.test.shorthand() + macro("scalebox", { + at: pattern.parts.test.points.anchor, + rotate: 90 + }); + const p = pattern.parts.test.points; + expect(round(p.__scaleboxMetricTopLeft.x)).to.equal(75); + expect(round(p.__scaleboxMetricTopLeft.y)).to.equal(250); + expect(round(p.__scaleboxMetricTopRight.x)).to.equal(75); + expect(round(p.__scaleboxMetricTopRight.y)).to.equal(150); + expect(round(p.__scaleboxMetricBottomLeft.x)).to.equal(125); + expect(round(p.__scaleboxMetricBottomLeft.y)).to.equal(250); + expect(round(p.__scaleboxMetricBottomRight.x)).to.equal(125); + expect(round(p.__scaleboxMetricBottomRight.y)).to.equal(150); + expect(round(p.__scaleboxImperialTopLeft.x)).to.equal(74.6); + expect(round(p.__scaleboxImperialTopLeft.y)).to.equal(250.8); + expect(round(p.__scaleboxImperialTopRight.x)).to.equal(74.6); + expect(round(p.__scaleboxImperialTopRight.y)).to.equal(149.2); + expect(round(p.__scaleboxImperialBottomLeft.x)).to.equal(125.4); + expect(round(p.__scaleboxImperialBottomLeft.y)).to.equal(250.8); + expect(round(p.__scaleboxImperialBottomRight.x)).to.equal(125.4); + expect(round(p.__scaleboxImperialBottomRight.y)).to.equal(149.2); + expect(round(p.__scaleboxLead.x)).to.equal(85); + expect(round(p.__scaleboxLead.y)).to.equal(245); + expect(round(p.__scaleboxTitle.x)).to.equal(95); + expect(round(p.__scaleboxTitle.y)).to.equal(245); + expect(round(p.__scaleboxText.x)).to.equal(107); + expect(round(p.__scaleboxText.y)).to.equal(245); + expect(round(p.__scaleboxLink.x)).to.equal(112); + expect(round(p.__scaleboxLink.y)).to.equal(245); + expect(round(p.__scaleboxMetric.x)).to.equal(120); + expect(round(p.__scaleboxMetric.y)).to.equal(200); + expect(round(p.__scaleboxImperial.x)).to.equal(124); + expect(round(p.__scaleboxImperial.y)).to.equal(200); + }); + + it("Should run the scalebox macro with default text", () => { + const pattern = new freesewing.Pattern().use(plugin) + pattern.parts.test = new pattern.Part(); + pattern.parts.test.points.anchor = new pattern.Point(100, 200); + const { macro } = pattern.parts.test.shorthand() + macro("scalebox", { + at: pattern.parts.test.points.anchor + }); + let p = pattern.parts.test.points.__scaleboxLead.attributes; + expect(p.get("data-text")).to.equal("FreeSewing"); + expect(p.get("data-text-class")).to.equal("text-sm"); + p = pattern.parts.test.points.__scaleboxTitle.attributes; + expect(p.get("data-text")).to.equal(" vundefined"); + expect(p.get("data-text-class")).to.equal("text-lg"); + p = pattern.parts.test.points.__scaleboxText.attributes; + expect(p.get("data-text-class")).to.equal("text-xs"); + expect(p.get("data-text-lineheight")).to.equal("4"); + expect(p.list["data-text"][0]).to.equal("supportFreesewingBecomeAPatron") + }); + + it("Should run the scalebox macro with custom text", () => { + const pattern = new freesewing.Pattern().use(plugin) + pattern.parts.test = new pattern.Part(); + pattern.parts.test.points.anchor = new pattern.Point(100, 200); + const { macro } = pattern.parts.test.shorthand() + macro("scalebox", { + at: pattern.parts.test.points.anchor, + lead: "theLead", + title: "theTitle", + text: "theText" + }); + let p = pattern.parts.test.points.__scaleboxLead.attributes; + expect(p.get("data-text")).to.equal("theLead"); + expect(p.get("data-text-class")).to.equal("text-sm"); + p = pattern.parts.test.points.__scaleboxTitle.attributes; + expect(p.get("data-text")).to.equal("theTitle"); + expect(p.get("data-text-class")).to.equal("text-lg"); + p = pattern.parts.test.points.__scaleboxText.attributes; + expect(p.get("data-text")).to.equal("theText"); + expect(p.get("data-text-class")).to.equal("text-xs"); + expect(p.get("data-text-lineheight")).to.equal("4"); + }) +}) diff --git a/packages/plugin-scalebox/tests/scalebox.test.js b/packages/plugin-scalebox/tests/scalebox.test.js deleted file mode 100644 index 5218616e9a5..00000000000 --- a/packages/plugin-scalebox/tests/scalebox.test.js +++ /dev/null @@ -1,184 +0,0 @@ -import freesewing from "freesewing"; -import { version } from "../package.json"; -let expect = require("chai").expect; -let plugin = require("../dist/index.js"); - -it("Should set the plugin name:version attribute", () => { - let pattern = new freesewing.Pattern().with(plugin); - pattern.render(); - expect(pattern.svg.attributes.get("freesewing:plugin-scalebox")).to.equal( - version - ); -}); - -it("Should run the default scalebox macro", () => { - let pattern = new freesewing.Pattern(); - pattern.draft = function() {}; - pattern.with(plugin); - pattern.parts.test = new pattern.Part(); - pattern.parts.test.points.anchor = new pattern.Point(100, 200); - let { macro } = pattern.parts.test.shorthand(); - macro("scalebox", { - at: pattern.parts.test.points.anchor - }); - let p = pattern.parts.test.points; - expect(p.__scaleboxMetricTopLeft.x).to.equal(50); - expect(p.__scaleboxMetricTopLeft.y).to.equal(175); - expect(p.__scaleboxMetricTopRight.x).to.equal(150); - expect(p.__scaleboxMetricTopRight.y).to.equal(175); - expect(p.__scaleboxMetricBottomLeft.x).to.equal(50); - expect(p.__scaleboxMetricBottomLeft.y).to.equal(225); - expect(p.__scaleboxMetricBottomRight.x).to.equal(150); - expect(p.__scaleboxMetricBottomRight.y).to.equal(225); - expect(p.__scaleboxImperialTopLeft.x).to.equal(49.2); - expect(p.__scaleboxImperialTopLeft.y).to.equal(174.6); - expect(p.__scaleboxImperialTopRight.x).to.equal(150.8); - expect(p.__scaleboxImperialTopRight.y).to.equal(174.6); - expect(p.__scaleboxImperialBottomLeft.x).to.equal(49.2); - expect(p.__scaleboxImperialBottomLeft.y).to.equal(225.4); - expect(p.__scaleboxImperialBottomRight.x).to.equal(150.8); - expect(p.__scaleboxImperialBottomRight.y).to.equal(225.4); - expect(p.__scaleboxLead.x).to.equal(55); - expect(p.__scaleboxLead.y).to.equal(185); - expect(p.__scaleboxTitle.x).to.equal(55); - expect(p.__scaleboxTitle.y).to.equal(195); - expect(p.__scaleboxText.x).to.equal(55); - expect(p.__scaleboxText.y).to.equal(203); - expect(p.__scaleboxLink.x).to.equal(55); - expect(p.__scaleboxLink.y).to.equal(211); - expect(p.__scaleboxMetric.x).to.equal(100); - expect(p.__scaleboxMetric.y).to.equal(220); - expect(p.__scaleboxImperial.x).to.equal(100); - expect(p.__scaleboxImperial.y).to.equal(224); - p = pattern.parts.test.paths.__scaleboxMetric; - expect(p.attributes.get("style")).to.equal("fill: #FFF; stroke: none;"); - expect(p.ops[0].type).to.equal("move"); - expect(p.ops[1].type).to.equal("line"); - expect(p.ops[2].type).to.equal("line"); - expect(p.ops[3].type).to.equal("line"); - expect(p.ops[4].type).to.equal("close"); - expect(p.ops[0].to.x).to.equal(50); - expect(p.ops[0].to.y).to.equal(175); - expect(p.ops[1].to.x).to.equal(50); - expect(p.ops[1].to.y).to.equal(225); - expect(p.ops[2].to.x).to.equal(150); - expect(p.ops[2].to.y).to.equal(225); - expect(p.ops[3].to.x).to.equal(150); - expect(p.ops[3].to.y).to.equal(175); - p = pattern.parts.test.paths.__scaleboxImperial; - expect(p.attributes.get("style")).to.equal("fill: #000; stroke: none;"); - expect(p.ops[0].type).to.equal("move"); - expect(p.ops[1].type).to.equal("line"); - expect(p.ops[2].type).to.equal("line"); - expect(p.ops[3].type).to.equal("line"); - expect(p.ops[4].type).to.equal("close"); - expect(p.ops[0].to.x).to.equal(49.2); - expect(p.ops[0].to.y).to.equal(174.6); - expect(p.ops[1].to.x).to.equal(49.2); - expect(p.ops[1].to.y).to.equal(225.4); - expect(p.ops[2].to.x).to.equal(150.8); - expect(p.ops[2].to.y).to.equal(225.4); - expect(p.ops[3].to.x).to.equal(150.8); - expect(p.ops[3].to.y).to.equal(174.6); -}); - -it("Should run the scalebox macro with rotation", () => { - let pattern = new freesewing.Pattern(); - pattern.draft = function() {}; - pattern.with(plugin); - pattern.parts.test = new pattern.Part(); - pattern.parts.test.points.anchor = new pattern.Point(100, 200); - let { macro } = pattern.parts.test.shorthand(); - macro("scalebox", { - at: pattern.parts.test.points.anchor, - rotate: 90 - }); - let p = pattern.parts.test.points; - expect(p.__scaleboxMetricTopLeft.x).to.equal(75); - expect(p.__scaleboxMetricTopLeft.y).to.equal(250); - expect(p.__scaleboxMetricTopRight.x).to.equal(75); - expect(p.__scaleboxMetricTopRight.y).to.equal(150); - expect(p.__scaleboxMetricBottomLeft.x).to.equal(125); - expect(p.__scaleboxMetricBottomLeft.y).to.equal(250); - expect(p.__scaleboxMetricBottomRight.x).to.equal(125); - expect(p.__scaleboxMetricBottomRight.y).to.equal(150); - expect(p.__scaleboxImperialTopLeft.x).to.equal(74.6); - expect(p.__scaleboxImperialTopLeft.y).to.equal(250.8); - expect(p.__scaleboxImperialTopRight.x).to.equal(74.6); - expect(p.__scaleboxImperialTopRight.y).to.equal(149.2); - expect(p.__scaleboxImperialBottomLeft.x).to.equal(125.4); - expect(p.__scaleboxImperialBottomLeft.y).to.equal(250.8); - expect(p.__scaleboxImperialBottomRight.x).to.equal(125.4); - expect(p.__scaleboxImperialBottomRight.y).to.equal(149.2); - expect(p.__scaleboxLead.x).to.equal(85); - expect(p.__scaleboxLead.y).to.equal(245); - expect(p.__scaleboxTitle.x).to.equal(95); - expect(p.__scaleboxTitle.y).to.equal(245); - expect(p.__scaleboxText.x).to.equal(103); - expect(p.__scaleboxText.y).to.equal(245); - expect(p.__scaleboxLink.x).to.equal(111); - expect(p.__scaleboxLink.y).to.equal(245); - expect(p.__scaleboxMetric.x).to.equal(120); - expect(p.__scaleboxMetric.y).to.equal(200); - expect(p.__scaleboxImperial.x).to.equal(124); - expect(p.__scaleboxImperial.y).to.equal(200); -}); - -it("Should run the scalebox macro with default text", () => { - let pattern = new freesewing.Pattern({ - name: "unitTest", - version: 99 - }); - pattern.draft = function() {}; - pattern.with(plugin); - pattern.parts.test = new pattern.Part(); - pattern.parts.test.points.anchor = new pattern.Point(100, 200); - let { macro } = pattern.parts.test.shorthand(); - macro("scalebox", { - at: pattern.parts.test.points.anchor - }); - let p = pattern.parts.test.points.__scaleboxLead.attributes; - expect(p.get("data-text")).to.equal("freesewing"); - expect(p.get("data-text-class")).to.equal("text-sm"); - p = pattern.parts.test.points.__scaleboxTitle.attributes; - expect(p.get("data-text")).to.equal("unitTest v99"); - expect(p.get("data-text-class")).to.equal("text-lg"); - p = pattern.parts.test.points.__scaleboxText.attributes; - expect(p.get("data-text-class")).to.equal("text-xs"); - expect(p.get("data-text-lineheight")).to.equal("4"); - expect(p.list["data-text"][0]).to.equal( - "freesewingIsMadeByJoostDeCockAndContributors" - ); - expect(p.list["data-text"][1]).to.equal("\n"); - expect(p.list["data-text"][2]).to.equal( - "withTheFinancialSupportOfOurPatrons" - ); -}); - -it("Should run the scalebox macro with custom text", () => { - let pattern = new freesewing.Pattern({ - name: "unitTest", - version: 99 - }); - pattern.draft = function() {}; - pattern.with(plugin); - pattern.parts.test = new pattern.Part(); - pattern.parts.test.points.anchor = new pattern.Point(100, 200); - let { macro } = pattern.parts.test.shorthand(); - macro("scalebox", { - at: pattern.parts.test.points.anchor, - lead: "theLead", - title: "theTitle", - text: "theText" - }); - let p = pattern.parts.test.points.__scaleboxLead.attributes; - expect(p.get("data-text")).to.equal("theLead"); - expect(p.get("data-text-class")).to.equal("text-sm"); - p = pattern.parts.test.points.__scaleboxTitle.attributes; - expect(p.get("data-text")).to.equal("theTitle"); - expect(p.get("data-text-class")).to.equal("text-lg"); - p = pattern.parts.test.points.__scaleboxText.attributes; - expect(p.get("data-text")).to.equal("theText"); - expect(p.get("data-text-class")).to.equal("text-xs"); - expect(p.get("data-text-lineheight")).to.equal("4"); -}); diff --git a/packages/plugin-scalebox/tests/shared.test.mjs b/packages/plugin-scalebox/tests/shared.test.mjs new file mode 100644 index 00000000000..42cd98f4655 --- /dev/null +++ b/packages/plugin-scalebox/tests/shared.test.mjs @@ -0,0 +1,10 @@ +// This file is auto-generated. +// Changes you make will be overwritten. +import freesewing from '@freesewing/core' +import chai from 'chai' +import plugin from '../dist/index.mjs' +import { sharedPluginTests } from '../../../tests/plugins/shared.mjs' + + +// Run shared tests +sharedPluginTests(plugin, freesewing, chai.expect)