sku-pg
Version:
Skulpt is a Javascript implementation of Python 2.x. Python that runs in your browser!
255 lines (214 loc) • 8.89 kB
HTML
<html>
<!--
Copyright 2006 The Closure Library Authors. All Rights Reserved.
Use of this source code is governed by the Apache License, Version 2.0.
See the COPYING file for details.
-->
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Closure Unit Tests - goog.ds.FastDataNode</title>
<script src="../base.js"></script>
<script>
goog.require('goog.array');
goog.require('goog.ds.DataManager');
goog.require('goog.ds.Expr');
goog.require('goog.ds.FastDataNode');
goog.require('goog.ds.JsDataSource');
goog.require('goog.testing.jsunit');
</script>
<script>
var simpleObject;
var complexObject;
var dataChangeEvents;
function setUp() {
simpleObject = {Name: "Jon Doe", Email: "jon.doe@gmail.com"};
complexObject = {Name: "Jon Doe", Email: "jon.doe@gmail.com",
Emails: [{Address: "jon.doe@gmail.com", Type: "Home"},
{Address: "jon.doe@workplace.com", Type: "Work"}],
GroupIds: [23, 42]};
var dm = goog.ds.DataManager.getInstance();
dataChangeEvents = [];
dm.fireDataChange = function(dataPath) {
dataChangeEvents.push(dataPath);
};
};
function tearDown() {
goog.ds.DataManager.clearInstance();
};
function testGetChildNodeValue() {
var node = new goog.ds.FastDataNode(simpleObject, "Simple");
var value = node.getChildNodeValue("Name");
assert(goog.isString(value));
assertEquals("Jon Doe", value);
};
function testDataNameAndPath() {
var node = new goog.ds.FastDataNode(simpleObject, "Simple");
assertEquals("DataName should be 'Simple'", "Simple", node.getDataName());
assertEquals("DataPath should be 'Simple'", "Simple", node.getDataPath());
};
function testStringChildNode() {
var node = goog.ds.FastDataNode.fromJs(simpleObject, "Simple");
var name = node.getChildNode("Name");
var email = node.getChildNode("Email");
assertEquals("Jon Doe", name.get());
assertEquals("jon.doe@gmail.com", email.get());
assertEquals("Name", name.getDataName());
assertEquals("Simple/Name", name.getDataPath());
assertEquals("Email", email.getDataName());
assertEquals("Simple/Email", email.getDataPath());
};
function testGetChildNodes() {
var node = goog.ds.FastDataNode.fromJs(simpleObject, "Simple");
var children = node.getChildNodes();
assertEquals(2, children.getCount());
var childValues = [];
for (var i=0; i < 2; ++i) {
childValues.push(children.getByIndex(i).get());
}
goog.array.sort(childValues);
assertEquals("Jon Doe", childValues[0]);
assertEquals("jon.doe@gmail.com", childValues[1]);
};
function testGetDistinguishesBetweenOverloads() {
var node = goog.ds.FastDataNode.fromJs(simpleObject, "Simple");
assertEquals(node, node.get());
assertEquals("Jon Doe", node.getChildNodes().get("Name").get());
};
function testGetChildNodesForPrimitiveNodes() {
var node = goog.ds.FastDataNode.fromJs(simpleObject, "Simple");
var children = node.getChildNode("Name").getChildNodes();
assertEquals(0, children.getCount());
};
function testFastListNode() {
var node = goog.ds.FastDataNode.fromJs(complexObject, "Object");
assertEquals("Jon Doe", node.getChildNodeValue("Name"));
var emails = node.getChildNode("Emails");
assertEquals("jon.doe@gmail.com",
emails.getChildNode("[0]").getChildNodeValue("Address"));
assertEquals("jon.doe@workplace.com",
emails.getChildNode("[1]").getChildNodeValue("Address"));
assertEquals("Object/Emails/[0]/Address",
emails.getChildNode("[0]").getChildNode("Address").getDataPath());
var groups = node.getChildNode("GroupIds");
assertEquals(23, groups.getChildNode("[0]").get());
assertEquals(42, groups.getChildNodeValue("[1]"));
var childValues = emails.getChildNodes();
assertEquals(2, childValues.getCount());
assertEquals("jon.doe@gmail.com",
childValues.getByIndex(0).getChildNodeValue("Address"));
};
function testChildNodeValueForNonexistantAttribute() {
var node = goog.ds.FastDataNode.fromJs(complexObject, "Object");
assertNull(node.getChildNodeValue("DoesNotExist"));
assertNull(node.getChildNode("Emails").getChildNodeValue("[666]"));
};
function testAllChildrenSelector() {
var node = goog.ds.FastDataNode.fromJs(complexObject, "Object");
var allChildren = node.getChildNodes("*");
assertEquals(4, allChildren.getCount());
// not implemented, yet
// var nameChild = node.getChildNodes("Name");
// assertEquals(1, allChildren.getCount());
};
function testExpression() {
var node = goog.ds.FastDataNode.fromJs(complexObject, "Object");
assertEquals("Jon Doe",
goog.ds.Expr.create("Name").getValue(node));
assertEquals("jon.doe@workplace.com",
goog.ds.Expr.create("Emails/[1]/Address").getNode(node).get());
var emails = goog.ds.Expr.create("Emails/*").getNodes(node);
assertEquals(2, emails.getCount());
assertEquals("jon.doe@workplace.com",
emails.getByIndex(1).getChildNodeValue("Address"));
};
function testModifyNode() {
var node = goog.ds.FastDataNode.fromJs(complexObject, "Object");
node.getChildNode("Name").set("Foo Bar");
assertEquals("Foo Bar", node.getChildNodeValue("Name"));
};
function testClone() {
var node = goog.ds.FastDataNode.fromJs(complexObject, "Object");
var clone = node.clone();
node.getChildNode("Name").set("Foo Bar");
assertEquals("Jon Doe", clone.getChildNodeValue("Name"));
var expr = goog.ds.Expr.create("Emails/[1]/Address");
expr.getNode(clone).set("jon@doe.com");
assertEquals("jon.doe@workplace.com", expr.getValue(node));
assertEquals("jon@doe.com", expr.getValue(clone));
};
function testSetChildNodeOnList() {
var list = goog.ds.FastDataNode.fromJs([], "list");
var node = goog.ds.FastDataNode.fromJs({Id: "42", Name: "Foo"}, "42",
list);
list.setChildNode("42", node);
assertEquals(node, list.getChildNode("42"));
assertEquals(node, list.getChildNodes().getByIndex(0));
assertEquals(node, list.getChildNodes().get("42"));
}
function testCreateNewValueWithSetChildNode() {
var node = goog.ds.FastDataNode.fromJs({}, "object");
node.setChildNode("Foo", "Bar");
assertEquals("Bar", node.getChildNodeValue("Foo"));
};
function testSetChildNotWithNull_object() {
var node = new goog.ds.FastDataNode({Foo: "Bar"}, "test");
node.setChildNode("Foo", null);
assertNull("node should not have a Foo child", node.getChildNode("Foo"));
assertEquals("node should not have any children",
0, node.getChildNodes().getCount());
};
function testSetChildNotWithNull_list() {
var list = goog.ds.FastDataNode.fromJs([], "list");
list.setChildNode("foo", "bar");
list.setChildNode("gee", "wizz");
assertEquals("bar", list.getChildNodeValue("foo"));
assertEquals("wizz", list.getChildNodes().getByIndex(1).get());
list.setChildNode("foo", null);
assertEquals(1, list.getChildNodes().getCount());
assertEquals("wizz", list.getChildNodeValue("gee"));
assertEquals("wizz", list.getChildNodes().getByIndex(0).get());
};
function testNodeListIndexesOnId() {
var list = goog.ds.FastDataNode.fromJs([
{id: "^Freq", value: "foo"}], "list");
assertEquals("foo",
list.getChildNode("^Freq").getChildNodeValue("value"));
list.setChildNode("^Temp", {id: "^Temp", value: "bar"});
assertEquals("bar",
list.getChildNode("^Temp").getChildNodeValue("value"));
};
function verifyDataChangeEvents(expected) {
assertEquals(expected.length, dataChangeEvents.length);
for (var i=0; i < expected.length; ++i) {
assertEquals(expected[i], dataChangeEvents[i]);
}
dataChangeEvents = [];
};
function testFireDataChangeOnSet() {
var node = new goog.ds.FastDataNode(simpleObject, "Simple");
node.getChildNode("Name").set("Foo Bar");
verifyDataChangeEvents(["Simple/Name"]);
};
function testFireDataChangeOnSetChildNode_object() {
var node = new goog.ds.FastDataNode(simpleObject, "Simple");
node.setChildNode("Name", "Foo Bar");
node.setChildNode("Email", null);
verifyDataChangeEvents(["Simple/Name", "Simple/Email"]);
};
function testFireDataChangeOnSetChildNode_list() {
var node = new goog.ds.FastDataNode(complexObject, "Node");
node.getChildNode("GroupIds").setChildNode("[0]", 1001);
verifyDataChangeEvents(["Node/GroupIds/[0]"]);
node.getChildNode("GroupIds").getChildNodes().add(1002);
verifyDataChangeEvents(["Node/GroupIds/[2]", "Node/GroupIds",
"Node/GroupIds/count()"]);
node.getChildNode("GroupIds").setChildNode("foo", 1003);
verifyDataChangeEvents(["Node/GroupIds/foo", "Node/GroupIds",
"Node/GroupIds/count()"]);
};
</script>
</head>
<body>
</body>
</html>