import { Adsorber } from './adsorber'; import { Rectangle } from '@gedit/math'; import * as chai from 'chai'; const expect = chai.expect; const target = new Rectangle(0, 0, 100, 100); describe('Playground.Adsorber', () => { let adsorber: Adsorber; const DELTA = 20; beforeEach(() => { adsorber = new Adsorber({ adSorbDelta: DELTA }); }); it('calculateDelta empty', () => { expect(adsorber.calculateDelta(target, [], [])).to.eql({ x: undefined, y: undefined }); }); it ('calculateDelta with refs far away', () => { const refs: Rectangle[] = [ new Rectangle(-1040, -1040, 20, 20), new Rectangle(1040, 1040, 20, 20) ]; expect(adsorber.calculateDelta(target, refs, [])).to.eql({ x: undefined, y: undefined}); }); it ('calculateDelta with refs nearest', () => { const refs: Rectangle[] = [ new Rectangle(-90, -90, 20, 20), new Rectangle(10, 10, 20, 20) ]; // 右边 expect(adsorber.calculateDelta(target, refs, [])).to.eql({ x: 10, y: 10}); const refs2: Rectangle[] = [ new Rectangle(-1, -1, 20, 20), new Rectangle(10, 10, 20, 20) ]; // 左边 expect(adsorber.calculateDelta(target, refs2, [])).to.eql({ x: -1, y: -1 }); const refs3: Rectangle[] = [ new Rectangle(-7, -7, 20, 20), new Rectangle(10, 10, 20, 20) ]; // 中线 expect(adsorber.calculateDelta(target, refs3, [])).to.eql({ x: 3, y: 3 }); }); it ('calculateDelta with snaplines', () => { const refs: Rectangle[] = [ new Rectangle(-5, -5, 20, 20), new Rectangle(10, 10, 20, 20) ]; const lines: Adsorber.Line[] = [{ type: Adsorber.Direction.HORIZONTAL, pos: 104, }, { type: Adsorber.Direction.VERTICAL, pos: 103, }]; expect(adsorber.calculateDelta(target, refs, lines)).to.eql({ x: 4, y: 3 }); }); /* it('calculateDelta escape', () => { const refs: Rectangle[] = [ new Rectangle(10, 10, 20, 20) ] expect(adsorber.calculateDelta(target, refs, [], { x: 0, y: 0 })).to.eql({ x: 10, y: 10 }) // 吸附中,未逃逸 expect(adsorber.calculateDelta(target, refs, [], { x: -10, y: -10 })).to.eql({ x: 0, y: 0}) expect(adsorber.calculateDelta(target, refs, [], { x: -DELTA, y: -DELTA })).to.eql({ x: 0, y: 0}) // 解除吸附,成功逃逸 expect(adsorber.calculateDelta(target, refs, [], { x: -(DELTA + 1), y: -(DELTA + 1) })).to.eql({ x: undefined, y: undefined }) }) */ });