From c09ae4aa699646ab5faf9e1c67444f0bc60ae337 Mon Sep 17 00:00:00 2001 From: Joost De Cock Date: Sun, 28 Aug 2022 02:14:39 +0200 Subject: [PATCH] wip(core): Migrated to named exports only --- packages/core/src/attributes.mjs | 3 +- packages/core/src/design.mjs | 4 +- packages/core/src/hooks.mjs | 2 +- packages/core/src/index.mjs | 116 ++++--- packages/core/src/option.mjs | 3 +- packages/core/src/part.mjs | 12 +- packages/core/src/path.mjs | 7 +- packages/core/src/pattern.mjs | 25 +- packages/core/src/point.mjs | 5 +- packages/core/src/snippet.mjs | 5 +- packages/core/src/splitcurve.mjs | 21 -- packages/core/src/store.mjs | 3 +- packages/core/src/svg.mjs | 9 +- packages/core/src/utils.mjs | 12 +- packages/core/tests/design.test.mjs | 16 +- packages/core/tests/part.test.mjs | 86 ++--- packages/core/tests/path.test.mjs | 207 ++++++------ packages/core/tests/pattern.test.mjs | 94 +++--- packages/core/tests/point.test.mjs | 4 +- packages/core/tests/snippet.test.mjs | 8 +- packages/core/tests/store.test.mjs | 4 +- packages/core/tests/svg.test.mjs | 48 +-- packages/core/tests/utils.test.mjs | 455 ++++++++++++++------------- 23 files changed, 592 insertions(+), 557 deletions(-) delete mode 100644 packages/core/src/splitcurve.mjs diff --git a/packages/core/src/attributes.mjs b/packages/core/src/attributes.mjs index 9a466b353f5..baa587e0c81 100644 --- a/packages/core/src/attributes.mjs +++ b/packages/core/src/attributes.mjs @@ -1,4 +1,4 @@ -function Attributes() { +export function Attributes() { this.list = {} } @@ -103,4 +103,3 @@ Attributes.prototype.clone = function () { return clone } -export default Attributes diff --git a/packages/core/src/design.mjs b/packages/core/src/design.mjs index bb2c8a774dc..6a5397dcc4a 100644 --- a/packages/core/src/design.mjs +++ b/packages/core/src/design.mjs @@ -1,4 +1,4 @@ -import Pattern from './pattern.mjs' +import { Pattern } from './pattern.mjs' import { addPartConfig } from './utils.mjs' @@ -6,7 +6,7 @@ import { addPartConfig } from './utils.mjs' * The Design constructor. Returns a Pattern constructor * So it's sort of a super-constructor */ -export default function Design(config) { +export function Design(config) { // Merge config with defaults config = { diff --git a/packages/core/src/hooks.mjs b/packages/core/src/hooks.mjs index 772eae4c526..599bea25091 100644 --- a/packages/core/src/hooks.mjs +++ b/packages/core/src/hooks.mjs @@ -1,4 +1,4 @@ -export default function Hooks() { +export function Hooks() { return { preDraft: [], postDraft: [], diff --git a/packages/core/src/index.mjs b/packages/core/src/index.mjs index 7b595ae5359..11e9ad61010 100644 --- a/packages/core/src/index.mjs +++ b/packages/core/src/index.mjs @@ -1,42 +1,78 @@ -import Design from './design.mjs' -import Pattern from './pattern.mjs' -import Point from './point.mjs' -import Path from './path.mjs' -import Snippet from './snippet.mjs' -import * as utils from './utils.mjs' -import pkg from '../package.json' assert { type: 'json' } - -const { version } = pkg - -/* - * Named exports will become the default in FreeSewing v3 - */ -export { - version, - Design, - Pattern, - Point, - Path, - Snippet, - utils, -} - -// This is a helper for configuration files -export const pctBasedOn = utils.pctBasedOn - -// This is a helper for manual layouts -export const generatePartTransform = utils.generatePartTransform - -/* - * Default exports will be removed in FreeSewing v3 - */ -export default { - version, - Design, - Pattern, - Point, - Path, - Snippet, - utils, +import { Attributes } from './attributes.mjs' +import { Design } from './design.mjs' +import { Pattern } from './pattern.mjs' +import { Point } from './point.mjs' +import { Path } from './path.mjs' +import { Snippet } from './snippet.mjs' +import { + isCoord, + capitalize, + beamsIntersect, + linesIntersect, + pointOnBeam, + pointOnLine, + pointOnCurve, + splitCurve, + beamIntersectsX, + beamIntersectsY, + units, + lineIntersectsCurve, + curveIntersectsX, + curveIntersectsY, + curvesIntersect, + circlesIntersect, + beamIntersectsCircle, + lineIntersectsCircle, + curveEdge, + stretchToScale, + round, + sampleStyle, + deg2rad, + rad2deg, pctBasedOn, + Bezier, + generatePartTransform, + macroName, +} from "./utils.mjs" +import { version } from '../package.json' assert { type: 'json' } + +// Named exports +export { + Attributes, + Design, + Pattern, + Point, + Path, + Snippet, + + Bezier, + version, + capitalize, + beamsIntersect, + linesIntersect, + pointOnBeam, + pointOnLine, + pointOnCurve, + splitCurve, + beamIntersectsX, + beamIntersectsY, + units, + lineIntersectsCurve, + curveIntersectsX, + curveIntersectsY, + curvesIntersect, + circlesIntersect, + beamIntersectsCircle, + lineIntersectsCircle, + curveEdge, + stretchToScale, + round, + sampleStyle, + deg2rad, + rad2deg, + pctBasedOn, + generatePartTransform, + macroName, + isCoord } + diff --git a/packages/core/src/option.mjs b/packages/core/src/option.mjs index 7b4c3c1bcd2..d60aead5c7e 100644 --- a/packages/core/src/option.mjs +++ b/packages/core/src/option.mjs @@ -1,4 +1,4 @@ -function Option(config) { +export function Option(config) { this.id = config.id this.config = config this.val = config.val @@ -6,4 +6,3 @@ function Option(config) { return this } -export default Option diff --git a/packages/core/src/part.mjs b/packages/core/src/part.mjs index e7b5882970d..98db5271154 100644 --- a/packages/core/src/part.mjs +++ b/packages/core/src/part.mjs @@ -1,11 +1,11 @@ +import { Attributes } from './attributes.mjs' import * as utils from './utils.mjs' -import Point from './point.mjs' -import Path from './path.mjs' -import Snippet from './snippet.mjs' -import Attributes from './attributes.mjs' -import Hooks from './hooks.mjs' +import { Point } from './point.mjs' +import { Path } from './path.mjs' +import { Snippet } from './snippet.mjs' +import { Hooks } from './hooks.mjs' -function Part() { +export function Part() { this.attributes = new Attributes() this.points = {} this.paths = {} diff --git a/packages/core/src/path.mjs b/packages/core/src/path.mjs index bb103e5fc41..980f24f0157 100644 --- a/packages/core/src/path.mjs +++ b/packages/core/src/path.mjs @@ -1,5 +1,5 @@ -import Attributes from './attributes.mjs' -import Point from './point.mjs' +import { Attributes } from './attributes.mjs' +import { Point } from './point.mjs' import { Bezier } from 'bezier-js' import { linesIntersect, @@ -11,7 +11,7 @@ import { round, } from './utils.mjs' -function Path(debug = false) { +export function Path(debug = false) { this.render = true this.topLeft = false this.bottomRight = false @@ -913,4 +913,3 @@ Path.prototype.translate = function (x, y) { return clone } -export default Path diff --git a/packages/core/src/pattern.mjs b/packages/core/src/pattern.mjs index 81aac7d24d9..ef81a565c9a 100644 --- a/packages/core/src/pattern.mjs +++ b/packages/core/src/pattern.mjs @@ -1,23 +1,28 @@ +import { Attributes } from './attributes.mjs' import pack from 'bin-pack' import { macroName, sampleStyle, capitalize, - decoratePartDependency, addPartConfig, mergeDependencies, } from './utils.mjs' -import Part from './part.mjs' -import Point from './point.mjs' -import Path from './path.mjs' -import Snippet from './snippet.mjs' -import Svg from './svg.mjs' -import Store from './store.mjs' -import Hooks from './hooks.mjs' -import Attributes from './attributes.mjs' +import { Part } from './part.mjs' +import { Point } from './point.mjs' +import { Path } from './path.mjs' +import { Snippet } from './snippet.mjs' +import { Svg } from './svg.mjs' +import { Store } from './store.mjs' +import { Hooks } from './hooks.mjs' import { version } from '../package.json' assert { type: 'json' } -export default function Pattern(config = { options: {} }) { +/* + * Makes sure an object passed to be attached as a part it not merely a method + */ +const decoratePartDependency = (obj, name) => (typeof obj === 'function') ? { draft: obj, name } : obj + + +export function Pattern(config = { options: {} }) { // Apply default settings this.settings = { diff --git a/packages/core/src/point.mjs b/packages/core/src/point.mjs index 9c50715d5f8..f9ff37bf212 100644 --- a/packages/core/src/point.mjs +++ b/packages/core/src/point.mjs @@ -1,6 +1,6 @@ -import Attributes from './attributes.mjs' +import { Attributes } from './attributes.mjs' -function Point(x, y, debug = false) { +export function Point(x, y, debug = false) { this.x = x this.y = y this.attributes = new Attributes() @@ -249,4 +249,3 @@ Point.prototype.setCircle = function (radius = false, className=false) { return this } -export default Point diff --git a/packages/core/src/snippet.mjs b/packages/core/src/snippet.mjs index 5b796c57554..829a6ad29f1 100644 --- a/packages/core/src/snippet.mjs +++ b/packages/core/src/snippet.mjs @@ -1,6 +1,6 @@ -import Attributes from './attributes.mjs' +import { Attributes } from './attributes.mjs' -function Snippet(def, anchor, debug = false) { +export function Snippet(def, anchor, debug = false) { this.def = def this.anchor = anchor this.attributes = new Attributes() @@ -31,4 +31,3 @@ Snippet.prototype.clone = function () { return clone } -export default Snippet diff --git a/packages/core/src/splitcurve.mjs b/packages/core/src/splitcurve.mjs deleted file mode 100644 index 68550ba37ce..00000000000 --- a/packages/core/src/splitcurve.mjs +++ /dev/null @@ -1,21 +0,0 @@ -import Path from './path' - -/** Splits a curve on a point */ -export default function splitCurve(start, cp1, cp2, end, split) { - let [c1, c2] = new Path().move(start).curve(cp1, cp2, end).split(split) - - return [ - { - start: c1.ops[0].to, - cp1: c1.ops[1].cp1, - cp2: c1.ops[1].cp2, - end: c1.ops[1].to, - }, - { - start: c2.ops[0].to, - cp1: c2.ops[1].cp1, - cp2: c2.ops[1].cp2, - end: c2.ops[1].to, - }, - ] -} diff --git a/packages/core/src/store.mjs b/packages/core/src/store.mjs index fe59da6fe12..57f22096add 100644 --- a/packages/core/src/store.mjs +++ b/packages/core/src/store.mjs @@ -1,4 +1,4 @@ -function Store(raise) { +export function Store(raise) { this.data = new Map() this.raise = raise } @@ -20,4 +20,3 @@ Store.prototype.get = function (key) { return this.data.get(key) } -export default Store diff --git a/packages/core/src/svg.mjs b/packages/core/src/svg.mjs index c607983a751..d9e7b94d75c 100644 --- a/packages/core/src/svg.mjs +++ b/packages/core/src/svg.mjs @@ -1,8 +1,8 @@ -import Attributes from './attributes.mjs' +import { Attributes } from './attributes.mjs' import { round } from './utils.mjs' -import pkg from '../package.json' +import { version } from '../package.json' -function Svg(pattern) { +export function Svg(pattern) { this.openGroups = [] this.layout = {} this.freeId = 0 @@ -23,7 +23,7 @@ function Svg(pattern) { this.attributes.add('xmlns:xlink', 'http://www.w3.org/1999/xlink') this.attributes.add('xml:lang', pattern.settings.locale) this.attributes.add('xmlns:freesewing', 'http://freesewing.org/namespaces/freesewing') - this.attributes.add('freesewing', pkg.version) + this.attributes.add('freesewing', version) } Svg.prototype.runHooks = function (hookName, data = false) { @@ -312,4 +312,3 @@ Svg.prototype.getId = function () { return '' + this.freeId } -export default Svg diff --git a/packages/core/src/utils.mjs b/packages/core/src/utils.mjs index 17a7cd0c101..067f736c887 100644 --- a/packages/core/src/utils.mjs +++ b/packages/core/src/utils.mjs @@ -1,6 +1,6 @@ import { Bezier } from 'bezier-js' -import Path from './path.mjs' -import Point from './point.mjs' +import { Path } from './path.mjs' +import { Point } from './point.mjs' export function capitalize(string) { return string.charAt(0).toUpperCase() + string.slice(1) @@ -410,11 +410,6 @@ export const generatePartTransform = (x, y, rotate, flipX, flipY, part) => { } } -/* - * Makes sure an object passed to be attached as a part it not merely a method - */ -export const decoratePartDependency = (obj, name) => (typeof obj === 'function') ? { draft: obj, name } : obj - // Add part-level options const addPartOptions = (part, config) => { if (part.options) { @@ -432,6 +427,7 @@ const addPartOptions = (part, config) => { return config } +/* // Helper method for detecting a array with only strings const isStringArray = val => (Array.isArray(val) && val.length > 0) ? val.reduce((prev=true, cur) => (prev && typeof cur === 'string')) @@ -473,7 +469,7 @@ const mergeOptionGroups = (cur, add) => { return cur } - +*/ // Add part-level optionGroups const addPartOptionGroups = (part, config) => { if (typeof config.optionGroups === 'undefined') { diff --git a/packages/core/tests/design.test.mjs b/packages/core/tests/design.test.mjs index b5152e99918..f43a3818d24 100644 --- a/packages/core/tests/design.test.mjs +++ b/packages/core/tests/design.test.mjs @@ -1,11 +1,11 @@ import chai from "chai" -import freesewing from "./dist/index.mjs" +import { Design } from "./dist/index.mjs" const expect = chai.expect describe('Design', () => { it("Design constructor should return pattern constructor", () => { - const design = new freesewing.Design({ + const design = new Design({ foo: "bar", options: { constant: 2, @@ -35,7 +35,7 @@ describe('Design', () => { } }; - let design = new freesewing.Design({plugins: plugin}); + let design = new Design({plugins: plugin}); let pattern = new design(); expect(pattern.hooks.preRender.length).to.equal(1); }); @@ -60,7 +60,7 @@ describe('Design', () => { } }; - let design = new freesewing.Design( { plugins: [plugin1, plugin2] }); + let design = new Design( { plugins: [plugin1, plugin2] }); let pattern = new design(); expect(pattern.hooks.preRender.length).to.equal(2); }); @@ -76,7 +76,7 @@ describe('Design', () => { } }; const condition = () => true - const design = new freesewing.Design({ conditionalPlugins: { plugin, condition } }); + const design = new Design({ conditionalPlugins: { plugin, condition } }); const pattern = new design(); expect(pattern.hooks.preRender.length).to.equal(1); }); @@ -92,7 +92,7 @@ describe('Design', () => { } }; const condition = () => false - const design = new freesewing.Design({ conditionalPlugins: { plugin, condition } }); + const design = new Design({ conditionalPlugins: { plugin, condition } }); const pattern = new design(); expect(pattern.hooks.preRender.length).to.equal(0); }); @@ -109,7 +109,7 @@ describe('Design', () => { }; const condition1 = () => true const condition2 = () => false - const design = new freesewing.Design({ conditionalPlugins: [ + const design = new Design({ conditionalPlugins: [ { plugin, condition: condition1 }, { plugin, condition: condition2 }, ]}); @@ -203,7 +203,7 @@ describe('Design', () => { */ it("Pattern constructor should add default hide() method to options", () => { - const design = new freesewing.Design({ + const design = new Design({ foo: "bar", options: { constant: 2, diff --git a/packages/core/tests/part.test.mjs b/packages/core/tests/part.test.mjs index ec714049a26..7fe51cfec79 100644 --- a/packages/core/tests/part.test.mjs +++ b/packages/core/tests/part.test.mjs @@ -1,11 +1,11 @@ import chai from "chai" -import freesewing from "./dist/index.mjs" +import { Pattern, Path } from "./dist/index.mjs" const expect = chai.expect describe('Part', () => { it("Svg constructor should initialize object", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let part = new pattern.Part(); expect(part.paths).to.eql({}); expect(part.snippets).to.eql({}); @@ -18,20 +18,20 @@ describe('Part', () => { }); it("Should return a function from macroClosure", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let part = new pattern.Part(); expect(typeof part.macroClosure()).to.equal("function"); }); it("Should not run an unknown macro", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let part = new pattern.Part(); let macro = part.macroClosure(); expect(macro("unknown")).to.equal(undefined); }); it("Should register and run a macro", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let plugin = { name: "test", version: "0.1-test", @@ -51,20 +51,20 @@ describe('Part', () => { }); it("Should return a free ID", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let part = new pattern.Part(); let free = part.getId(); expect(part.getId()).to.equal("" + (parseInt(free) + 1)); }); it("Should return a function from unitsClosure", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let part = new pattern.Part(); expect(typeof part.unitsClosure()).to.equal("function"); }); it("Should convert units", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let part = new pattern.Part(); let units = part.unitsClosure(); expect(units(123.456)).to.equal("12.35cm"); @@ -72,7 +72,7 @@ describe('Part', () => { }); it("Should set part attributes", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let part = new pattern.Part(); part.attr("foo", "bar"); expect(part.attributes.get("foo")).to.equal("bar"); @@ -83,12 +83,12 @@ describe('Part', () => { }); it("Should inject a part", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let part = new pattern.Part(); part.points.a = new part.Point(12, 23); part.points.b = new part.Point(10, 10); part.points.c = new part.Point(20, 20); - part.paths.bar = new freesewing.Path() + part.paths.bar = new Path() .move(part.points.a) .line(part.points.b) .curve(part.points.c, part.points.b, part.points.a) @@ -109,7 +109,7 @@ describe('Part', () => { }); it("Should return shorthand", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.settings.mode = "draft"; pattern.settings.paperless = true; let part = new pattern.Part(); @@ -119,7 +119,7 @@ describe('Part', () => { }); it("Should raise a warning when setting a non-Point value in points", () => { - const pattern = new freesewing.Pattern(); + const pattern = new Pattern(); pattern.settings.mode = "draft"; const part = new pattern.Part(); const { points } = part.shorthand() @@ -131,7 +131,7 @@ describe('Part', () => { }); it("Should raise a warning when setting a non-Snippet value in snippets", () => { - const pattern = new freesewing.Pattern(); + const pattern = new Pattern(); pattern.settings.mode = "draft"; const part = new pattern.Part(); const { snippets } = part.shorthand() @@ -143,7 +143,7 @@ describe('Part', () => { }); it("Should calculate the part boundary with default margin", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.settings.mode = "draft"; let part = new pattern.Part(); let short = part.shorthand(); @@ -163,7 +163,7 @@ describe('Part', () => { }); it("Should calculate the part boundary with custom margin", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.settings.mode = "draft"; pattern.settings.margin = 5; let part = new pattern.Part(); @@ -184,7 +184,7 @@ describe('Part', () => { }); it("Should calculate the part boundary for paperless", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.settings.mode = "draft"; pattern.settings.margin = 5; pattern.settings.paperless = true; @@ -206,7 +206,7 @@ describe('Part', () => { }); it("Should stack a part", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.settings.mode = "draft"; let part = new pattern.Part(); let short = part.shorthand(); @@ -220,7 +220,7 @@ describe('Part', () => { }); it("Should only stack a part if needed", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.settings.mode = "draft"; let part = new pattern.Part(); let short = part.shorthand(); @@ -237,7 +237,7 @@ describe('Part', () => { it("Should run hooks", () => { let count = 0 - const pattern = new freesewing.Pattern() + const pattern = new Pattern() const part = new pattern.Part(); part.hooks.preDraft = [{ method: function(p) { count++ }} ] part.runHooks('preDraft') @@ -245,7 +245,7 @@ describe('Part', () => { }); it("Should get the units closure to raise a debug when passing a non-number", () => { - const pattern = new freesewing.Pattern(); + const pattern = new Pattern(); pattern.settings.mode = "draft"; pattern.settings.debug = true const part = new pattern.Part(); @@ -256,7 +256,7 @@ describe('Part', () => { }); it("Should generate the part transforms", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.settings.mode = "draft"; let part = new pattern.Part(); let short = part.shorthand(); @@ -278,7 +278,7 @@ describe('Part', () => { it("Should add the part cut", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let part = new pattern.Part(); part.addCut(4, 'fabric', true) expect(part.cut.materials.fabric.cut).to.equal(4) @@ -289,7 +289,7 @@ describe('Part', () => { }); it("Should generate an error if cut is not a number", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let part = new pattern.Part(); part.addCut('a', 'fabric', true) expect(pattern.events.error.length).to.equal(1) @@ -297,7 +297,7 @@ describe('Part', () => { }); it("Should generate an warning if material is not a string", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let part = new pattern.Part(); part.addCut(3, 4) expect(pattern.events.warning.length).to.equal(1) @@ -305,7 +305,7 @@ describe('Part', () => { }); it("Should generate an error when removing a material that is not set (through addCut)", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let part = new pattern.Part(); part.addCut(4, 'fabric', true) part.addCut(false, 'lining') @@ -314,7 +314,7 @@ describe('Part', () => { }); it("Should remove the part cut through addCut", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let part = new pattern.Part(); part.addCut(4, 'fabric', true) part.addCut(false, 'fabric') @@ -322,7 +322,7 @@ describe('Part', () => { }); it("Should remove the part cut through removeCut", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let part = new pattern.Part(); part.addCut(4, 'fabric', true) part.removeCut('fabric') @@ -330,7 +330,7 @@ describe('Part', () => { }); it("Should generate an error when removing a material that is not set (through removeCut)", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let part = new pattern.Part(); part.addCut(4, 'fabric', true) part.removeCut('lining') @@ -339,7 +339,7 @@ describe('Part', () => { }); it("Should generate an error when removing a material that is not a string (through removeCut)", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let part = new pattern.Part(); part.addCut(4, 'fabric', true) part.removeCut(23) @@ -348,7 +348,7 @@ describe('Part', () => { }); it("Should generate a warning when calling removeCut without parameters", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let part = new pattern.Part(); part.addCut(4, 'fabric', true) part.removeCut() @@ -357,7 +357,7 @@ describe('Part', () => { }); it("Should set the part grainline", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let part = new pattern.Part(); expect(part.cut.grain).to.equal(90) part.setGrain(123) @@ -365,14 +365,14 @@ describe('Part', () => { }); it("Should raise a warning when calling part.setGrain() without any parameters", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let part = new pattern.Part(); part.setGrain() expect(part.cut.grain).to.equal(false) }); it("Should raise an error when calling part.setGrain() with a value that is not a number", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let part = new pattern.Part(); part.setGrain('a') expect(part.cut.grain).to.equal(90) @@ -381,7 +381,7 @@ describe('Part', () => { }); it("Should set and then remove the cutOnFold", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let part = new pattern.Part(); const { Point } = part.shorthand() part.setCutOnFold(new Point(2,3), new Point(100,200)) @@ -394,7 +394,7 @@ describe('Part', () => { }); it("Should raise an error when setting the cutOnFold with a non-Point value", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let part = new pattern.Part(); const { Point } = part.shorthand() part.setCutOnFold(new Point(2,3), 12) @@ -404,13 +404,13 @@ describe('Part', () => { describe('isEmpty', () => { it("Should return true if the part has no paths or snippets", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let part = new pattern.Part(); expect(part.isEmpty()).to.be.true }) it("Should return true if the part has paths but they have no length", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let part = new pattern.Part(); const { Path, paths, Point } = part.shorthand() paths.seam = new Path() @@ -418,7 +418,7 @@ describe('Part', () => { }) it("Should return true if the part has paths but they don't render", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let part = new pattern.Part(); const { Path, paths, Point } = part.shorthand() paths.seam = new Path().move(new Point(0,0)).line(new Point(2,3)).setRender(false) @@ -426,7 +426,7 @@ describe('Part', () => { }) it("Should return false if the part has a path with length", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let part = new pattern.Part(); const { Path, paths, Point } = part.shorthand() paths.seam = new Path().move(new Point(0,0)).line(new Point(2,3)) @@ -435,7 +435,7 @@ describe('Part', () => { }) it("Should return false if the part has a snippet", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let part = new pattern.Part(); const { Point, snippets, Snippet } = part.shorthand() snippets.test = new Snippet('test', new Point(0,0)) @@ -444,7 +444,7 @@ describe('Part', () => { }) it("Should return false if the part has a point that has text", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let part = new pattern.Part(); const {Point, points} = part.shorthand() points.test = new Point(0,0) @@ -453,7 +453,7 @@ describe('Part', () => { }) it("Should return false if the part has a point that has a circle", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let part = new pattern.Part(); const {Point, points} = part.shorthand() points.test = new Point(0,0) diff --git a/packages/core/tests/path.test.mjs b/packages/core/tests/path.test.mjs index af90d5529c2..701b70051b7 100644 --- a/packages/core/tests/path.test.mjs +++ b/packages/core/tests/path.test.mjs @@ -1,12 +1,11 @@ import chai from "chai" -import freesewing from "./dist/index.mjs" +import { round, Pattern, Path, Point } from "./dist/index.mjs" const expect = chai.expect -const round = freesewing.utils.round describe('Path', () => { it("Should offset a line", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; @@ -18,7 +17,7 @@ describe('Path', () => { }); it("Should offset a curve", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; @@ -32,7 +31,7 @@ describe('Path', () => { }); it("Should offset a curve where cp1 = start", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; @@ -46,7 +45,7 @@ describe('Path', () => { }); it("Should offset a curve where cp2 = end", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; @@ -61,7 +60,7 @@ describe('Path', () => { }); it("Should throw error when offsetting line that is no line", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; @@ -70,7 +69,7 @@ describe('Path', () => { }); it("Should return the length of a line", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; @@ -79,7 +78,7 @@ describe('Path', () => { }); it("Should return the length of a curve", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; @@ -91,7 +90,7 @@ describe('Path', () => { }); it("Should return the path start point", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; @@ -104,7 +103,7 @@ describe('Path', () => { }); it("Should return the path end point", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; @@ -119,7 +118,7 @@ describe('Path', () => { }); it("Should calculate that path boundary", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; @@ -135,7 +134,7 @@ describe('Path', () => { }); it("Should clone a path", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; @@ -152,7 +151,7 @@ describe('Path', () => { }); it("Should join paths", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; @@ -165,7 +164,7 @@ describe('Path', () => { }); it("Should throw error when joining a closed paths", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; @@ -178,7 +177,7 @@ describe('Path', () => { }); it("Should shift along a line", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; @@ -187,7 +186,7 @@ describe('Path', () => { }); it("Should not shift along a path/line if we end up on the end point", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; @@ -196,7 +195,7 @@ describe('Path', () => { }); it("Should shift along lines", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; @@ -209,7 +208,7 @@ describe('Path', () => { }); it("Should shift along curve + line", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; @@ -223,7 +222,7 @@ describe('Path', () => { }); it("Should throw error when shifting along path further than it's long", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; a.paths.test = new a.Path() @@ -234,7 +233,7 @@ describe('Path', () => { }); it("Should shift along with sufficient precision", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; a.paths.test = new a.Path() @@ -246,7 +245,7 @@ describe('Path', () => { }); it("Should shift fraction with sufficient precision", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; a.paths.test = new a.Path() @@ -258,7 +257,7 @@ describe('Path', () => { }); it("Should shift a fraction along a line", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; a.paths.line = new a.Path() @@ -270,7 +269,7 @@ describe('Path', () => { }); it("Should find the bounding box of a line", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let Path = pattern.parts.a.Path; let Point = pattern.parts.a.Point; @@ -333,7 +332,7 @@ describe('Path', () => { }); it("Should find the bounding box of a line", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; a.paths.curve = new a.Path() @@ -348,7 +347,7 @@ describe('Path', () => { }); it("Should reverse a path", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; let test = new a.Path() @@ -368,7 +367,7 @@ describe('Path', () => { }); it("Should find the edges of a path", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; a.points.A = new a.Point(45, 60); @@ -403,7 +402,7 @@ describe('Path', () => { }); it("Should find the edges of a path for corner cases", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; a.points.A = new a.Point(-45, -60); @@ -430,7 +429,7 @@ describe('Path', () => { }); it("Should find the edge of a path for this edge-case", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; a.points.A = new a.Point(-109.7, 77, 12); @@ -445,7 +444,7 @@ describe('Path', () => { }); it("Should find where a path intersects with an X value", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; a.points.A = new a.Point(95, 50); @@ -474,7 +473,7 @@ describe('Path', () => { }); it("Should find where a path intersects with an Y value", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; a.points.A = new a.Point(95, 50); @@ -499,7 +498,7 @@ describe('Path', () => { }); it("Should throw an error when not passing a value to path.intersectsX", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; a.paths.test = new a.Path(); @@ -508,7 +507,7 @@ describe('Path', () => { }); it("Should find the intersections between two paths", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; a.points.A = new a.Point(45, 60); @@ -554,7 +553,7 @@ describe('Path', () => { }); it("Should throw an error when running path.intersect on an identical path", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; a.paths.test = new a.Path(); @@ -562,7 +561,7 @@ describe('Path', () => { }); it("Should divide a path", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; a.points.A = new a.Point(45, 60); @@ -615,7 +614,7 @@ describe('Path', () => { }); it("Should split a path on a curve", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; a.points.A = new a.Point(45, 60); @@ -645,7 +644,7 @@ describe('Path', () => { }); it("Should split a path on a line", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; a.points.A = new a.Point(45, 60); @@ -671,7 +670,7 @@ describe('Path', () => { }); it("Should trim a path when lines overlap", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; a.points.A = new a.Point(0, 0); @@ -694,7 +693,7 @@ describe('Path', () => { }); it("Should trim a path when a line overlaps with a curve", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; a.points.A = new a.Point(0, 0); @@ -717,7 +716,7 @@ describe('Path', () => { }); it("Should trim a path when a curves overlap", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; a.points.A = new a.Point(0, 0); @@ -740,7 +739,7 @@ describe('Path', () => { }); it("Should translate a path", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; a.points.A = new a.Point(0, 0); @@ -761,7 +760,7 @@ describe('Path', () => { }); it("Should add a path attribute", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; @@ -774,7 +773,7 @@ describe('Path', () => { }); it("Should overwrite a path attribute", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; @@ -790,7 +789,7 @@ describe('Path', () => { }); it("Should move along a path even if it lands just on a joint", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.parts.a = new pattern.Part(); let a = pattern.parts.a; @@ -811,23 +810,23 @@ describe('Path', () => { it("Should add raise methods to a path", () => { const raise = () => 'hello' - const p1 = new freesewing.Path(10, 20).withRaise(raise); + const p1 = new Path(10, 20).withRaise(raise); expect(p1.raise()).to.equal('hello'); }); it("Should add raise methods to a path", () => { const raise = () => 'hello' - const p1 = new freesewing.Path().withRaise(raise); + const p1 = new Path().withRaise(raise); expect(p1.raise()).to.equal('hello'); }); it("Should set render to true/false", () => { - const p1 = new freesewing.Path().setRender(false) + const p1 = new Path().setRender(false) expect(p1.render).to.equal(false); }); it("Should set class with setClass", () => { - const p1 = new freesewing.Path().setClass('fabric') + const p1 = new Path().setClass('fabric') p1.setClass() expect(p1.attributes.get('class')).to.equal('fabric'); }); @@ -835,7 +834,7 @@ describe('Path', () => { it("Should raise a warning when moving to a non-point", () => { let invalid = false const raise = { warning: () => invalid = true } - const p1 = new freesewing.Path().withRaise(raise) + const p1 = new Path().withRaise(raise) expect(invalid).to.equal(false); try { p1.move('a') @@ -849,7 +848,7 @@ describe('Path', () => { it("Should raise a warning when drawing a line to a non-point", () => { let invalid = false const raise = { warning: () => invalid = true } - const p1 = new freesewing.Path().withRaise(raise) + const p1 = new Path().withRaise(raise) expect(invalid).to.equal(false); try { p1.line('a') @@ -863,9 +862,9 @@ describe('Path', () => { it("Should raise a warning when drawing a curve to a non-point", () => { let invalid = false const raise = { warning: () => invalid = true } - const p1 = new freesewing.Path().withRaise(raise) - const a = new freesewing.Point(0,0) - const b = new freesewing.Point(10,10) + const p1 = new Path().withRaise(raise) + const a = new Point(0,0) + const b = new Point(10,10) expect(invalid).to.equal(false); try { p1.move(b).curve(a, b, 'c') @@ -879,9 +878,9 @@ describe('Path', () => { it("Should raise a warning when drawing a curve with a Cp1 that is a non-point", () => { let invalid = false const raise = { warning: () => invalid = true } - const p1 = new freesewing.Path().withRaise(raise) - const a = new freesewing.Point(0,0) - const b = new freesewing.Point(10,10) + const p1 = new Path().withRaise(raise) + const a = new Point(0,0) + const b = new Point(10,10) expect(invalid).to.equal(false); try { p1.move(b).curve(a, 'x', b) @@ -895,8 +894,8 @@ describe('Path', () => { it("Should raise a warning when drawing a curve with a Cp1 that is a non-point", () => { let invalid = false const raise = { warning: () => invalid = true } - const p1 = new freesewing.Path().withRaise(raise) - const b = new freesewing.Point(10,10) + const p1 = new Path().withRaise(raise) + const b = new Point(10,10) expect(invalid).to.equal(false); try { p1.move(b).curve('a', b, b) @@ -910,8 +909,8 @@ describe('Path', () => { it("Should raise a warning when drawing a curve with a Cp2 that is a non-point", () => { let invalid = false const raise = { warning: () => invalid = true } - const p1 = new freesewing.Path().withRaise(raise) - const b = new freesewing.Point(10,10) + const p1 = new Path().withRaise(raise) + const b = new Point(10,10) expect(invalid).to.equal(false); try { p1.move(b).curve(b, 'a', b) @@ -925,8 +924,8 @@ describe('Path', () => { it("Should raise a warning when drawing a _curve with a To that is a non-point", () => { let invalid = false const raise = { warning: () => invalid = true } - const p1 = new freesewing.Path().withRaise(raise) - const b = new freesewing.Point(10,10) + const p1 = new Path().withRaise(raise) + const b = new Point(10,10) expect(invalid).to.equal(false); try { p1.move(b)._curve(b, 'a') @@ -940,8 +939,8 @@ describe('Path', () => { it("Should raise a warning when drawing a _curve with a Cp2 that is a non-point", () => { let invalid = false const raise = { warning: () => invalid = true } - const p1 = new freesewing.Path().withRaise(raise) - const b = new freesewing.Point(10,10) + const p1 = new Path().withRaise(raise) + const b = new Point(10,10) expect(invalid).to.equal(false); try { p1.move(b)._curve('a', b) @@ -955,8 +954,8 @@ describe('Path', () => { it("Should raise a warning when drawing a curve_ with a To that is a non-point", () => { let invalid = false const raise = { warning: () => invalid = true } - const p1 = new freesewing.Path().withRaise(raise) - const b = new freesewing.Point(10,10) + const p1 = new Path().withRaise(raise) + const b = new Point(10,10) expect(invalid).to.equal(false); try { p1.move(b).curve_(b, 'a') @@ -970,8 +969,8 @@ describe('Path', () => { it("Should raise a warning when drawing a curve_ with a Cp2 that is a non-point", () => { let invalid = false const raise = { warning: () => invalid = true } - const p1 = new freesewing.Path().withRaise(raise) - const b = new freesewing.Point(10,10) + const p1 = new Path().withRaise(raise) + const b = new Point(10,10) expect(invalid).to.equal(false); try { p1.move(b).curve_('a', b) @@ -983,16 +982,16 @@ describe('Path', () => { }); it("Should add a noop operation", () => { - const p1 = new freesewing.Path().noop() + const p1 = new Path().noop() expect(p1.ops.length).to.equal(1); expect(p1.ops[0].type).to.equal('noop'); }); it("Should handle an insop operation", () => { - const a = new freesewing.Point(0,0) - const b = new freesewing.Point(10,10) - const p1 = new freesewing.Path().move(a).line(b) - const p2 = new freesewing.Path().noop('test').insop('test', p1) + const a = new Point(0,0) + const b = new Point(10,10) + const p1 = new Path().move(a).line(b) + const p2 = new Path().noop('test').insop('test', p1) expect(p2.ops.length).to.equal(2); expect(p1.ops[0].type).to.equal('move'); expect(p1.ops[1].type).to.equal('line'); @@ -1001,23 +1000,23 @@ describe('Path', () => { it("Should raise a warning when an insop operation used an falsy ID", () => { let invalid = false const raise = { warning: () => invalid = true } - const a = new freesewing.Point(0,0) - const b = new freesewing.Point(10,10) - const p1 = new freesewing.Path().move(a).line(b) + const a = new Point(0,0) + const b = new Point(10,10) + const p1 = new Path().move(a).line(b) expect(invalid).to.equal(false); - const p2 = new freesewing.Path().withRaise(raise).noop('test').insop(false, p1) + const p2 = new Path().withRaise(raise).noop('test').insop(false, p1) expect(invalid).to.equal(true); }); it("Should raise a warning when an insop operation used an falsy ID", () => { let invalid = false const raise = { warning: () => invalid = true } - const a = new freesewing.Point(0,0) - const b = new freesewing.Point(10,10) - const p1 = new freesewing.Path().move(a).line(b) + const a = new Point(0,0) + const b = new Point(10,10) + const p1 = new Path().move(a).line(b) expect(invalid).to.equal(false); try { - new freesewing.Path().withRaise(raise).noop('test').insop('test') + new Path().withRaise(raise).noop('test').insop('test') } catch (err) { expect(''+err).to.contain("Cannot read properties of undefined (reading 'ops')") @@ -1029,7 +1028,7 @@ describe('Path', () => { let invalid = false const raise = { warning: () => invalid = true } expect(invalid).to.equal(false); - const p1 = new freesewing.Path().withRaise(raise).attr() + const p1 = new Path().withRaise(raise).attr() expect(invalid).to.equal(true); }); @@ -1037,12 +1036,12 @@ describe('Path', () => { let invalid = false const raise = { warning: () => invalid = true } expect(invalid).to.equal(false); - const p1 = new freesewing.Path().withRaise(raise).attr('test') + const p1 = new Path().withRaise(raise).attr('test') expect(invalid).to.equal(true); }); it("Should raise a warning when calling offset without a distance", () => { - const pattern = new freesewing.Pattern(); + const pattern = new Pattern(); pattern.parts.a = new pattern.Part(); const { Path, Point, points, paths } = pattern.parts.a.shorthand() points.a = new Point(0,0) @@ -1054,7 +1053,7 @@ describe('Path', () => { }); it("Should raise a warning when calling join without a path", () => { - const pattern = new freesewing.Pattern(); + const pattern = new Pattern(); pattern.parts.a = new pattern.Part(); const { Path, Point, points, paths } = pattern.parts.a.shorthand() points.a = new Point(0,0) @@ -1075,7 +1074,7 @@ describe('Path', () => { const raise = { error: () => invalid = true } expect(invalid).to.equal(false); try { - new freesewing.Path().withRaise(raise).start() + new Path().withRaise(raise).start() } catch (err) { expect(''+err).to.contain("Cannot read properties of undefined (reading 'to')") @@ -1088,7 +1087,7 @@ describe('Path', () => { const raise = { error: () => invalid = true } expect(invalid).to.equal(false); try { - new freesewing.Path().withRaise(raise).end() + new Path().withRaise(raise).end() } catch (err) { expect(''+err).to.contain("Cannot read properties of undefined (reading 'type')") @@ -1100,10 +1099,10 @@ describe('Path', () => { let invalid = false const raise = { error: () => invalid = true } expect(invalid).to.equal(false); - new freesewing.Path() + new Path() .withRaise(raise) - .move(new freesewing.Point(0,0)) - .line(new freesewing.Point(10,10)) + .move(new Point(0,0)) + .line(new Point(10,10)) .shiftAlong() expect(invalid).to.equal(true); }); @@ -1115,11 +1114,11 @@ describe('Path', () => { warning: () => invalid = true, } expect(invalid).to.equal(false); - new freesewing.Path() + new Path() .withRaise(raise) - .move(new freesewing.Point(0,0).withRaise(raise)) - .line(new freesewing.Point(10,10).withRaise(raise)) - .line(new freesewing.Point(10,20).withRaise(raise)) + .move(new Point(0,0).withRaise(raise)) + .line(new Point(10,10).withRaise(raise)) + .line(new Point(10,20).withRaise(raise)) .shiftFractionAlong() expect(invalid).to.equal(true); }); @@ -1130,11 +1129,11 @@ describe('Path', () => { error: () => invalid = true, warning: () => invalid = true, } - const from = new freesewing.Point(0,0).withRaise(raise) - const cp1 = new freesewing.Point(10,0).withRaise(raise) - const cp2 = new freesewing.Point(90,0).withRaise(raise) - const to = new freesewing.Point(100,0).withRaise(raise) - const path = new freesewing.Path() + const from = new Point(0,0).withRaise(raise) + const cp1 = new Point(10,0).withRaise(raise) + const cp2 = new Point(90,0).withRaise(raise) + const to = new Point(100,0).withRaise(raise) + const path = new Path() .withRaise(raise) .move(from) .curve(cp1, cp2, to) @@ -1155,11 +1154,11 @@ describe('Path', () => { error: () => invalid = true, warning: () => invalid = true, } - const from = new freesewing.Point(0,0).withRaise(raise) - const cp1 = new freesewing.Point(10,0).withRaise(raise) - const cp2 = new freesewing.Point(90,0).withRaise(raise) - const to = new freesewing.Point(100,0).withRaise(raise) - const path = new freesewing.Path() + const from = new Point(0,0).withRaise(raise) + const cp1 = new Point(10,0).withRaise(raise) + const cp2 = new Point(90,0).withRaise(raise) + const to = new Point(100,0).withRaise(raise) + const path = new Path() .withRaise(raise) .move(from) .curve(cp1, cp2, to) diff --git a/packages/core/tests/pattern.test.mjs b/packages/core/tests/pattern.test.mjs index b142b889816..ce6224bcf8b 100644 --- a/packages/core/tests/pattern.test.mjs +++ b/packages/core/tests/pattern.test.mjs @@ -1,11 +1,11 @@ import chai from "chai" -import freesewing from "./dist/index.mjs" +import { round, Pattern, Design, pctBasedOn } from "./dist/index.mjs" const expect = chai.expect describe('Pattern', () => { it("Pattern constructor should initialize object", () => { - let pattern = new freesewing.Pattern({ + let pattern = new Pattern({ foo: "bar", options: { constant: 2, @@ -24,7 +24,7 @@ describe('Pattern', () => { it("Should load percentage options", () => { - let pattern = new freesewing.Pattern({ + let pattern = new Pattern({ options: { test: { pct: 30 } } @@ -33,7 +33,7 @@ describe('Pattern', () => { }); it("Should load millimeter options", () => { - let pattern = new freesewing.Pattern({ + let pattern = new Pattern({ options: { test: { mm: 30 } } @@ -42,7 +42,7 @@ describe('Pattern', () => { }); it("Should load degree options", () => { - let pattern = new freesewing.Pattern({ + let pattern = new Pattern({ options: { test: { deg: 15 } } @@ -51,7 +51,7 @@ describe('Pattern', () => { }); it("Should load an array option", () => { - let pattern = new freesewing.Pattern({ + let pattern = new Pattern({ options: { test: { dflt: "foo" } } @@ -60,7 +60,7 @@ describe('Pattern', () => { }); it("Should load a count option", () => { - let pattern = new freesewing.Pattern({ + let pattern = new Pattern({ options: { test: { count: 3 } } @@ -69,7 +69,7 @@ describe('Pattern', () => { }); it("Should load a boolean option", () => { - let pattern = new freesewing.Pattern({ + let pattern = new Pattern({ options: { test1: { bool: false }, test2: { bool: true } @@ -82,7 +82,7 @@ describe('Pattern', () => { it("Should throw an error for an unknown option", () => { expect( () => - new freesewing.Pattern({ + new Pattern({ options: { test: { foo: "bar" } } @@ -91,7 +91,7 @@ describe('Pattern', () => { }); it("Should merge settings with default settings", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let settings = { foo: "bar", deep: { @@ -124,7 +124,7 @@ describe('Pattern', () => { return part; } } - const Test = new freesewing.Design({ + const Test = new Design({ name: "test", parts: [ back, front ], }); @@ -135,7 +135,7 @@ describe('Pattern', () => { }); it("Should sample an option", () => { - let pattern = new freesewing.Pattern({ + let pattern = new Pattern({ options: { len: { pct: 30, min: 10 }, bonus: 10 @@ -284,7 +284,7 @@ describe('Pattern', () => { */ it("Should register a hook via on", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let count = 0; pattern._draft = () => {}; pattern.on("preDraft", function(pattern) { @@ -295,7 +295,7 @@ describe('Pattern', () => { }); it("Should register a hook from a plugin", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let count = 0; pattern._draft = () => {}; let plugin = { @@ -313,7 +313,7 @@ describe('Pattern', () => { }); it("Should register multiple methods on a single hook", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let count = 0; pattern._draft = () => {}; let plugin = { @@ -342,7 +342,7 @@ describe('Pattern', () => { inject: { back: "front" }, hide: ["back"] }; - const Test = new freesewing.Design(config) + const Test = new Design(config) Test.prototype.draftBack = function(part) { return part; }; @@ -369,10 +369,10 @@ describe('Pattern', () => { hide: ["back"] }; const Test = function(settings = false) { - freesewing.Pattern.call(this, config); + Pattern.call(this, config); return this; }; - Test.prototype = Object.create(freesewing.Pattern.prototype); + Test.prototype = Object.create(Pattern.prototype); Test.prototype.constructor = Test; Test.prototype.draftBack = function(part) { return part; @@ -397,8 +397,8 @@ describe('Pattern', () => { name: "test", dependencies: { front: "back", side: "back", hood: "front", stripe: "hood" }, }; - const Test = new freesewing.Design(config) - Test.prototype = Object.create(freesewing.Pattern.prototype); + const Test = new Design(config) + Test.prototype = Object.create(Pattern.prototype); Test.prototype.constructor = Test; Test.prototype.draftBack = function(part) { return part; @@ -432,10 +432,10 @@ describe('Pattern', () => { dependencies: { front: ["back"], side: ["back"], hood: ["front"], stripe: ["hood"]}, }; const Test = function(settings = false) { - freesewing.Pattern.call(this, config); + Pattern.call(this, config); return this; }; - Test.prototype = Object.create(freesewing.Pattern.prototype); + Test.prototype = Object.create(Pattern.prototype); Test.prototype.constructor = Test; Test.prototype.draftBack = function(part) { return part; @@ -470,10 +470,10 @@ describe('Pattern', () => { parts: ['back','front','crotch'], }; const Test = function(settings = false) { - freesewing.Pattern.call(this, config); + Pattern.call(this, config); return this; }; - Test.prototype = Object.create(freesewing.Pattern.prototype); + Test.prototype = Object.create(Pattern.prototype); Test.prototype.constructor = Test; Test.prototype.draftBack = function(part) { return part; @@ -495,10 +495,10 @@ describe('Pattern', () => { parts: ['back','front','crotch'], }; const Test = function(settings = false) { - freesewing.Pattern.call(this, config); + Pattern.call(this, config); return this; }; - Test.prototype = Object.create(freesewing.Pattern.prototype); + Test.prototype = Object.create(Pattern.prototype); Test.prototype.constructor = Test; Test.prototype.draftBack = function(part) { return part; @@ -527,10 +527,10 @@ describe('Pattern', () => { parts: ['back','front','crotch'], }; const Test = function(settings = false) { - freesewing.Pattern.call(this, config); + Pattern.call(this, config); return this; }; - Test.prototype = Object.create(freesewing.Pattern.prototype); + Test.prototype = Object.create(Pattern.prototype); Test.prototype.constructor = Test; Test.prototype.draftBack = function(part) { return part; @@ -547,13 +547,13 @@ describe('Pattern', () => { }); it("Should check whether created parts get the pattern context", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let part = new pattern.Part(); expect(part.context.settings).to.equal(pattern.settings); }); it("Should correctly merge settings", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); let settings = { complete: false, only: [1, 2, 3], @@ -567,7 +567,7 @@ describe('Pattern', () => { }); it("Should correctly merge settings for existing array", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.settings.only = [1]; let settings = { complete: false, @@ -585,7 +585,7 @@ describe('Pattern', () => { name: 'front', draft: function(part) { return part } } - const Test = new freesewing.Design({ + const Test = new Design({ name: "test", parts: [front], }); @@ -599,7 +599,7 @@ describe('Pattern', () => { }); it("Should not pack a pattern with errors", () => { - const pattern = new freesewing.Pattern() + const pattern = new Pattern() pattern.events.error.push('error') pattern.pack() expect(pattern.events.warning.length).to.equal(1) @@ -633,7 +633,7 @@ describe('Pattern', () => { */ it("Should handle custom layouts", () => { - const Test = new freesewing.Design({ name: "test", parts: ['front'] }) + const Test = new Design({ name: "test", parts: ['front'] }) Test.prototype.draftFront = function(part) { return part } const pattern = new Test({ layout: { @@ -648,12 +648,12 @@ describe('Pattern', () => { }); it("Should handle a simple snapped option", () => { - const Test = new freesewing.Design({ + const Test = new Design({ name: "test", parts: ['front'], measurements: [ 'head' ], options: { - len: { pct: 50, min: 22, max: 78, snap: 10, ...freesewing.pctBasedOn('head') } + len: { pct: 50, min: 22, max: 78, snap: 10, ...pctBasedOn('head') } } }) Test.prototype.draftFront = function(part) { @@ -691,7 +691,7 @@ describe('Pattern', () => { }); it("Should handle a list snapped option", () => { - const Test = new freesewing.Design({ + const Test = new Design({ name: "test", parts: [ { @@ -710,7 +710,7 @@ describe('Pattern', () => { ], measurements: [ 'head' ], options: { - len: { pct: 50, min: 22, max: 78, snap: [10,14,19,28], ...freesewing.pctBasedOn('head') } + len: { pct: 50, min: 22, max: 78, snap: [10,14,19,28], ...pctBasedOn('head') } } }) let pattern = new Test({ @@ -734,12 +734,12 @@ describe('Pattern', () => { expect(pattern.parts.front.paths.line_7.ops[1].to.x).to.equal(28); expect(pattern.parts.front.paths.line_8.ops[1].to.x).to.equal(28); expect(pattern.parts.front.paths.line_9.ops[1].to.x).to.equal(28); - expect(freesewing.utils.round(pattern.parts.front.paths.line_10.ops[1].to.x)).to.equal(33.72); + expect(round(pattern.parts.front.paths.line_10.ops[1].to.x)).to.equal(33.72); }); it("Should retrieve the cutList", () => { - const Test = new freesewing.Design({ + const Test = new Design({ name: "test", parts: [{ name: 'front', @@ -818,8 +818,8 @@ describe('Pattern', () => { } } - const Design = new freesewing.Design({ parts: [ partC ] }); - const pattern = new Design().addPart(partR).draft() + const design = new Design({ parts: [ partC ] }); + const pattern = new design().addPart(partR).draft() // Measurements expect(pattern.config.measurements.length).to.equal(4) expect(pattern.config.measurements.indexOf('measieA') === -1).to.equal(false) @@ -970,8 +970,8 @@ describe('Pattern', () => { return part } } - const Design = new freesewing.Design({ parts: [ partD ] }); - const pattern = new Design().draft() + const design = new Design({ parts: [ partD ] }); + const pattern = new design().draft() // Measurements expect(pattern.config.measurements.length).to.equal(4) expect(pattern.config.measurements.indexOf('measieA') === -1).to.equal(false) @@ -1120,10 +1120,10 @@ describe('Pattern', () => { }, draft: part => part, } - let Design, pattern + let design, pattern try { - Design = new freesewing.Design({ parts: [ partB ] }); - pattern = new Design().init() + design = new Design({ parts: [ partB ] }); + pattern = new design().init() } catch(err) { console.log(err) } diff --git a/packages/core/tests/point.test.mjs b/packages/core/tests/point.test.mjs index 3deb0640c0c..50eae0a1f20 100644 --- a/packages/core/tests/point.test.mjs +++ b/packages/core/tests/point.test.mjs @@ -1,9 +1,7 @@ import chai from "chai" -import freesewing from "./dist/index.mjs" +import { round, Point } from "./dist/index.mjs" const expect = chai.expect -const Point = freesewing.Point -const round = freesewing.utils.round describe('Point', () => { it("Should return point object", () => { diff --git a/packages/core/tests/snippet.test.mjs b/packages/core/tests/snippet.test.mjs index a39c234ecde..ad6b9734bb9 100644 --- a/packages/core/tests/snippet.test.mjs +++ b/packages/core/tests/snippet.test.mjs @@ -1,25 +1,25 @@ import chai from "chai" -import freesewing from "./dist/index.mjs" +import { Snippet, Point } from "./dist/index.mjs" const expect = chai.expect describe('Snippet', () => { it("Should create a snippet", () => { - let snip1 = new freesewing.Snippet("test", new freesewing.Point(12, 34)); + let snip1 = new Snippet("test", new Point(12, 34)); expect(snip1.def).to.equal("test"); expect(snip1.anchor.x).to.equal(12); expect(snip1.anchor.y).to.equal(34); }); it("Should clone a snippet", () => { - let snip3 = new freesewing.Snippet("boo", new freesewing.Point(56, 78)); + let snip3 = new Snippet("boo", new Point(56, 78)); expect(snip3.clone().def).to.equal("boo"); expect(snip3.clone().anchor.x).to.equal(56); expect(snip3.clone().anchor.y).to.equal(78); }); it("Should set an attribute", () => { - let s = new freesewing.Snippet("test", new freesewing.Point(12, -34)).attr( + let s = new Snippet("test", new Point(12, -34)).attr( "class", "test" ); diff --git a/packages/core/tests/store.test.mjs b/packages/core/tests/store.test.mjs index dc24eeab9f1..6aa1a113461 100644 --- a/packages/core/tests/store.test.mjs +++ b/packages/core/tests/store.test.mjs @@ -1,9 +1,9 @@ import chai from "chai" -import freesewing from "./dist/index.mjs" +import { Pattern } from "./dist/index.mjs" const expect = chai.expect -const pattern = new freesewing.Pattern(); +const pattern = new Pattern(); const store = pattern.store; describe('Store', () => { diff --git a/packages/core/tests/svg.test.mjs b/packages/core/tests/svg.test.mjs index 1a52894085b..3818c3b749a 100644 --- a/packages/core/tests/svg.test.mjs +++ b/packages/core/tests/svg.test.mjs @@ -1,6 +1,6 @@ import chai from "chai" import chaiString from "chai-string" -import freesewing from "./dist/index.mjs" +import { Pattern } from "./dist/index.mjs" import pkg from '../package.json' assert { type: 'json' } import render from "./fixtures/render.mjs" @@ -10,7 +10,7 @@ const { version } = pkg describe('Svg', () => { it("Svg constructor should initialize object", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.render(); let svg = pattern.svg; expect(svg.openGroups).to.eql([]); @@ -37,24 +37,24 @@ describe('Svg', () => { }); it("Should render Svg boilerplate", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); expect(pattern.render()).to.equalIgnoreSpaces(render.boilerplate); }); it("Should render language attribute", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.settings.locale = "nl"; expect(pattern.render()).to.equalIgnoreSpaces(render.boilerplateNl); }); it("Should render Svg boilerplate for embedding", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.settings.embed = true; expect(pattern.render()).to.equalIgnoreSpaces(render.embed); }); it("Should render Svg part boilerplate", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.render(); pattern.parts.test = new pattern.Part(); expect(pattern.render()).to.equalIgnoreSpaces(render.part); @@ -63,7 +63,7 @@ describe('Svg', () => { }); it("Should render Svg path", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.render(); pattern.parts.test = new pattern.Part(); let p = pattern.parts.test; @@ -77,7 +77,7 @@ describe('Svg', () => { expect(pattern.render()).to.equalIgnoreSpaces(render.path); }); it("Should not render Svg path when render property is false", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.render(); pattern.parts.test = new pattern.Part(); let p = pattern.parts.test; @@ -93,7 +93,7 @@ describe('Svg', () => { }); it("Should render Svg text", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.render(); pattern.parts.test = new pattern.Part(); let p = pattern.parts.test; @@ -105,7 +105,7 @@ describe('Svg', () => { }); it("Should render Svg multi-line text", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.render(); pattern.parts.test = new pattern.Part(); let p = pattern.parts.test; @@ -117,7 +117,7 @@ describe('Svg', () => { }); it("Should render Svg multi-line text with default lineheight", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.render(); pattern.parts.test = new pattern.Part(); let p = pattern.parts.test; @@ -128,7 +128,7 @@ describe('Svg', () => { }); it("Should not render text when there is none", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.render(); pattern.parts.test = new pattern.Part(); let p = pattern.parts.test; @@ -137,7 +137,7 @@ describe('Svg', () => { }); it("Should render Svg text on path", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.render(); pattern.parts.test = new pattern.Part(); let p = pattern.parts.test; @@ -153,7 +153,7 @@ describe('Svg', () => { }); it("Should render Svg text on path, center aligned", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.render(); pattern.parts.test = new pattern.Part(); let p = pattern.parts.test; @@ -169,7 +169,7 @@ describe('Svg', () => { }); it("Should render Svg text on path, right aligned", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.render(); pattern.parts.test = new pattern.Part(); let p = pattern.parts.test; @@ -185,7 +185,7 @@ describe('Svg', () => { }); it("Should render an Svg circle", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.render(); pattern.parts.test = new pattern.Part(); let p = pattern.parts.test; @@ -194,7 +194,7 @@ describe('Svg', () => { }); it("Should render an Svg snippet", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.render(); pattern.parts.test = new pattern.Part(); let p = pattern.parts.test; @@ -207,7 +207,7 @@ describe('Svg', () => { }); it("Should render a rotated Svg snippet", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.render(); pattern.parts.test = new pattern.Part(); let p = pattern.parts.test; @@ -220,7 +220,7 @@ describe('Svg', () => { }); it("Should replaced double quotes in Svg text", () => { - const pattern = new freesewing.Pattern() + const pattern = new Pattern() pattern.render() expect( pattern.svg.escapeText('This is a "test" message') @@ -228,7 +228,7 @@ describe('Svg', () => { }); it("Should scale an Svg snippet", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.render(); pattern.parts.test = new pattern.Part(); let p = pattern.parts.test; @@ -241,7 +241,7 @@ describe('Svg', () => { }); it("Should run preRender hook", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.on("preRender", svg => { svg.attributes.set("data-hook", "preRender"); }); @@ -250,7 +250,7 @@ describe('Svg', () => { }); it("Should run insertText hook", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.on("insertText", (locale, text) => { return text.toUpperCase(); }); @@ -263,7 +263,7 @@ describe('Svg', () => { }); it("Should run postRender hook", () => { - let pattern = new freesewing.Pattern() + let pattern = new Pattern() pattern.on("postRender", svg => { svg.svg = "test"; }); @@ -271,7 +271,7 @@ describe('Svg', () => { }); it("Should tab in and out", () => { - let pattern = new freesewing.Pattern() + let pattern = new Pattern() pattern.render() const svg = pattern.svg svg.tabs = 2 diff --git a/packages/core/tests/utils.test.mjs b/packages/core/tests/utils.test.mjs index 2f2d11c9dae..114e7133f68 100644 --- a/packages/core/tests/utils.test.mjs +++ b/packages/core/tests/utils.test.mjs @@ -1,221 +1,250 @@ import chai from "chai" -import freesewing from "./dist/index.mjs" +import { + Pattern, + Point, + isCoord, + capitalize, + beamsIntersect, + linesIntersect, + pointOnBeam, + pointOnLine, + pointOnCurve, + splitCurve, + beamIntersectsX, + beamIntersectsY, + units, + lineIntersectsCurve, + curveIntersectsX, + curveIntersectsY, + curvesIntersect, + circlesIntersect, + beamIntersectsCircle, + lineIntersectsCircle, + curveEdge, + stretchToScale, + round, + sampleStyle, + deg2rad, + rad2deg, + pctBasedOn, + Bezier, + generatePartTransform, + macroName, +} from "./dist/index.mjs" const { expect } = chai -const utils = freesewing.utils -const round = utils.round describe('Utils', () => { it("Should return the correct macro name", () => { - expect(utils.macroName("test")).to.equal("_macro_test"); + expect(macroName("test")).to.equal("_macro_test"); }); it("Should find the intersection of two endless line segments", () => { - let a = new freesewing.Point(10, 20); - let b = new freesewing.Point(20, 24); - let c = new freesewing.Point(90, 19); - let d = new freesewing.Point(19, 70); - let X = freesewing.utils.beamsIntersect(a, b, c, d); + let a = new Point(10, 20); + let b = new Point(20, 24); + let c = new Point(90, 19); + let d = new Point(19, 70); + let X = beamsIntersect(a, b, c, d); expect(round(X.x)).to.equal(60.49); expect(round(X.y)).to.equal(40.2); }); it("Should detect parallel lines", () => { - let a = new freesewing.Point(10, 20); - let b = new freesewing.Point(20, 20); - let c = new freesewing.Point(90, 40); - let d = new freesewing.Point(19, 40); - expect(freesewing.utils.beamsIntersect(a, b, c, d)).to.equal(false); - expect(freesewing.utils.linesIntersect(a, b, c, d)).to.equal(false); + let a = new Point(10, 20); + let b = new Point(20, 20); + let c = new Point(90, 40); + let d = new Point(19, 40); + expect(beamsIntersect(a, b, c, d)).to.equal(false); + expect(linesIntersect(a, b, c, d)).to.equal(false); }); it("Should detect vertical lines", () => { - let a = new freesewing.Point(10, 20); - let b = new freesewing.Point(10, 90); - let c = new freesewing.Point(90, 40); - let d = new freesewing.Point(19, 40); - let X = freesewing.utils.beamsIntersect(a, b, c, d); + let a = new Point(10, 20); + let b = new Point(10, 90); + let c = new Point(90, 40); + let d = new Point(19, 40); + let X = beamsIntersect(a, b, c, d); expect(X.x).to.equal(10); expect(X.y).to.equal(40); - X = freesewing.utils.beamsIntersect(c, d, a, b); + X = beamsIntersect(c, d, a, b); expect(X.x).to.equal(10); }); it("Should swap direction prior to finding beam intersection", () => { - let a = new freesewing.Point(10, 20); - let b = new freesewing.Point(0, 90); - let c = new freesewing.Point(90, 40); - let d = new freesewing.Point(19, 40); - let X = freesewing.utils.beamsIntersect(a, b, c, d); + let a = new Point(10, 20); + let b = new Point(0, 90); + let c = new Point(90, 40); + let d = new Point(19, 40); + let X = beamsIntersect(a, b, c, d); expect(round(X.x)).to.equal(7.14); expect(round(X.y)).to.equal(40); }); it("Should return false when two lines don't intersect", () => { - let a = new freesewing.Point(10, 20); - let b = new freesewing.Point(20, 24); - let c = new freesewing.Point(90, 19); - let d = new freesewing.Point(19, 70); - expect(freesewing.utils.linesIntersect(a, b, c, d)).to.equal(false); + let a = new Point(10, 20); + let b = new Point(20, 24); + let c = new Point(90, 19); + let d = new Point(19, 70); + expect(linesIntersect(a, b, c, d)).to.equal(false); }); it("Should find the intersection of two line segments", () => { - let a = new freesewing.Point(10, 10); - let b = new freesewing.Point(90, 74); - let c = new freesewing.Point(90, 19); - let d = new freesewing.Point(11, 70); - let X = freesewing.utils.linesIntersect(a, b, c, d); + let a = new Point(10, 10); + let b = new Point(90, 74); + let c = new Point(90, 19); + let d = new Point(11, 70); + let X = linesIntersect(a, b, c, d); expect(round(X.x)).to.equal(51.95); expect(round(X.y)).to.equal(43.56); }); it("Should find the intersection of an endles line and a give X-value", () => { - let a = new freesewing.Point(10, 10); - let b = new freesewing.Point(90, 74); - let X = freesewing.utils.beamIntersectsX(a, b, 69); + let a = new Point(10, 10); + let b = new Point(90, 74); + let X = beamIntersectsX(a, b, 69); expect(X.x).to.equal(69); expect(X.y).to.equal(57.2); }); it("Should find the intersection of an endles line and a give Y-value", () => { - let a = new freesewing.Point(10, 10); - let b = new freesewing.Point(90, 74); - let X = freesewing.utils.beamIntersectsY(a, b, 69); + let a = new Point(10, 10); + let b = new Point(90, 74); + let X = beamIntersectsY(a, b, 69); expect(X.x).to.equal(83.75); expect(X.y).to.equal(69); }); it("Should detect vertical lines never pass a give X-value", () => { - let a = new freesewing.Point(10, 10); - let b = new freesewing.Point(10, 90); - expect(freesewing.utils.beamIntersectsX(a, b, 69)).to.equal(false); + let a = new Point(10, 10); + let b = new Point(10, 90); + expect(beamIntersectsX(a, b, 69)).to.equal(false); }); it("Should detect horizontal lines never pass a give Y-value", () => { - let a = new freesewing.Point(10, 10); - let b = new freesewing.Point(90, 10); - expect(freesewing.utils.beamIntersectsY(a, b, 69)).to.equal(false); + let a = new Point(10, 10); + let b = new Point(90, 10); + expect(beamIntersectsY(a, b, 69)).to.equal(false); }); it("Should find no intersections between a curve and a line", () => { - let A = new freesewing.Point(10, 10); - let Acp = new freesewing.Point(310, 40); - let B = new freesewing.Point(110, 70); - let Bcp = new freesewing.Point(-210, 40); - let E = new freesewing.Point(-20, -20); - let D = new freesewing.Point(30, -85); + let A = new Point(10, 10); + let Acp = new Point(310, 40); + let B = new Point(110, 70); + let Bcp = new Point(-210, 40); + let E = new Point(-20, -20); + let D = new Point(30, -85); - let hit = freesewing.utils.lineIntersectsCurve(E, D, A, Acp, Bcp, B); + let hit = lineIntersectsCurve(E, D, A, Acp, Bcp, B); expect(hit).to.equal(false); }); it("Should find 1 intersection between a curve and a line", () => { - let A = new freesewing.Point(10, 10); - let Acp = new freesewing.Point(310, 40); - let B = new freesewing.Point(110, 70); - let Bcp = new freesewing.Point(-210, 40); - let E = new freesewing.Point(20, 20); - let D = new freesewing.Point(30, -85); + let A = new Point(10, 10); + let Acp = new Point(310, 40); + let B = new Point(110, 70); + let Bcp = new Point(-210, 40); + let E = new Point(20, 20); + let D = new Point(30, -85); - let hit = freesewing.utils.lineIntersectsCurve(E, D, A, Acp, Bcp, B); + let hit = lineIntersectsCurve(E, D, A, Acp, Bcp, B); expect(round(hit.x)).to.equal(20.85); expect(round(hit.y)).to.equal(11.11); }); it("Should find 3 intersections between a curve and a line", () => { - let A = new freesewing.Point(10, 10); - let Acp = new freesewing.Point(310, 40); - let B = new freesewing.Point(110, 70); - let Bcp = new freesewing.Point(-210, 40); - let E = new freesewing.Point(20, -5); - let D = new freesewing.Point(100, 85); + let A = new Point(10, 10); + let Acp = new Point(310, 40); + let B = new Point(110, 70); + let Bcp = new Point(-210, 40); + let E = new Point(20, -5); + let D = new Point(100, 85); - let hits = freesewing.utils.lineIntersectsCurve(E, D, A, Acp, Bcp, B); + let hits = lineIntersectsCurve(E, D, A, Acp, Bcp, B); expect(hits.length).to.equal(3); }); it("Should find 9 intersections between two curves", () => { - let A = new freesewing.Point(10, 10); - let Acp = new freesewing.Point(310, 40); - let B = new freesewing.Point(110, 70); - let Bcp = new freesewing.Point(-210, 40); - let C = new freesewing.Point(20, -5); - let Ccp = new freesewing.Point(60, 300); - let D = new freesewing.Point(100, 85); - let Dcp = new freesewing.Point(70, -220); + let A = new Point(10, 10); + let Acp = new Point(310, 40); + let B = new Point(110, 70); + let Bcp = new Point(-210, 40); + let C = new Point(20, -5); + let Ccp = new Point(60, 300); + let D = new Point(100, 85); + let Dcp = new Point(70, -220); - let hits = freesewing.utils.curvesIntersect(A, Acp, Bcp, B, C, Ccp, Dcp, D); + let hits = curvesIntersect(A, Acp, Bcp, B, C, Ccp, Dcp, D); expect(hits.length).to.equal(9); }); it("Should find 1 intersection between two curves", () => { - let A = new freesewing.Point(10, 10); - let Acp = new freesewing.Point(310, 40); - let B = new freesewing.Point(110, 70); - let Bcp = new freesewing.Point(-210, 40); - let C = new freesewing.Point(20, -5); - let Ccp = new freesewing.Point(-60, 300); - let D = new freesewing.Point(-200, 85); - let Dcp = new freesewing.Point(-270, -220); + let A = new Point(10, 10); + let Acp = new Point(310, 40); + let B = new Point(110, 70); + let Bcp = new Point(-210, 40); + let C = new Point(20, -5); + let Ccp = new Point(-60, 300); + let D = new Point(-200, 85); + let Dcp = new Point(-270, -220); - let hit = freesewing.utils.curvesIntersect(A, Acp, Bcp, B, C, Ccp, Dcp, D); + let hit = curvesIntersect(A, Acp, Bcp, B, C, Ccp, Dcp, D); expect(round(hit.x)).to.equal(15.58); expect(round(hit.y)).to.equal(10.56); }); it("Should find no intersection between two curves", () => { - let A = new freesewing.Point(10, 10); - let Acp = new freesewing.Point(310, 40); - let B = new freesewing.Point(110, 70); - let Bcp = new freesewing.Point(-210, 40); - let C = new freesewing.Point(20, -5); - let Ccp = new freesewing.Point(-60, -300); - let D = new freesewing.Point(-200, 85); - let Dcp = new freesewing.Point(-270, -220); + let A = new Point(10, 10); + let Acp = new Point(310, 40); + let B = new Point(110, 70); + let Bcp = new Point(-210, 40); + let C = new Point(20, -5); + let Ccp = new Point(-60, -300); + let D = new Point(-200, 85); + let Dcp = new Point(-270, -220); - let hit = freesewing.utils.curvesIntersect(A, Acp, Bcp, B, C, Ccp, Dcp, D); + let hit = curvesIntersect(A, Acp, Bcp, B, C, Ccp, Dcp, D); expect(hit).to.equal(false); }); it("Should correctly format units", () => { - expect(freesewing.utils.units(123.456)).to.equal("12.35cm"); - expect(freesewing.utils.units(123.456, "imperial")).to.equal('4.86"'); + expect(units(123.456)).to.equal("12.35cm"); + expect(units(123.456, "imperial")).to.equal('4.86"'); }); it("Should find a start or end point on beam", () => { - let A = new freesewing.Point(12, 34); - let B = new freesewing.Point(56, 78); - let checkA = new freesewing.Point(12, 34); - let checkB = new freesewing.Point(56, 78); - expect(freesewing.utils.pointOnBeam(A, B, checkA)).to.equal(true); - expect(freesewing.utils.pointOnBeam(A, B, checkB)).to.equal(true); + let A = new Point(12, 34); + let B = new Point(56, 78); + let checkA = new Point(12, 34); + let checkB = new Point(56, 78); + expect(pointOnBeam(A, B, checkA)).to.equal(true); + expect(pointOnBeam(A, B, checkB)).to.equal(true); }); it("Should find whether a point lies on a line segment", () => { - let A = new freesewing.Point(12, 34); - let B = new freesewing.Point(56, 78); + let A = new Point(12, 34); + let B = new Point(56, 78); let check1 = A.shiftTowards(B, 10); let check2 = A.shiftTowards(B, 210); - expect(freesewing.utils.pointOnLine(A, B, check1)).to.equal(true); - expect(freesewing.utils.pointOnLine(A, B, check2)).to.equal(false); + expect(pointOnLine(A, B, check1)).to.equal(true); + expect(pointOnLine(A, B, check2)).to.equal(false); }); it("Should find a start or end point on curve", () => { - let A = new freesewing.Point(12, 34); - let Acp = new freesewing.Point(123, 4); - let B = new freesewing.Point(56, 78); - let Bcp = new freesewing.Point(5, 678); - let checkA = new freesewing.Point(12, 34); - let checkB = new freesewing.Point(56, 78); - expect(freesewing.utils.pointOnCurve(A, Acp, Bcp, B, checkA)).to.equal(true); - expect(freesewing.utils.pointOnCurve(A, Acp, Bcp, B, checkB)).to.equal(true); + let A = new Point(12, 34); + let Acp = new Point(123, 4); + let B = new Point(56, 78); + let Bcp = new Point(5, 678); + let checkA = new Point(12, 34); + let checkB = new Point(56, 78); + expect(pointOnCurve(A, Acp, Bcp, B, checkA)).to.equal(true); + expect(pointOnCurve(A, Acp, Bcp, B, checkB)).to.equal(true); }); it("Should find the intersections of a beam and circle", () => { - let A = new freesewing.Point(45, 45).attr("data-circle", 35); - let B = new freesewing.Point(5, 50); - let C = new freesewing.Point(25, 30); - let intersections = freesewing.utils.beamIntersectsCircle( + let A = new Point(45, 45).attr("data-circle", 35); + let B = new Point(5, 50); + let C = new Point(25, 30); + let intersections = beamIntersectsCircle( A, A.attributes.get("data-circle"), B, @@ -230,10 +259,10 @@ describe('Utils', () => { }); it("Should not find the intersections of this beam and circle", () => { - let A = new freesewing.Point(75, 75).attr("data-circle", 35); - let B = new freesewing.Point(5, 5); - let C = new freesewing.Point(10, 5); - let intersections = freesewing.utils.beamIntersectsCircle( + let A = new Point(75, 75).attr("data-circle", 35); + let B = new Point(5, 5); + let C = new Point(10, 5); + let intersections = beamIntersectsCircle( A, A.attributes.get("data-circle"), B, @@ -243,10 +272,10 @@ describe('Utils', () => { }); it("Should find one intersections between this beam and circle", () => { - let A = new freesewing.Point(5, 5).attr("data-circle", 5); - let B = new freesewing.Point(0, 0); - let C = new freesewing.Point(-10, 0); - let intersections = freesewing.utils.beamIntersectsCircle( + let A = new Point(5, 5).attr("data-circle", 5); + let B = new Point(0, 0); + let C = new Point(-10, 0); + let intersections = beamIntersectsCircle( A, A.attributes.get("data-circle"), B, @@ -258,10 +287,10 @@ describe('Utils', () => { }); it("Should find one intersections between this tangent and circle", () => { - let A = new freesewing.Point(5, 5).attr("data-circle", 5); - let B = new freesewing.Point(0, 0); - let C = new freesewing.Point(10, 0); - let intersections = freesewing.utils.lineIntersectsCircle( + let A = new Point(5, 5).attr("data-circle", 5); + let B = new Point(0, 0); + let C = new Point(10, 0); + let intersections = lineIntersectsCircle( A, A.attributes.get("data-circle"), B, @@ -273,10 +302,10 @@ describe('Utils', () => { }); it("Should find one intersection between this line and circle", () => { - let A = new freesewing.Point(5, 5).attr("data-circle", 5); - let B = new freesewing.Point(5, 5); - let C = new freesewing.Point(26, 25); - let intersections = freesewing.utils.lineIntersectsCircle( + let A = new Point(5, 5).attr("data-circle", 5); + let B = new Point(5, 5); + let C = new Point(26, 25); + let intersections = lineIntersectsCircle( A, A.attributes.get("data-circle"), B, @@ -288,10 +317,10 @@ describe('Utils', () => { }); it("Should not find an intersections between this line and circle", () => { - let A = new freesewing.Point(5, 5).attr("data-circle", 5); - let B = new freesewing.Point(0, 0); - let C = new freesewing.Point(-10, 0); - let intersections = freesewing.utils.lineIntersectsCircle( + let A = new Point(5, 5).attr("data-circle", 5); + let B = new Point(0, 0); + let C = new Point(-10, 0); + let intersections = lineIntersectsCircle( A, A.attributes.get("data-circle"), B, @@ -301,24 +330,24 @@ describe('Utils', () => { }); it("Should find two intersections between this line and circle", () => { - let A = new freesewing.Point(6, 7).attr("data-circle", 5); - let B = new freesewing.Point(0, 10); - let C = new freesewing.Point(10, 0); - let intersections1 = freesewing.utils.lineIntersectsCircle( + let A = new Point(6, 7).attr("data-circle", 5); + let B = new Point(0, 10); + let C = new Point(10, 0); + let intersections1 = lineIntersectsCircle( A, A.attributes.get("data-circle"), B, C, "foo" ); - let intersections2 = freesewing.utils.lineIntersectsCircle( + let intersections2 = lineIntersectsCircle( A, A.attributes.get("data-circle"), B, C, "x" ); - let intersections3 = freesewing.utils.lineIntersectsCircle( + let intersections3 = lineIntersectsCircle( A, A.attributes.get("data-circle"), B, @@ -339,10 +368,10 @@ describe('Utils', () => { }); it("Should find the intersections of a line and circle", () => { - let A = new freesewing.Point(45, 45).attr("data-circle", 35); - let B = new freesewing.Point(5, 50); - let C = new freesewing.Point(25, 30); - let intersections = freesewing.utils.lineIntersectsCircle( + let A = new Point(45, 45).attr("data-circle", 35); + let B = new Point(5, 50); + let C = new Point(25, 30); + let intersections = lineIntersectsCircle( A, A.attributes.get("data-circle"), B, @@ -354,10 +383,10 @@ describe('Utils', () => { }); it("Should not find intersections of this line and circle", () => { - let A = new freesewing.Point(75, 75).attr("data-circle", 35); - let B = new freesewing.Point(5, 5); - let C = new freesewing.Point(10, 5); - let intersections = freesewing.utils.lineIntersectsCircle( + let A = new Point(75, 75).attr("data-circle", 35); + let B = new Point(5, 5); + let C = new Point(10, 5); + let intersections = lineIntersectsCircle( A, A.attributes.get("data-circle"), B, @@ -367,10 +396,10 @@ describe('Utils', () => { }); it("Should not find intersections of this line and circle", () => { - let A = new freesewing.Point(45, 45).attr("data-circle", 35); - let B = new freesewing.Point(40, 40); - let C = new freesewing.Point(52, 50); - let intersections = freesewing.utils.lineIntersectsCircle( + let A = new Point(45, 45).attr("data-circle", 35); + let B = new Point(40, 40); + let C = new Point(52, 50); + let intersections = lineIntersectsCircle( A, A.attributes.get("data-circle"), B, @@ -380,16 +409,16 @@ describe('Utils', () => { }); it("Should find intersections between circles", () => { - let A = new freesewing.Point(10, 10).attr("data-circle", 15); - let B = new freesewing.Point(30, 30).attr("data-circle", 35); + let A = new Point(10, 10).attr("data-circle", 15); + let B = new Point(30, 30).attr("data-circle", 35); - let intersections1 = freesewing.utils.circlesIntersect( + let intersections1 = circlesIntersect( A, A.attributes.get("data-circle"), B, B.attributes.get("data-circle") ); - let intersections2 = freesewing.utils.circlesIntersect( + let intersections2 = circlesIntersect( A, A.attributes.get("data-circle"), B, @@ -409,10 +438,10 @@ describe('Utils', () => { }); it("Should not find intersections between non-overlapping circles", () => { - let A = new freesewing.Point(10, 10).attr("data-circle", 15); - let B = new freesewing.Point(90, 90).attr("data-circle", 35); + let A = new Point(10, 10).attr("data-circle", 15); + let B = new Point(90, 90).attr("data-circle", 35); - let intersections = freesewing.utils.circlesIntersect( + let intersections = circlesIntersect( A, A.attributes.get("data-circle"), B, @@ -422,10 +451,10 @@ describe('Utils', () => { }); it("Should not find intersections between contained circles", () => { - let A = new freesewing.Point(10, 10).attr("data-circle", 15); - let B = new freesewing.Point(10, 10).attr("data-circle", 35); + let A = new Point(10, 10).attr("data-circle", 15); + let B = new Point(10, 10).attr("data-circle", 35); - let intersections = freesewing.utils.circlesIntersect( + let intersections = circlesIntersect( A, A.attributes.get("data-circle"), B, @@ -435,10 +464,10 @@ describe('Utils', () => { }); it("Should not find intersections between identical circles", () => { - let A = new freesewing.Point(10, 10).attr("data-circle", 35); - let B = new freesewing.Point(10, 10).attr("data-circle", 35); + let A = new Point(10, 10).attr("data-circle", 35); + let B = new Point(10, 10).attr("data-circle", 35); - let intersections = freesewing.utils.circlesIntersect( + let intersections = circlesIntersect( A, A.attributes.get("data-circle"), B, @@ -448,22 +477,22 @@ describe('Utils', () => { }); it("Should return scale for a given amount of stretch", () => { - expect(freesewing.utils.stretchToScale(0)).to.equal(1); - expect(freesewing.utils.stretchToScale(0.25)).to.equal(0.8); + expect(stretchToScale(0)).to.equal(1); + expect(stretchToScale(0.25)).to.equal(0.8); }); it("Should capitalize a string", () => { - expect(utils.capitalize("test")).to.equal("Test"); - expect(utils.capitalize("Freesewing")).to.equal("Freesewing"); + expect(capitalize("test")).to.equal("Test"); + expect(capitalize("Freesewing")).to.equal("Freesewing"); }); it("Should split a curve", () => { - let a = new freesewing.Point(0, 0); - let b = new freesewing.Point(50, 0); - let c = new freesewing.Point(50, 100); - let d = new freesewing.Point(100, 100); - let X = new freesewing.Point(50, 50); - let [c1, c2] = utils.splitCurve(a, b, c, d, X); + let a = new Point(0, 0); + let b = new Point(50, 0); + let c = new Point(50, 100); + let d = new Point(100, 100); + let X = new Point(50, 50); + let [c1, c2] = splitCurve(a, b, c, d, X); expect(round(c1.cp1.x)).to.equal(25); expect(round(c1.cp1.y)).to.equal(0); expect(round(c1.cp2.x)).to.equal(37.5); @@ -475,48 +504,48 @@ describe('Utils', () => { }); it("Should find where a curve intersects a given X-value", () => { - let a = new freesewing.Point(0, 0); - let b = new freesewing.Point(50, 0); - let c = new freesewing.Point(50, 100); - let d = new freesewing.Point(100, 100); - let i = utils.curveIntersectsX(a, b, c, d, 30); + let a = new Point(0, 0); + let b = new Point(50, 0); + let c = new Point(50, 100); + let d = new Point(100, 100); + let i = curveIntersectsX(a, b, c, d, 30); expect(round(i.x)).to.equal(30); expect(round(i.y)).to.equal(16); }); it("Should find where a curve intersects a given Y-value", () => { - let a = new freesewing.Point(0, 0); - let b = new freesewing.Point(50, 0); - let c = new freesewing.Point(50, 100); - let d = new freesewing.Point(100, 100); - let i = utils.curveIntersectsY(a, b, c, d, 30); + let a = new Point(0, 0); + let b = new Point(50, 0); + let c = new Point(50, 100); + let d = new Point(100, 100); + let i = curveIntersectsY(a, b, c, d, 30); expect(round(i.x)).to.equal(39.49); expect(round(i.y)).to.equal(30); }); // Recreate issue #1206 it("Should find intersecting beams when a line is almost vertical", () => { - let a = new freesewing.Point(225.72, 241); - let b = new freesewing.Point(225.71999999999997, 600); - let i = utils.beamIntersectsY(a, b, 400); + let a = new Point(225.72, 241); + let b = new Point(225.71999999999997, 600); + let i = beamIntersectsY(a, b, 400); expect(round(i.y)).to.equal(400); }); it("Should check for valid coordinate", () => { - expect(utils.isCoord(23423.23)).to.equal(true); - expect(utils.isCoord(0)).to.equal(true); - expect(utils.isCoord()).to.equal(false); - expect(utils.isCoord(null)).to.equal(false); - expect(utils.isCoord('hi')).to.equal(false); - expect(utils.isCoord(NaN)).to.equal(false); + expect(isCoord(23423.23)).to.equal(true); + expect(isCoord(0)).to.equal(true); + expect(isCoord()).to.equal(false); + expect(isCoord(null)).to.equal(false); + expect(isCoord('hi')).to.equal(false); + expect(isCoord(NaN)).to.equal(false); }); it("Should return the correct sample style", () => { - expect(utils.sampleStyle(0, 5)).to.equal("stroke: hsl(-66, 100%, 35%);") - expect(utils.sampleStyle(1, 5)).to.equal("stroke: hsl(0, 100%, 35%);") - expect(utils.sampleStyle(2, 5)).to.equal("stroke: hsl(66, 100%, 35%);") - expect(utils.sampleStyle(3, 5)).to.equal("stroke: hsl(132, 100%, 35%);") - expect(utils.sampleStyle(4, 5)).to.equal("stroke: hsl(198, 100%, 35%);") + expect(sampleStyle(0, 5)).to.equal("stroke: hsl(-66, 100%, 35%);") + expect(sampleStyle(1, 5)).to.equal("stroke: hsl(0, 100%, 35%);") + expect(sampleStyle(2, 5)).to.equal("stroke: hsl(66, 100%, 35%);") + expect(sampleStyle(3, 5)).to.equal("stroke: hsl(132, 100%, 35%);") + expect(sampleStyle(4, 5)).to.equal("stroke: hsl(198, 100%, 35%);") }); it("Should return the correct sample styles", () => { @@ -527,21 +556,21 @@ describe('Utils', () => { "stroke: pink;", "stroke: orange;", ] - for (let i=0;i<5;i++) expect(utils.sampleStyle(i, 5, styles)).to.equal(styles[i]) + for (let i=0;i<5;i++) expect(sampleStyle(i, 5, styles)).to.equal(styles[i]) }); it("Should convert degrees to radians", () => { - expect(utils.deg2rad(0)).to.equal(0); - expect(round(utils.deg2rad(69))).to.equal(1.2); + expect(deg2rad(0)).to.equal(0); + expect(round(deg2rad(69))).to.equal(1.2); }); it("Should convert radians to degrees", () => { - expect(utils.rad2deg(0)).to.equal(0); - expect(round(utils.rad2deg(69))).to.equal(3953.41); + expect(rad2deg(0)).to.equal(0); + expect(round(rad2deg(69))).to.equal(3953.41); }); it("Should shoulder return two methods for pctBasedOn", () => { - const result = utils.pctBasedOn('chest') + const result = pctBasedOn('chest') expect(typeof result.toAbs).to.equal("function"); expect(typeof result.fromAbs).to.equal("function"); const measurements = { chest: 1000 } @@ -550,7 +579,7 @@ describe('Utils', () => { }); it("Should generate a part transform", () => { - let pattern = new freesewing.Pattern(); + let pattern = new Pattern(); pattern.settings.mode = "draft"; let part = new pattern.Part(); let short = part.shorthand(); @@ -560,7 +589,7 @@ describe('Utils', () => { .move(part.points.from) .line(part.points.to); part.stack(); - const transform = utils.generatePartTransform(30,60,90,true,true,part) + const transform = generatePartTransform(30,60,90,true,true,part) expect(transform.transform).to.equal(`translate(${30 + part.topLeft.x + part.bottomRight.x} ${60 + part.topLeft.y + part.bottomRight.y}) scale(-1 -1) rotate(90 ${part.topLeft.x + part.width/2} ${part.topLeft.y + part.height/2})`); }); });