konva/test/unit/Arrow-test.ts

149 lines
4.4 KiB
TypeScript
Raw Normal View History

2021-04-30 22:24:27 +08:00
import { assert } from 'chai';
2021-05-05 22:19:24 +08:00
import { addStage, Konva, cloneAndCompareLayer } from './test-utils';
2021-04-30 22:24:27 +08:00
describe('Arrow', function () {
// ======================================================
2021-04-30 22:24:27 +08:00
it('add arrow', function () {
var stage = addStage();
var layer = new Konva.Layer();
var arrow = new Konva.Arrow({
points: [73, 160, 340, 23],
stroke: 'blue',
fill: 'blue',
strokeWidth: 1,
draggable: true,
2020-05-08 22:59:35 +08:00
tension: 0,
});
2014-08-27 12:43:33 +08:00
layer.add(arrow);
stage.add(layer);
2014-08-27 12:43:33 +08:00
2021-04-30 22:24:27 +08:00
arrow.points([1, 2, 3, 4]);
assert.equal(arrow.points()[0], 1);
2014-08-27 12:43:33 +08:00
2021-04-30 22:24:27 +08:00
arrow.points([5, 6, 7, 8]);
assert.equal(arrow.points()[0], 5);
arrow.points([73, 160, 340, 23, 50, 100, 80, 50]);
arrow.tension(0);
2014-08-27 12:43:33 +08:00
arrow.pointerLength(15);
assert.equal(arrow.pointerLength(), 15);
2014-08-27 12:43:33 +08:00
arrow.pointerWidth(15);
assert.equal(arrow.pointerWidth(), 15);
2014-08-27 12:43:33 +08:00
assert.equal(arrow.getClassName(), 'Arrow');
2014-08-27 12:43:33 +08:00
layer.draw();
});
2018-04-02 11:47:34 +08:00
2021-04-30 22:24:27 +08:00
it('do not draw dash for head', function () {
2018-04-02 11:47:34 +08:00
var stage = addStage();
var layer = new Konva.Layer();
var arrow = new Konva.Arrow({
points: [50, 50, 100, 100],
stroke: 'red',
fill: 'blue',
strokeWidth: 5,
pointerWidth: 20,
pointerLength: 20,
2020-05-08 22:59:35 +08:00
dash: [5, 5],
2018-04-02 11:47:34 +08:00
});
layer.add(arrow);
stage.add(layer);
var trace = layer.getContext().getTrace();
// console.log(trace);
assert.equal(
trace,
'clearRect(0,0,578,200);save();transform(1,0,0,1,0,0);beginPath();moveTo(50,50);lineTo(100,100);setLineDash(5,5);lineDashOffset=0;lineWidth=5;strokeStyle=red;stroke();save();beginPath();translate(100,100);rotate(0.785);moveTo(0,0);lineTo(-20,10);lineTo(-20,-10);closePath();restore();setLineDash();fillStyle=blue;fill();lineWidth=5;strokeStyle=red;stroke();restore();'
);
});
2018-05-04 14:56:08 +08:00
2021-04-30 22:24:27 +08:00
it('direction with tension', function () {
2018-05-04 14:56:08 +08:00
var stage = addStage();
var layer = new Konva.Layer();
var arrow = new Konva.Arrow({
points: [50, 50, 100, 50, 100, 100],
stroke: 'red',
fill: 'red',
tension: 1,
2020-05-08 22:59:35 +08:00
pointerAtBeginning: true,
2018-05-04 14:56:08 +08:00
});
layer.add(arrow);
stage.add(layer);
2021-05-06 21:41:34 +08:00
var trace = layer.getContext().getTrace(false, true);
2018-05-04 14:56:08 +08:00
assert.equal(
trace,
2021-05-06 21:41:34 +08:00
'clearRect(0,0,578,200);save();transform(1,0,0,1,0,0);beginPath();moveTo(50,50);quadraticCurveTo(75,25,100,50);quadraticCurveTo(125,75,100,100);lineWidth=2;strokeStyle=red;stroke();save();beginPath();translate(100,100);rotate(2);moveTo(0,0);lineTo(-10,5);lineTo(-10,-5);closePath();restore();save();translate(50,50);rotate(2);moveTo(0,0);lineTo(-10,5);lineTo(-10,-5);closePath();restore();setLineDash();fillStyle=red;fill();lineWidth=2;strokeStyle=red;stroke();restore();'
2019-08-07 12:42:35 +08:00
);
});
2021-04-30 22:24:27 +08:00
it('direction with tension 2', function () {
2019-08-07 12:42:35 +08:00
var stage = addStage();
var layer = new Konva.Layer();
var arrow = new Konva.Arrow({
2021-05-06 21:41:34 +08:00
points: [
79.57486136783733,
63.27171903881701,
87.33826247689463,
80.73937153419593,
124.99075785582254,
82.29205175600738,
141.68207024029573,
107.52310536044362,
165.74861367837337,
104.80591497227356,
],
2019-08-07 12:42:35 +08:00
stroke: 'red',
fill: 'red',
tension: 1,
pointerWidth: 10,
2020-05-08 22:59:35 +08:00
pointerAtBeginning: true,
2019-08-07 12:42:35 +08:00
});
layer.add(arrow);
stage.add(layer);
2021-05-06 21:41:34 +08:00
var trace = layer.getContext().getTrace(false, true);
2019-08-07 12:42:35 +08:00
assert.equal(
trace,
2021-05-06 21:41:34 +08:00
'clearRect(0,0,578,200);save();transform(1,0,0,1,0,0);beginPath();moveTo(79,63);quadraticCurveTo(72,74,87,80);bezierCurveTo(117,93,94,67,124,82);bezierCurveTo(149,94,119,95,141,107);quadraticCurveTo(159,117,165,104);lineWidth=2;strokeStyle=red;stroke();save();beginPath();translate(165,104);rotate(5);moveTo(0,0);lineTo(-10,5);lineTo(-10,-5);closePath();restore();save();translate(79,63);rotate(4);moveTo(0,0);lineTo(-10,5);lineTo(-10,-5);closePath();restore();setLineDash();fillStyle=red;fill();lineWidth=2;strokeStyle=red;stroke();restore();'
2018-05-04 14:56:08 +08:00
);
});
2021-04-30 22:24:27 +08:00
it('test cache', function () {
var stage = addStage();
var layer = new Konva.Layer();
var arrow = new Konva.Arrow({
points: [50, 50, 150, 50],
stroke: 'blue',
fill: 'blue',
2020-03-29 22:34:47 +08:00
// large stroke width will not work :(
2020-04-07 21:46:50 +08:00
strokeWidth: 1,
draggable: true,
2020-05-08 22:59:35 +08:00
tension: 0,
});
layer.add(arrow);
2020-03-29 22:34:47 +08:00
stage.add(layer);
2020-03-29 22:34:47 +08:00
arrow.cache();
layer.draw();
cloneAndCompareLayer(layer, 200);
});
});