From 293c6bec09ec864000dddade8f1a576d88809d37 Mon Sep 17 00:00:00 2001 From: joostdecock Date: Sun, 24 Jul 2022 21:34:22 +0200 Subject: [PATCH] chore(core): Adding unit tests --- packages/core/src/part.js | 2 - packages/core/tests/part.test.js | 81 ++++++++++++++++++++++------- packages/core/tests/path.test.js | 26 ++++++--- packages/core/tests/pattern.test.js | 1 + 4 files changed, 82 insertions(+), 28 deletions(-) diff --git a/packages/core/src/part.js b/packages/core/src/part.js index 7a7829964d1..34698bf250a 100644 --- a/packages/core/src/part.js +++ b/packages/core/src/part.js @@ -147,8 +147,6 @@ Part.prototype.inject = function (orig) { for (let i in orig.points) { if (orig.points[i] === p) return i } - - return false } for (let i in orig.points) this.points[i] = orig.points[i].clone() diff --git a/packages/core/tests/part.test.js b/packages/core/tests/part.test.js index 68da7bd8f93..a0b67408024 100644 --- a/packages/core/tests/part.test.js +++ b/packages/core/tests/part.test.js @@ -82,11 +82,27 @@ it("Should set part attributes", () => { it("Should inject a part", () => { let pattern = new freesewing.Pattern(); let part = new pattern.Part(); - part.points.foo = new part.Point(12, 23); + 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() + .move(part.points.a) + .line(part.points.b) + .curve(part.points.c, part.points.b, part.points.a) + const { Snippet, snippets } = part.shorthand() + snippets.d = new Snippet('notch', part.points.a) let test = new pattern.Part(); test.inject(part); - expect(test.points.foo.x).to.equal(12); - expect(test.points.foo.y).to.equal(23); + expect(test.points.a.x).to.equal(12); + expect(test.points.a.y).to.equal(23); + expect(test.paths.bar.ops.length).to.equal(3) + for (let i=0;i<3;i++) { + expect(test.paths.bar.ops[i].type).to.equal(part.paths.bar.ops[i].type) + expect(test.paths.bar.ops[i].to.x).to.equal(part.paths.bar.ops[i].to.x) + expect(test.paths.bar.ops[i].to.y).to.equal(part.paths.bar.ops[i].to.y) + } + expect(test.snippets.d.anchor.x).to.equal(part.points.a.x) + expect(test.snippets.d.anchor.y).to.equal(part.points.a.y) }); it("Should return shorthand", () => { @@ -98,22 +114,31 @@ it("Should return shorthand", () => { expect(short.complete).to.equal(true); expect(short.paperless).to.equal(true); }); -/* -it("Should not allow a margin below 10 for paperless patterns", () => { - let pattern = new freesewing.Pattern(); - pattern.settings.paperless = true; - pattern.settings.margin = 2; - pattern.parts.a = new pattern.Part(); - let a = pattern.parts.a; - a.points.a = new pattern.Point(0,0); - a.points.b = new pattern.Point(0,100); - a.paths.a = new pattern.Path() - .move(a.points.a) - .line(a.points.b); - pattern.draft(); - expect(pattern.width).to.equal(120); + +it("Should raise a warning when setting a non-Point value in points", () => { + const pattern = new freesewing.Pattern(); + pattern.settings.mode = "draft"; + const part = new pattern.Part(); + const { points } = part.shorthand() + points.a = 'banana' + expect(pattern.events.warning.length).to.equal(3) + expect(pattern.events.warning[0]).to.equal('`points.a` was set with a value that is not a `Point` object') + expect(pattern.events.warning[1]).to.equal('`points.a` was set with a `x` parameter that is not a `number`') + expect(pattern.events.warning[2]).to.equal('`points.a` was set with a `y` parameter that is not a `number`') }); -*/ + +it("Should raise a warning when setting a non-Snippet value in snippets", () => { + const pattern = new freesewing.Pattern(); + pattern.settings.mode = "draft"; + const part = new pattern.Part(); + const { snippets } = part.shorthand() + snippets.a = 'banana' + expect(pattern.events.warning.length).to.equal(3) + expect(pattern.events.warning[0]).to.equal('`snippets.a` was set with a value that is not a `Snippet` object') + expect(pattern.events.warning[1]).to.equal('`snippets.a` was set with a `def` parameter that is not a `string`') + expect(pattern.events.warning[2]).to.equal('`snippets.a` was set with an `anchor` parameter that is not a `Point`') +}); + it("Should calculate the part boundary with default margin", () => { let pattern = new freesewing.Pattern(); pattern.settings.mode = "draft"; @@ -206,3 +231,23 @@ it("Should only stack a part if needed", () => { part.stack(); expect(part.attributes.get("transform")).to.equal(false); }); + +it("Should run hooks", () => { + let count = 0 + const pattern = new freesewing.Pattern() + const part = new pattern.Part(); + part.hooks.preDraft = [{ method: function(p) { count++ }} ] + part.runHooks('preDraft') + expect(count).to.equal(1); +}); + +it("Should get the units closure to raise a debug when passing a non-number", () => { + const pattern = new freesewing.Pattern(); + pattern.settings.mode = "draft"; + const part = new pattern.Part(); + const short = part.shorthand(); + short.units('a') + expect(pattern.events.debug.length).to.equal(1) + expect(pattern.events.debug[0]).to.equal('Calling `units(value)` but `value` is not a number (`string`)') +}); + diff --git a/packages/core/tests/path.test.js b/packages/core/tests/path.test.js index 920acf409ef..feeff9c2ce0 100644 --- a/packages/core/tests/path.test.js +++ b/packages/core/tests/path.test.js @@ -1106,19 +1106,26 @@ it("Should raise a warning when calling shiftAlong but distance is not a number" it("Should raise a warning when calling shiftFractionalong but fraction is not a number", () => { let invalid = false - const raise = { error: () => invalid = true } + const raise = { + error: () => invalid = true, + warning: () => invalid = true, + } expect(invalid).to.equal(false); new freesewing.Path() .withRaise(raise) - .move(new freesewing.Point(0,0)) - .line(new freesewing.Point(10,10)) + .move(new freesewing.Point(0,0).withRaise(raise)) + .line(new freesewing.Point(10,10).withRaise(raise)) + .line(new freesewing.Point(10,20).withRaise(raise)) .shiftFractionAlong() expect(invalid).to.equal(true); }); it("Should raise a warning when splitting a path on a non-point", () => { let invalid = false - const raise = { error: () => invalid = true } + const raise = { + 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) @@ -1128,18 +1135,22 @@ it("Should raise a warning when splitting a path on a non-point", () => { .move(from) .curve(cp1, cp2, to) .line(from) + .line(cp1) try { path.split() } catch (err) { - console.log(err) + expect(''+err).to.contain("TypeError: Cannot read property") } expect(invalid).to.equal(true); }); it("Should raise a warning when splitting a path on a non-point", () => { let invalid = false - const raise = { error: () => invalid = true } + const raise = { + 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) @@ -1153,8 +1164,7 @@ it("Should raise a warning when splitting a path on a non-point", () => { path.split() } catch (err) { - console.log(err) + expect(''+err).to.contain("TypeError: Cannot read property") } expect(invalid).to.equal(true); }); - diff --git a/packages/core/tests/pattern.test.js b/packages/core/tests/pattern.test.js index 2cba8f45a81..a9758104185 100644 --- a/packages/core/tests/pattern.test.js +++ b/packages/core/tests/pattern.test.js @@ -435,3 +435,4 @@ it("Should correctly merge settings for existing array", () => { expect(pattern.settings.only.length).to.equal(4); expect(pattern.settings.margin).to.equal(5); }); +