2021-11-27 13:08:42 +01:00
|
|
|
import chai from 'chai'
|
2022-08-28 11:58:04 +02:00
|
|
|
import { round, Pattern } from '@freesewing/core'
|
2022-08-28 12:06:41 +02:00
|
|
|
import { plugin } from './dist/index.mjs'
|
2021-11-27 13:08:42 +01:00
|
|
|
|
|
|
|
const expect = chai.expect
|
2021-11-21 16:34:16 +01:00
|
|
|
|
2021-11-27 16:42:05 +01:00
|
|
|
describe('Bartack plugin Tests', () => {
|
2021-11-21 16:34:16 +01:00
|
|
|
it('draws a default bartack from a point', function () {
|
2022-08-28 11:58:04 +02:00
|
|
|
const pattern = new Pattern()
|
2021-11-21 16:34:16 +01:00
|
|
|
pattern.use(plugin)
|
|
|
|
pattern.parts.test = new pattern.Part()
|
|
|
|
pattern.parts.test.points.from = new pattern.Point(10, 20)
|
2021-11-27 13:08:42 +01:00
|
|
|
const { macro } = pattern.parts.test.shorthand()
|
2021-11-21 16:34:16 +01:00
|
|
|
macro('bartack', {
|
|
|
|
anchor: pattern.parts.test.points.from,
|
2021-11-20 13:58:40 +01:00
|
|
|
})
|
2021-11-27 13:08:42 +01:00
|
|
|
const c = pattern.parts.test.paths.bartack
|
2021-12-29 09:21:28 +01:00
|
|
|
expect(c.attributes.get('class')).to.equal('stroke-sm stroke-mark')
|
2021-11-21 16:34:16 +01:00
|
|
|
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 () {
|
2022-08-28 11:58:04 +02:00
|
|
|
const pattern = new Pattern()
|
2021-11-21 16:34:16 +01:00
|
|
|
pattern.use(plugin)
|
|
|
|
pattern.parts.test = new pattern.Part()
|
2021-11-27 13:08:42 +01:00
|
|
|
const from = new pattern.Point(10, 20)
|
|
|
|
const to = new pattern.Point(10, 30)
|
2021-11-21 16:34:16 +01:00
|
|
|
|
2021-11-27 13:08:42 +01:00
|
|
|
const { macro } = pattern.parts.test.shorthand()
|
2022-01-18 18:46:37 +01:00
|
|
|
macro('bartackAlong', {
|
2021-11-20 13:58:40 +01:00
|
|
|
path: new pattern.Path().move(from).line(to),
|
|
|
|
})
|
2021-11-27 13:08:42 +01:00
|
|
|
const c = pattern.parts.test.paths.bartack
|
2021-12-29 09:21:28 +01:00
|
|
|
expect(c.attributes.get('class')).to.equal('stroke-sm stroke-mark')
|
2021-11-21 16:34:16 +01:00
|
|
|
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)
|
|
|
|
})
|
|
|
|
|
2022-01-18 18:46:37 +01:00
|
|
|
it('can be called using the bartackFractionAlong syntax', function () {
|
2022-08-28 11:58:04 +02:00
|
|
|
const pattern = new Pattern()
|
2021-11-21 16:34:16 +01:00
|
|
|
pattern.use(plugin)
|
|
|
|
pattern.parts.test = new pattern.Part()
|
2021-11-27 13:08:42 +01:00
|
|
|
const from = new pattern.Point(10, 20)
|
|
|
|
const to = new pattern.Point(10, 100)
|
2021-11-21 16:34:16 +01:00
|
|
|
|
2021-11-27 13:08:42 +01:00
|
|
|
const { macro } = pattern.parts.test.shorthand()
|
2021-11-21 16:34:16 +01:00
|
|
|
macro('bartackAlong', {
|
2021-11-20 13:58:40 +01:00
|
|
|
path: new pattern.Path().move(from).line(to),
|
2022-01-18 18:46:37 +01:00
|
|
|
start: 0.2,
|
|
|
|
end: 0.8,
|
2021-11-20 13:58:40 +01:00
|
|
|
})
|
2021-11-27 13:08:42 +01:00
|
|
|
const c = pattern.parts.test.paths.bartack
|
2021-12-29 09:21:28 +01:00
|
|
|
expect(c.attributes.get('class')).to.equal('stroke-sm stroke-mark')
|
2021-11-21 16:34:16 +01:00
|
|
|
expect(c.ops[0].type).to.equal('move')
|
|
|
|
expect(round(c.ops[0].to.x)).to.equal(8.5)
|
2022-01-18 18:46:37 +01:00
|
|
|
expect(c.ops[0].to.y).to.equal(20)
|
2021-11-21 16:34:16 +01:00
|
|
|
expect(c.ops[1].type).to.equal('line')
|
|
|
|
expect(round(c.ops[1].to.x)).to.equal(8.5)
|
2022-01-18 18:46:37 +01:00
|
|
|
expect(c.ops[1].to.y).to.equal(20)
|
2021-11-21 16:34:16 +01:00
|
|
|
expect(round(c.ops[2].to.x)).to.equal(11.5)
|
2022-01-18 18:46:37 +01:00
|
|
|
expect(c.ops[2].to.y).to.equal(20)
|
2021-11-21 16:34:16 +01:00
|
|
|
expect(round(c.ops[3].to.x)).to.equal(8.5)
|
2022-01-18 18:46:37 +01:00
|
|
|
expect(c.ops[3].to.y).to.equal(21)
|
2021-11-21 16:34:16 +01:00
|
|
|
expect(round(c.ops[4].to.x)).to.equal(11.5)
|
2022-01-18 18:46:37 +01:00
|
|
|
expect(c.ops[4].to.y).to.equal(21)
|
|
|
|
expect(c.ops).to.have.lengthOf(161)
|
2021-11-21 16:34:16 +01:00
|
|
|
})
|
|
|
|
|
|
|
|
it('can be called using the bartackFractionAlong syntax', function () {
|
2022-08-28 11:58:04 +02:00
|
|
|
const pattern = new Pattern()
|
2021-11-21 16:34:16 +01:00
|
|
|
pattern.use(plugin)
|
|
|
|
pattern.parts.test = new pattern.Part()
|
2021-11-27 13:08:42 +01:00
|
|
|
const from = new pattern.Point(10, 20)
|
|
|
|
const to = new pattern.Point(10, 100)
|
2021-11-21 16:34:16 +01:00
|
|
|
|
2021-11-27 13:08:42 +01:00
|
|
|
const { macro } = pattern.parts.test.shorthand()
|
2021-11-21 16:34:16 +01:00
|
|
|
macro('bartackFractionAlong', {
|
2021-11-20 13:58:40 +01:00
|
|
|
path: new pattern.Path().move(from).line(to),
|
2021-11-21 16:34:16 +01:00
|
|
|
start: 0.2,
|
|
|
|
end: 0.8,
|
2021-11-20 13:58:40 +01:00
|
|
|
})
|
2021-11-27 13:08:42 +01:00
|
|
|
const c = pattern.parts.test.paths.bartack
|
2021-12-29 09:21:28 +01:00
|
|
|
expect(c.attributes.get('class')).to.equal('stroke-sm stroke-mark')
|
2021-11-21 16:34:16 +01:00
|
|
|
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 () {
|
2022-08-28 11:58:04 +02:00
|
|
|
const pattern = new Pattern()
|
2021-11-21 16:34:16 +01:00
|
|
|
pattern.use(plugin)
|
|
|
|
pattern.parts.test = new pattern.Part()
|
|
|
|
pattern.parts.test.points.from = new pattern.Point(10, 20)
|
2021-11-27 13:08:42 +01:00
|
|
|
const { macro } = pattern.parts.test.shorthand()
|
2021-11-21 16:34:16 +01:00
|
|
|
macro('bartack', {
|
|
|
|
anchor: pattern.parts.test.points.from,
|
|
|
|
length: 20,
|
2021-11-20 13:58:40 +01:00
|
|
|
})
|
2021-11-27 13:08:42 +01:00
|
|
|
const c = pattern.parts.test.paths.bartack
|
2021-12-29 09:21:28 +01:00
|
|
|
expect(c.attributes.get('class')).to.equal('stroke-sm stroke-mark')
|
2021-11-21 16:34:16 +01:00
|
|
|
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 () {
|
2022-08-28 11:58:04 +02:00
|
|
|
const pattern = new Pattern()
|
2021-11-21 16:34:16 +01:00
|
|
|
pattern.use(plugin)
|
|
|
|
pattern.parts.test = new pattern.Part()
|
|
|
|
pattern.parts.test.points.from = new pattern.Point(10, 20)
|
2021-11-27 13:08:42 +01:00
|
|
|
const { macro } = pattern.parts.test.shorthand()
|
2021-11-21 16:34:16 +01:00
|
|
|
macro('bartack', {
|
|
|
|
anchor: pattern.parts.test.points.from,
|
|
|
|
width: 5,
|
2021-11-20 13:58:40 +01:00
|
|
|
})
|
2021-11-27 13:08:42 +01:00
|
|
|
const c = pattern.parts.test.paths.bartack
|
2021-12-29 09:21:28 +01:00
|
|
|
expect(c.attributes.get('class')).to.equal('stroke-sm stroke-mark')
|
2021-11-21 16:34:16 +01:00
|
|
|
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 () {
|
2022-08-28 11:58:04 +02:00
|
|
|
const pattern = new Pattern()
|
2021-11-21 16:34:16 +01:00
|
|
|
pattern.use(plugin)
|
|
|
|
pattern.parts.test = new pattern.Part()
|
|
|
|
pattern.parts.test.points.from = new pattern.Point(10, 20)
|
2021-11-27 13:08:42 +01:00
|
|
|
const { macro } = pattern.parts.test.shorthand()
|
2021-11-21 16:34:16 +01:00
|
|
|
macro('bartack', {
|
|
|
|
anchor: pattern.parts.test.points.from,
|
|
|
|
angle: 45,
|
2021-11-20 13:58:40 +01:00
|
|
|
})
|
2021-11-27 13:08:42 +01:00
|
|
|
const c = pattern.parts.test.paths.bartack
|
2021-12-29 09:21:28 +01:00
|
|
|
expect(c.attributes.get('class')).to.equal('stroke-sm stroke-mark')
|
2021-11-21 16:34:16 +01:00
|
|
|
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 () {
|
2022-08-28 11:58:04 +02:00
|
|
|
const pattern = new Pattern()
|
2021-11-21 16:34:16 +01:00
|
|
|
pattern.use(plugin)
|
|
|
|
pattern.parts.test = new pattern.Part()
|
|
|
|
pattern.parts.test.points.from = new pattern.Point(10, 20)
|
2021-11-27 13:08:42 +01:00
|
|
|
const { macro } = pattern.parts.test.shorthand()
|
2021-11-21 16:34:16 +01:00
|
|
|
macro('bartack', {
|
|
|
|
anchor: pattern.parts.test.points.from,
|
|
|
|
suffix: 'foo',
|
2021-11-20 13:58:40 +01:00
|
|
|
})
|
2021-11-27 13:08:42 +01:00
|
|
|
const c = pattern.parts.test.paths.bartackfoo
|
2021-12-29 09:21:28 +01:00
|
|
|
expect(c.attributes.get('class')).to.equal('stroke-sm stroke-mark')
|
2021-11-21 16:34:16 +01:00
|
|
|
})
|
|
|
|
|
|
|
|
it('has configurable prefix', function () {
|
2022-08-28 11:58:04 +02:00
|
|
|
const pattern = new Pattern()
|
2021-11-21 16:34:16 +01:00
|
|
|
pattern.use(plugin)
|
|
|
|
pattern.parts.test = new pattern.Part()
|
|
|
|
pattern.parts.test.points.from = new pattern.Point(10, 20)
|
2021-11-27 13:08:42 +01:00
|
|
|
const { macro } = pattern.parts.test.shorthand()
|
2021-11-21 16:34:16 +01:00
|
|
|
macro('bartack', {
|
|
|
|
anchor: pattern.parts.test.points.from,
|
|
|
|
prefix: 'foo',
|
2021-11-20 13:58:40 +01:00
|
|
|
})
|
2021-11-27 13:08:42 +01:00
|
|
|
const c = pattern.parts.test.paths.foobartack
|
2021-12-29 09:21:28 +01:00
|
|
|
expect(c.attributes.get('class')).to.equal('stroke-sm stroke-mark')
|
2021-11-21 16:34:16 +01:00
|
|
|
})
|
|
|
|
})
|