mirror of
https://github.com/scratchfoundation/paper.js.git
synced 2024-12-28 17:02:24 -05:00
147 lines
4.3 KiB
JavaScript
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);
|
|
});
|