
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).
149 lines
5.7 KiB
JavaScript
149 lines
5.7 KiB
JavaScript
import { expect } from 'chai'
|
|
import { Design, round } from '@freesewing/core'
|
|
import { annotationsPlugin } from '../src/index.mjs'
|
|
|
|
describe('Cutonfold Plugin Tests', () => {
|
|
it('Should run the default cutonfold macro', () => {
|
|
const part = {
|
|
name: 'test',
|
|
draft: ({ Point, points, macro, part }) => {
|
|
points.from = new Point(10, 20)
|
|
points.to = new Point(10, 220)
|
|
macro('cutonfold', {
|
|
from: points.from,
|
|
to: points.to,
|
|
})
|
|
|
|
return part
|
|
},
|
|
plugins: [annotationsPlugin],
|
|
}
|
|
// Note that we're not loading core plugins but the local plugin
|
|
const Test = new Design({ plugins: [annotationsPlugin], parts: [part], noCorePlugins: true })
|
|
const pattern = new Test()
|
|
pattern.draft()
|
|
const c = pattern.parts[0].test.paths.__macro_cutonfold_cutonfold_line
|
|
expect(c.attributes.get('class')).to.equal('note')
|
|
expect(c.attributes.get('marker-start')).to.equal('url(#cutonfoldFrom)')
|
|
expect(c.attributes.get('marker-end')).to.equal('url(#cutonfoldTo)')
|
|
expect(c.attributes.get('data-text')).to.equal('plugin-annotations:cutOnFold')
|
|
expect(c.attributes.get('data-text-class')).to.equal('center fill-note')
|
|
expect(c.ops[0].type).to.equal('move')
|
|
expect(c.ops[1].type).to.equal('line')
|
|
expect(c.ops[2].type).to.equal('line')
|
|
expect(c.ops[3].type).to.equal('line')
|
|
expect(round(c.ops[0].to.x)).to.equal(10)
|
|
expect(round(c.ops[0].to.y)).to.equal(30)
|
|
expect(round(c.ops[1].to.x)).to.equal(25)
|
|
expect(round(c.ops[1].to.y)).to.equal(30)
|
|
expect(round(c.ops[2].to.x)).to.equal(25)
|
|
expect(round(c.ops[2].to.y)).to.equal(210)
|
|
expect(round(c.ops[3].to.x)).to.equal(10)
|
|
expect(round(c.ops[3].to.y)).to.equal(210)
|
|
})
|
|
|
|
it('Should run the cutonfold/grainline macro', () => {
|
|
const part = {
|
|
name: 'test',
|
|
draft: ({ Point, points, macro, part }) => {
|
|
points.from = new Point(10, 20)
|
|
points.to = new Point(10, 220)
|
|
macro('cutonfold', {
|
|
from: points.from,
|
|
to: points.to,
|
|
grainline: true,
|
|
})
|
|
|
|
return part
|
|
},
|
|
plugins: [annotationsPlugin],
|
|
}
|
|
// Note that we're not loading core plugins but the local plugin
|
|
const Test = new Design({ plugins: [annotationsPlugin], parts: [part], noCorePlugins: true })
|
|
const pattern = new Test()
|
|
pattern.draft()
|
|
expect(
|
|
pattern.parts[0].test.paths.__macro_cutonfold_cutonfold_line.attributes.get('data-text')
|
|
).to.equal('plugin-annotations:cutOnFoldAndGrainline')
|
|
})
|
|
|
|
it('Should run the cutonfold macro with configurable offset', () => {
|
|
const part = {
|
|
name: 'test',
|
|
draft: ({ Point, points, macro, part }) => {
|
|
points.from = new Point(10, 20)
|
|
points.to = new Point(10, 220)
|
|
macro('cutonfold', {
|
|
from: points.from,
|
|
to: points.to,
|
|
offset: 30,
|
|
})
|
|
|
|
return part
|
|
},
|
|
plugins: [annotationsPlugin],
|
|
}
|
|
// Note that we're not loading core plugins but the local plugin
|
|
const Test = new Design({ plugins: [annotationsPlugin], parts: [part], noCorePlugins: true })
|
|
const pattern = new Test()
|
|
pattern.draft()
|
|
let c = pattern.parts[0].test.paths.__macro_cutonfold_cutonfold_line
|
|
expect(c.attributes.get('class')).to.equal('note')
|
|
expect(c.attributes.get('marker-start')).to.equal('url(#cutonfoldFrom)')
|
|
expect(c.attributes.get('marker-end')).to.equal('url(#cutonfoldTo)')
|
|
expect(c.attributes.get('data-text')).to.equal('plugin-annotations:cutOnFold')
|
|
expect(c.attributes.get('data-text-class')).to.equal('center fill-note')
|
|
expect(c.ops[0].type).to.equal('move')
|
|
expect(c.ops[1].type).to.equal('line')
|
|
expect(c.ops[2].type).to.equal('line')
|
|
expect(c.ops[3].type).to.equal('line')
|
|
expect(round(c.ops[0].to.x)).to.equal(10)
|
|
expect(round(c.ops[0].to.y)).to.equal(30)
|
|
expect(round(c.ops[1].to.x)).to.equal(40)
|
|
expect(round(c.ops[1].to.y)).to.equal(30)
|
|
expect(round(c.ops[2].to.x)).to.equal(40)
|
|
expect(round(c.ops[2].to.y)).to.equal(210)
|
|
expect(round(c.ops[3].to.x)).to.equal(10)
|
|
expect(round(c.ops[3].to.y)).to.equal(210)
|
|
})
|
|
|
|
it('Should run the cutonfold macro with configurable margin', () => {
|
|
const part = {
|
|
name: 'test',
|
|
draft: ({ Point, points, macro, part }) => {
|
|
points.from = new Point(10, 20)
|
|
points.to = new Point(10, 220)
|
|
macro('cutonfold', {
|
|
from: points.from,
|
|
to: points.to,
|
|
margin: 0.2,
|
|
})
|
|
|
|
return part
|
|
},
|
|
plugins: [annotationsPlugin],
|
|
}
|
|
// Note that we're not loading core plugins but the local plugin
|
|
const Test = new Design({ plugins: [annotationsPlugin], parts: [part], noCorePlugins: true })
|
|
const pattern = new Test()
|
|
pattern.draft()
|
|
let c = pattern.parts[0].test.paths.__macro_cutonfold_cutonfold_line
|
|
expect(c.attributes.get('class')).to.equal('note')
|
|
expect(c.attributes.get('marker-start')).to.equal('url(#cutonfoldFrom)')
|
|
expect(c.attributes.get('marker-end')).to.equal('url(#cutonfoldTo)')
|
|
expect(c.attributes.get('data-text')).to.equal('plugin-annotations:cutOnFold')
|
|
expect(c.attributes.get('data-text-class')).to.equal('center fill-note')
|
|
expect(c.ops[0].type).to.equal('move')
|
|
expect(c.ops[1].type).to.equal('line')
|
|
expect(c.ops[2].type).to.equal('line')
|
|
expect(c.ops[3].type).to.equal('line')
|
|
expect(round(c.ops[0].to.x)).to.equal(10)
|
|
expect(round(c.ops[0].to.y)).to.equal(60)
|
|
expect(round(c.ops[1].to.x)).to.equal(25)
|
|
expect(round(c.ops[1].to.y)).to.equal(60)
|
|
expect(round(c.ops[2].to.x)).to.equal(25)
|
|
expect(round(c.ops[2].to.y)).to.equal(180)
|
|
expect(round(c.ops[3].to.x)).to.equal(10)
|
|
expect(round(c.ops[3].to.y)).to.equal(180)
|
|
})
|
|
})
|