paper.js/test/tests/Layer.js
2020-05-23 22:24:42 +02:00

147 lines
4.3 KiB
JavaScript

/*
* Paper.js - The Swiss Army Knife of Vector Graphics Scripting.
* http://paperjs.org/
*
* Copyright (c) 2011 - 2020, Jürg Lehni & Jonathan Puckey
* http://juerglehni.com/ & https://puckey.studio/
*
* Distributed under the MIT license. See LICENSE file for details.
*
* All rights reserved.
*/
QUnit.module('Layer');
test('#previousSibling / #nextSibling', function() {
var project = paper.project;
var firstLayer = project.activeLayer;
var secondLayer = new Layer();
equals(function() {
return secondLayer.previousSibling == firstLayer;
}, true);
equals(function() {
return secondLayer.nextSibling == null;
}, true);
// Move another layer into secondLayer and check nextSibling /
// previousSibling:
var path = new Path();
var thirdLayer = new Layer();
secondLayer.insertChild(0, thirdLayer);
equals(function() {
return secondLayer.children.length;
}, 2);
equals(function() {
return thirdLayer.nextSibling === path;
}, true);
secondLayer.addChild(thirdLayer);
equals(function() {
return thirdLayer.nextSibling;
}, null);
equals(function() {
return thirdLayer.previousSibling === path;
}, true);
equals(function() {
return project.layers.length;
}, 2);
firstLayer.addChild(secondLayer);
equals(function() {
return project.layers.length;
}, 1);
});
test('#insertAbove() / #insertBelow()', function() {
var project = paper.project;
var firstLayer = project.activeLayer;
firstLayer.name = 'first';
var secondLayer = new Layer();
secondLayer.name = 'second';
var thirdLayer = new Layer();
thirdLayer.name = 'third';
thirdLayer.insertBelow(firstLayer);
equals(function() {
return thirdLayer.previousSibling == null;
}, true);
equals(function() {
return thirdLayer.nextSibling == firstLayer;
}, true);
secondLayer.insertBelow(firstLayer);
equals(function() {
return secondLayer.previousSibling == thirdLayer;
}, true);
equals(function() {
return secondLayer.nextSibling == firstLayer;
}, true);
var path = new Path();
firstLayer.addChild(path);
// move the layer above the path, inside the firstLayer.
// 'Above' means visually appearing on top, thus with a larger index.
secondLayer.insertAbove(path);
equals(function() {
return path.nextSibling == secondLayer;
}, true);
equals(function() {
return secondLayer.parent == firstLayer;
}, true);
// There should now only be two layers left:
equals(function() {
return project.layers.length;
}, 2);
});
test('#addChild() / #insertBelow() with nesting', function() {
var project = paper.project;
var firstLayer = project.activeLayer;
var secondLayer = new Layer();
// There should be two layers now in project.layers
equals(function() {
return project.layers.length;
}, 2);
firstLayer.addChild(secondLayer);
equals(function() {
return secondLayer.parent == firstLayer;
}, true);
// There should only be the firsLayer now in project.layers
equals(function() {
return project.layers.length;
}, 1);
equals(function() {
return project.layers[0] == firstLayer;
}, true);
// Now move secondLayer bellow the first again, in which case it should
// reappear in project.layers
secondLayer.insertBelow(firstLayer);
// There should be two layers now in project.layers again now
equals(function() {
return project.layers.length;
}, 2);
equals(function() {
return project.layers[0] == secondLayer
&& project.layers[1] == firstLayer;
}, true);
});
test('#remove() with named layers', function(){
var name = 'my layer';
var layer1 = new Layer({name: name });
var layer2 = new Layer({name: name });
var removeCount = 0;
while (project.layers[name]) {
project.layers[name].remove();
if (++removeCount > 2)
break;
}
equals(removeCount, 2,
'project.layers[name].remove(); should be called twice');
});
test('#bounds with nested empty items', function() {
var item = new Path.Rectangle(new Point(10,10), new Size(10));
new Group(new Group());
equals(item.bounds, project.activeLayer.bounds);
});