
Note that the tests for Lumina are failing, but that's not related to the chai upgrade, rather it seems these tests fail because of issues in the design that we'll tackle later (it's a brand new design yet to be released).
297 lines
10 KiB
JavaScript
297 lines
10 KiB
JavaScript
import { expect } from 'chai'
|
|
import { round, Design } from '@freesewing/core'
|
|
import { annotationsPlugin } from '../src/index.mjs'
|
|
|
|
describe('Bartack plugin Tests', () => {
|
|
it('draws a default bartack from a point', function () {
|
|
const part = {
|
|
name: 'test',
|
|
draft: ({ Point, points, macro, part }) => {
|
|
points.from = new Point(10, 20)
|
|
macro('bartack', {
|
|
anchor: points.from,
|
|
})
|
|
|
|
return part
|
|
},
|
|
plugins: [annotationsPlugin],
|
|
}
|
|
// Note that we're not loading core plugins but the local plugin
|
|
const design = new Design({ parts: [part], noCorePlugins: true })
|
|
const pattern = new design()
|
|
pattern.draft()
|
|
const c = pattern.parts[0].test.paths.__macro_bartack_bartack_stitches
|
|
expect(c.attributes.get('class')).to.equal('stroke-sm stroke-mark')
|
|
expect(c.ops[0].type).to.equal('move')
|
|
expect(c.ops[0].to.x).to.equal(10)
|
|
expect(c.ops[0].to.y).to.equal(21.5)
|
|
expect(c.ops[1].type).to.equal('line')
|
|
expect(c.ops[1].to.x).to.equal(10)
|
|
expect(c.ops[1].to.y).to.equal(21.5)
|
|
expect(c.ops[2].to.x).to.equal(10)
|
|
expect(c.ops[2].to.y).to.equal(18.5)
|
|
expect(c.ops[3].to.x).to.equal(11)
|
|
expect(c.ops[3].to.y).to.equal(21.5)
|
|
expect(c.ops[4].to.x).to.equal(11)
|
|
expect(c.ops[4].to.y).to.equal(18.5)
|
|
expect(c.ops).to.have.lengthOf(31)
|
|
})
|
|
|
|
it('draws a bartack along a path', function () {
|
|
const part = {
|
|
name: 'test',
|
|
draft: ({ Point, points, Path, macro, part }) => {
|
|
points.from = new Point(10, 20)
|
|
points.to = new Point(10, 30)
|
|
macro('bartackAlong', {
|
|
path: new Path().move(points.from).line(points.to),
|
|
})
|
|
|
|
return part
|
|
},
|
|
plugins: [annotationsPlugin],
|
|
}
|
|
// Note that we're not loading core plugins but the local plugin
|
|
const design = new Design({ parts: [part], noCorePlugins: true })
|
|
const pattern = new design()
|
|
pattern.draft()
|
|
const c = pattern.parts[0].test.paths.__macro_bartackalong_bartack_stitches
|
|
expect(c.attributes.get('class')).to.equal('stroke-sm stroke-mark')
|
|
expect(c.ops[0].type).to.equal('move')
|
|
expect(c.ops[0].to.x).to.equal(8.5)
|
|
expect(c.ops[0].to.y).to.equal(20)
|
|
expect(c.ops[1].type).to.equal('line')
|
|
expect(c.ops[1].to.x).to.equal(8.5)
|
|
expect(c.ops[1].to.y).to.equal(20)
|
|
expect(c.ops[2].to.x).to.equal(11.5)
|
|
expect(c.ops[2].to.y).to.equal(20)
|
|
expect(c.ops[3].to.x).to.equal(8.5)
|
|
expect(c.ops[3].to.y).to.equal(21)
|
|
expect(c.ops[4].to.x).to.equal(11.5)
|
|
expect(c.ops[4].to.y).to.equal(21)
|
|
expect(c.ops).to.have.lengthOf(21)
|
|
})
|
|
|
|
it('can be called using the bartackFractionAlong syntax', function () {
|
|
const part = {
|
|
name: 'test',
|
|
draft: ({ Point, points, Path, macro, part }) => {
|
|
points.from = new Point(10, 20)
|
|
points.to = new Point(10, 100)
|
|
macro('bartackAlong', {
|
|
path: new Path().move(points.from).line(points.to),
|
|
start: 0.2,
|
|
end: 0.8,
|
|
})
|
|
|
|
return part
|
|
},
|
|
plugins: [annotationsPlugin],
|
|
}
|
|
// Note that we're not loading core plugins but the local plugin
|
|
const design = new Design({ parts: [part], noCorePlugins: true })
|
|
const pattern = new design()
|
|
pattern.draft()
|
|
const c = pattern.parts[0].test.paths.__macro_bartackalong_bartack_stitches
|
|
expect(c.attributes.get('class')).to.equal('stroke-sm stroke-mark')
|
|
expect(c.ops[0].type).to.equal('move')
|
|
expect(round(c.ops[0].to.x)).to.equal(8.5)
|
|
expect(c.ops[0].to.y).to.equal(20)
|
|
expect(c.ops[1].type).to.equal('line')
|
|
expect(round(c.ops[1].to.x)).to.equal(8.5)
|
|
expect(c.ops[1].to.y).to.equal(20)
|
|
expect(round(c.ops[2].to.x)).to.equal(11.5)
|
|
expect(c.ops[2].to.y).to.equal(20)
|
|
expect(round(c.ops[3].to.x)).to.equal(8.5)
|
|
expect(c.ops[3].to.y).to.equal(21)
|
|
expect(round(c.ops[4].to.x)).to.equal(11.5)
|
|
expect(c.ops[4].to.y).to.equal(21)
|
|
expect(c.ops).to.have.lengthOf(161)
|
|
})
|
|
|
|
it('can be called using the bartackFractionAlong syntax', function () {
|
|
const part = {
|
|
name: 'test',
|
|
draft: ({ Point, points, Path, macro, part }) => {
|
|
points.from = new Point(10, 20)
|
|
points.to = new Point(10, 100)
|
|
macro('bartackFractionAlong', {
|
|
path: new Path().move(points.from).line(points.to),
|
|
start: 0.2,
|
|
end: 0.8,
|
|
})
|
|
|
|
return part
|
|
},
|
|
plugins: [annotationsPlugin],
|
|
}
|
|
// Note that we're not loading core plugins but the local plugin
|
|
const design = new Design({ parts: [part], noCorePlugins: true })
|
|
const pattern = new design()
|
|
pattern.draft()
|
|
const c = pattern.parts[0].test.paths.__macro_bartackfractionalong_bartack_stitches
|
|
expect(c.attributes.get('class')).to.equal('stroke-sm stroke-mark')
|
|
expect(c.ops[0].type).to.equal('move')
|
|
expect(round(c.ops[0].to.x)).to.equal(8.5)
|
|
expect(c.ops[0].to.y).to.equal(36)
|
|
expect(c.ops[1].type).to.equal('line')
|
|
expect(round(c.ops[1].to.x)).to.equal(8.5)
|
|
expect(c.ops[1].to.y).to.equal(36)
|
|
expect(round(c.ops[2].to.x)).to.equal(11.5)
|
|
expect(c.ops[2].to.y).to.equal(36)
|
|
expect(round(c.ops[3].to.x)).to.equal(8.5)
|
|
expect(c.ops[3].to.y).to.equal(37)
|
|
expect(round(c.ops[4].to.x)).to.equal(11.5)
|
|
expect(c.ops[4].to.y).to.equal(37)
|
|
expect(c.ops).to.have.lengthOf(97)
|
|
})
|
|
|
|
it('has configurable length', function () {
|
|
const part = {
|
|
name: 'test',
|
|
draft: ({ Point, points, macro, part }) => {
|
|
points.from = new Point(10, 20)
|
|
macro('bartack', {
|
|
anchor: points.from,
|
|
length: 20,
|
|
})
|
|
|
|
return part
|
|
},
|
|
plugins: [annotationsPlugin],
|
|
}
|
|
// Note that we're not loading core plugins but the local plugin
|
|
const design = new Design({ parts: [part], noCorePlugins: true })
|
|
const pattern = new design()
|
|
pattern.draft()
|
|
const c = pattern.parts[0].test.paths.__macro_bartack_bartack_stitches
|
|
expect(c.attributes.get('class')).to.equal('stroke-sm stroke-mark')
|
|
expect(c.ops[0].type).to.equal('move')
|
|
expect(c.ops[0].to.x).to.equal(10)
|
|
expect(c.ops[0].to.y).to.equal(21.5)
|
|
expect(c.ops[1].type).to.equal('line')
|
|
expect(c.ops[1].to.x).to.equal(10)
|
|
expect(c.ops[1].to.y).to.equal(21.5)
|
|
expect(c.ops[2].to.x).to.equal(10)
|
|
expect(c.ops[2].to.y).to.equal(18.5)
|
|
expect(c.ops[3].to.x).to.equal(11)
|
|
expect(c.ops[3].to.y).to.equal(21.5)
|
|
expect(c.ops[4].to.x).to.equal(11)
|
|
expect(c.ops[4].to.y).to.equal(18.5)
|
|
expect(c.ops).to.have.lengthOf(41)
|
|
})
|
|
|
|
it('has configurable width', function () {
|
|
const part = {
|
|
name: 'test',
|
|
draft: ({ Point, points, macro, part }) => {
|
|
points.from = new Point(10, 20)
|
|
macro('bartack', {
|
|
anchor: points.from,
|
|
width: 5,
|
|
})
|
|
|
|
return part
|
|
},
|
|
plugins: [annotationsPlugin],
|
|
}
|
|
// Note that we're not loading core plugins but the local plugin
|
|
const design = new Design({ parts: [part], noCorePlugins: true })
|
|
const pattern = new design()
|
|
pattern.draft()
|
|
const c = pattern.parts[0].test.paths.__macro_bartack_bartack_stitches
|
|
expect(c.attributes.get('class')).to.equal('stroke-sm stroke-mark')
|
|
expect(c.ops[0].type).to.equal('move')
|
|
expect(c.ops[0].to.x).to.equal(10)
|
|
expect(c.ops[0].to.y).to.equal(22.5)
|
|
expect(c.ops[1].type).to.equal('line')
|
|
expect(c.ops[1].to.x).to.equal(10)
|
|
expect(c.ops[1].to.y).to.equal(22.5)
|
|
expect(c.ops[2].to.x).to.equal(10)
|
|
expect(c.ops[2].to.y).to.equal(17.5)
|
|
expect(round(c.ops[3].to.x)).to.equal(11.67)
|
|
expect(c.ops[3].to.y).to.equal(22.5)
|
|
expect(round(c.ops[4].to.x)).to.equal(11.67)
|
|
expect(c.ops[4].to.y).to.equal(17.5)
|
|
expect(c.ops).to.have.lengthOf(19)
|
|
})
|
|
|
|
it('has configurable angle', function () {
|
|
const part = {
|
|
name: 'test',
|
|
draft: ({ Point, points, macro, part }) => {
|
|
points.from = new Point(10, 20)
|
|
macro('bartack', {
|
|
anchor: points.from,
|
|
angle: 45,
|
|
})
|
|
|
|
return part
|
|
},
|
|
plugins: [annotationsPlugin],
|
|
}
|
|
// Note that we're not loading core plugins but the local plugin
|
|
const design = new Design({ parts: [part], noCorePlugins: true })
|
|
const pattern = new design()
|
|
pattern.draft()
|
|
const c = pattern.parts[0].test.paths.__macro_bartack_bartack_stitches
|
|
expect(c.attributes.get('class')).to.equal('stroke-sm stroke-mark')
|
|
expect(c.ops[0].type).to.equal('move')
|
|
expect(round(c.ops[0].to.x)).to.equal(11.06)
|
|
expect(round(c.ops[0].to.y)).to.equal(21.06)
|
|
expect(c.ops[1].type).to.equal('line')
|
|
expect(round(c.ops[1].to.x)).to.equal(11.06)
|
|
expect(round(c.ops[1].to.y)).to.equal(21.06)
|
|
expect(round(c.ops[2].to.x)).to.equal(8.94)
|
|
expect(round(c.ops[2].to.y)).to.equal(18.94)
|
|
expect(round(c.ops[3].to.x)).to.equal(11.72)
|
|
expect(round(c.ops[3].to.y)).to.equal(20.4)
|
|
expect(round(c.ops[4].to.x)).to.equal(9.6)
|
|
expect(round(c.ops[4].to.y)).to.equal(18.28)
|
|
expect(c.ops).to.have.lengthOf(33)
|
|
})
|
|
|
|
it('has configurable suffix', function () {
|
|
const part = {
|
|
name: 'test',
|
|
draft: ({ Point, points, macro, part }) => {
|
|
points.from = new Point(10, 20)
|
|
macro('bartack', {
|
|
anchor: points.from,
|
|
id: 'foo',
|
|
})
|
|
|
|
part
|
|
},
|
|
plugins: [annotationsPlugin],
|
|
}
|
|
// Note that we're not loading core plugins but the local plugin
|
|
const design = new Design({ parts: [part], noCorePlugins: true })
|
|
const pattern = new design()
|
|
pattern.draft()
|
|
const c = pattern.parts[0].test.paths.__macro_bartack_foo_stitches
|
|
expect(c.attributes.get('class')).to.equal('stroke-sm stroke-mark')
|
|
})
|
|
|
|
it('has configurable prefix', function () {
|
|
const part = {
|
|
name: 'test',
|
|
draft: ({ Point, points, macro, part }) => {
|
|
points.from = new Point(10, 20)
|
|
macro('bartack', {
|
|
anchor: points.from,
|
|
id: 'foo',
|
|
})
|
|
|
|
return part
|
|
},
|
|
plugins: [annotationsPlugin],
|
|
}
|
|
// Note that we're not loading core plugins but the local plugin
|
|
const design = new Design({ parts: [part], noCorePlugins: true })
|
|
const pattern = new design()
|
|
pattern.draft()
|
|
const c = pattern.parts[0].test.paths.__macro_bartack_foo_stitches
|
|
expect(c.attributes.get('class')).to.equal('stroke-sm stroke-mark')
|
|
})
|
|
})
|