Free Position tests asserted
This commit is contained in:
@@ -154,6 +154,7 @@
|
||||
<div id="testReconnectFreeNode4" class="col"></div>
|
||||
<div id="testReconnectFreeNode5" class="col"></div>
|
||||
<div id="testReconnectFreeNode6" class="col"></div>
|
||||
<div id="testReconnectFreeNode7" class="col"></div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
@@ -67,48 +67,56 @@ mindplot.layout.FreeTestSuite = new Class({
|
||||
manager.layout();
|
||||
manager.plot("testFreePosition1", {width:1400, height:600});
|
||||
|
||||
console.log("\tmove node 12 to (300,30)");
|
||||
console.log("\tmove node 12 to (300,30):");
|
||||
manager.moveNode(12, {x:300, y:30});
|
||||
manager.layout();
|
||||
manager.layout(true);
|
||||
manager.plot("testFreePosition2", {width:1400, height:600});
|
||||
this._assertFreePosition(manager, 12, {x:300, y:30})
|
||||
|
||||
console.log("\tmove node 13 to (340,180)");
|
||||
console.log("\tmove node 13 to (340,180):");
|
||||
manager.moveNode(13, {x:340, y:180});
|
||||
manager.layout(true);
|
||||
manager.plot("testFreePosition3", {width:1400, height:600});
|
||||
this._assertFreePosition(manager, 13, {x:340, y:180});
|
||||
|
||||
console.log("\tmove node 11 to (250,-50)");
|
||||
console.log("\tmove node 11 to (250,-50):");
|
||||
manager.moveNode(11, {x:250, y:-50});
|
||||
manager.layout(true);
|
||||
manager.plot("testFreePosition4", {width:1400, height:600});
|
||||
this._assertFreePosition(manager, 11, {x:250, y:-50});
|
||||
|
||||
console.log("\tmove node 7 to (350,-190)");
|
||||
console.log("\tmove node 7 to (350,-190):");
|
||||
manager.moveNode(7, {x:350, y:-190});
|
||||
manager.layout(true);
|
||||
manager.plot("testFreePosition5", {width:1400, height:600});
|
||||
this._assertFreePosition(manager, 7, {x:350, y:-190});
|
||||
|
||||
console.log("\tadd node 23 to 12:");
|
||||
manager.addNode(23, mindplot.layout.TestSuite.NODE_SIZE, position);
|
||||
manager.connectNode(12,23,3);
|
||||
manager.layout(true);
|
||||
manager.plot("testFreePosition6", {width:1400, height:600});
|
||||
this._assertFreePosition(manager, null, null);
|
||||
|
||||
console.log("\tmove node 4 to (-300, 190)");
|
||||
console.log("\tmove node 4 to (-300, 190):");
|
||||
manager.moveNode(4, {x:-300, y:190});
|
||||
manager.layout(true);
|
||||
manager.plot("testFreePosition7", {width:1400, height:600});
|
||||
this._assertFreePosition(manager, 4, {x:-300, y:190});
|
||||
|
||||
console.log("\tadd node 24 to 3:");
|
||||
manager.addNode(24, mindplot.layout.TestSuite.NODE_SIZE, position);
|
||||
manager.connectNode(3,24,3);
|
||||
manager.layout(true);
|
||||
manager.plot("testFreePosition8", {width:1400, height:600});
|
||||
this._assertFreePosition(manager, null, null);
|
||||
|
||||
console.log("\tadd node 25 to 17:");
|
||||
manager.addNode(25, mindplot.layout.TestSuite.NODE_SIZE, position);
|
||||
manager.connectNode(17,25,0);
|
||||
manager.layout(true);
|
||||
manager.plot("testFreePosition9", {width:1400, height:600});
|
||||
this._assertFreePosition(manager, null, null);
|
||||
|
||||
console.log("OK!\n\n");
|
||||
},
|
||||
@@ -209,35 +217,96 @@ mindplot.layout.FreeTestSuite = new Class({
|
||||
manager.moveNode(5, {x:250, y:30});
|
||||
manager.layout();
|
||||
manager.plot("testReconnectFreeNode2", {width:1000, height:400});
|
||||
this._assertFreePosition(manager, 5, {x:250, y:30});
|
||||
|
||||
console.log("\treconnect node 5 to node 2");
|
||||
manager.disconnectNode(5);
|
||||
manager.connectNode(2,5,2);
|
||||
manager.layout();
|
||||
manager.plot("testReconnectFreeNode3", {width:1000, height:400});
|
||||
$assert(manager.find(5).getPosition().y > manager.find(10).getPosition().y &&
|
||||
manager.find(5).getPosition().x == manager.find(10).getPosition().x, "Node 5 is incorrectly positioned"
|
||||
);
|
||||
$assert(manager.find(5).getOrder() == 2, "Node 5 should have order 2");
|
||||
|
||||
console.log("\tmove node 8");
|
||||
manager.moveNode(8, {x:-370, y:60});
|
||||
manager.layout();
|
||||
manager.plot("testReconnectFreeNode4", {width:1000, height:400});
|
||||
this._assertFreePosition(manager, 8, {x:-370, y:60});
|
||||
|
||||
//TODO(gb): fix this. node 11 is not positioned correctly
|
||||
console.log("\treconnect node 5 to node 10");
|
||||
manager.disconnectNode(5);
|
||||
manager.connectNode(10,5,0);
|
||||
manager.layout();
|
||||
manager.plot("testReconnectFreeNode5", {width:1000, height:400});
|
||||
$assert(manager.find(5).getPosition().y == manager.find(10).getPosition().y &&
|
||||
manager.find(5).getPosition().x < manager.find(10).getPosition().x, "Node 5 is incorrectly positioned"
|
||||
);
|
||||
$assert(manager.find(5).getOrder() == 0, "Node 5 should have order 0");
|
||||
|
||||
// console.log("reconnect node 5 to node 3");
|
||||
// manager.disconnectNode(5);
|
||||
// manager.connectNode(3,5,2);
|
||||
// manager.layout();
|
||||
// manager.plot("testReconnectFreeNode6", {width:1000, height:400});
|
||||
console.log("reconnect node 5 to node 3");
|
||||
manager.disconnectNode(5);
|
||||
manager.connectNode(3,5,2);
|
||||
manager.layout();
|
||||
manager.plot("testReconnectFreeNode6", {width:1000, height:400});
|
||||
$assert(manager.find(5).getPosition().y > manager.find(6).getPosition().y &&
|
||||
manager.find(5).getPosition().x == manager.find(6).getPosition().x, "Node 5 is incorrectly positioned"
|
||||
);
|
||||
$assert(manager.find(5).getOrder() == 2, "Node 5 should have order 2");
|
||||
|
||||
// manager.moveNode(8, {x:370, y:30});
|
||||
// manager.layout();
|
||||
// manager.plot("testReconnectFreeNode2", {width:1000, height:400});
|
||||
console.log("\tmove node 8");
|
||||
manager.moveNode(8, {x:370, y:30});
|
||||
manager.layout();
|
||||
manager.plot("testReconnectFreeNode7", {width:1000, height:400});
|
||||
this._assertFreePosition(manager, 8, {x:370, y:30});
|
||||
|
||||
console.log("OK!\n\n");
|
||||
},
|
||||
|
||||
_assertFreePosition: function(manager, id, position) {
|
||||
if (id != null && position.x != null && position.y != null) {
|
||||
var node = manager.find(id);
|
||||
$assert(node.getPosition().x == position.x && node.getPosition().y == position.y,
|
||||
"Freely moved node " + id + " is not left at free position (" + position.x + "," + position.y + "). " +
|
||||
"Actual position: (" + node.getPosition().x + "," + node.getPosition().y + ")");
|
||||
}
|
||||
|
||||
var treeSet = manager._treeSet;
|
||||
treeSet._rootNodes.forEach(function(rootNode) {
|
||||
var heightById = rootNode.getSorter().computeChildrenIdByHeights(treeSet, rootNode);
|
||||
this._assertBranchCollision(treeSet, rootNode, heightById);
|
||||
}, this);
|
||||
},
|
||||
|
||||
_assertBranchCollision: function(treeSet, node, heightById) {
|
||||
var children = treeSet.getChildren(node);
|
||||
var childOfRootNode = treeSet._rootNodes.contains(node);
|
||||
|
||||
children.forEach(function(child) {
|
||||
var height = heightById[child.getId()];
|
||||
var siblings = treeSet.getSiblings(child);
|
||||
if (childOfRootNode) {
|
||||
siblings = siblings.filter(function(sibling) {
|
||||
return (child.getOrder() % 2) == (sibling.getOrder() % 2);
|
||||
})
|
||||
}
|
||||
siblings.forEach(function(sibling) {
|
||||
this._branchesOverlap(child, sibling, heightById);
|
||||
}, this);
|
||||
}, this);
|
||||
|
||||
children.forEach(function(child) {
|
||||
this._assertBranchCollision(treeSet, child, heightById);
|
||||
}, this)
|
||||
},
|
||||
|
||||
_branchesOverlap: function(branchA, branchB, heightById) {
|
||||
var topA = branchA.getPosition().y - heightById[branchA.getId()]/2;
|
||||
var bottomA = branchA.getPosition().y + heightById[branchA.getId()]/2;
|
||||
var topB = branchB.getPosition().y - heightById[branchB.getId()]/2;
|
||||
var bottomB = branchB.getPosition().y + heightById[branchB.getId()]/2;
|
||||
|
||||
$assert(topA >= bottomB || bottomA <= topB, "Branches " + branchA.getId() + " and " + branchB.getId() + " overlap");
|
||||
}
|
||||
});
|
Reference in New Issue
Block a user