112 lines
No EOL
3.1 KiB
JavaScript
112 lines
No EOL
3.1 KiB
JavaScript
const {parse} = require('../../src/anchor')
|
|
const Point = require('../../src/point')
|
|
const {check} = require('../helpers/point')
|
|
|
|
describe('Anchor', function() {
|
|
|
|
const points = {
|
|
o: new Point(0, 0, 0, {label: 'o'}),
|
|
ten: new Point(10, 10, 10, {label: 'ten'}),
|
|
mirror: new Point(20, 0, 0, {mirrored: true})
|
|
}
|
|
|
|
it('params', function() {
|
|
// an empty anchor definition leads to the default point
|
|
check(
|
|
parse({}, 'name')(),
|
|
[0, 0, 0, {}]
|
|
)
|
|
// unexpected check can be disabled
|
|
check(
|
|
parse({unexpected_key: true}, 'name', {}, false)(),
|
|
[0, 0, 0, {}]
|
|
)
|
|
// default point can be overridden
|
|
check(
|
|
parse({}, 'name', {}, true, new Point(1, 1))(),
|
|
[1, 1, 0, {}]
|
|
)
|
|
})
|
|
|
|
it('ref', function() {
|
|
// single reference
|
|
check(
|
|
parse({ref: 'o'}, 'name', points)(),
|
|
[0, 0, 0, {label: 'o'}]
|
|
)
|
|
// average of multiple references (metadata gets ignored)
|
|
check(
|
|
parse({ref: ['o', 'ten']}, 'name', points)(),
|
|
[5, 5, 5, {}]
|
|
)
|
|
})
|
|
|
|
it('shift', function() {
|
|
// normal shift
|
|
check(
|
|
parse({shift: [1, 1]}, 'name')(),
|
|
[1, 1, 0, {}]
|
|
)
|
|
// shift should respect mirrored points (and invert along the x axis)
|
|
check(
|
|
parse({ref: 'mirror', shift: [1, 1]}, 'name', points)(),
|
|
[19, 1, 0, {mirrored: true}]
|
|
)
|
|
})
|
|
|
|
it('orient', function() {
|
|
// an orient by itself is equal to rotation
|
|
check(
|
|
parse({orient: 10}, 'name')(),
|
|
[0, 0, 10, {}]
|
|
)
|
|
// orient acts before shifting
|
|
// so when we orient to the right, an upward shift goes to the right
|
|
check(
|
|
parse({orient: -90, shift: [0, 1]}, 'name')(),
|
|
[1, 0, -90, {}]
|
|
)
|
|
})
|
|
|
|
it('rotate', function() {
|
|
// basic rotation
|
|
check(
|
|
parse({rotate: 10}, 'name')(),
|
|
[0, 0, 10, {}]
|
|
)
|
|
// rotate acts *after* shifting
|
|
// so even tho we rotate to the right, an upward shift does go upward
|
|
check(
|
|
parse({shift: [0, 1], rotate: -90}, 'name')(),
|
|
[0, 1, -90, {}]
|
|
)
|
|
})
|
|
|
|
it('affect', function() {
|
|
// affect can restrict which point fields (x, y, r) are affected by the transformations
|
|
check(
|
|
parse({orient: -90, shift: [0, 1], rotate: 10, affect: 'r'}, 'name')(),
|
|
[0, 0, -80, {}]
|
|
)
|
|
check(
|
|
parse({orient: -90, shift: [0, 1], rotate: 10, affect: 'xy'}, 'name')(),
|
|
[1, 0, 0, {}]
|
|
)
|
|
// affects can also be arrays (example same as above)
|
|
check(
|
|
parse({orient: -90, shift: [0, 1], rotate: 10, affect: ['x', 'y']}, 'name')(),
|
|
[1, 0, 0, {}]
|
|
)
|
|
})
|
|
|
|
it('array', function() {
|
|
// basic multi-anchor
|
|
check(
|
|
parse([
|
|
{shift: [1, 1]},
|
|
{rotate: 10}
|
|
], 'name')(),
|
|
[1, 1, 10, {}]
|
|
)
|
|
})
|
|
}) |