123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240 |
- // Copyright 2006 The Closure Library Authors. All Rights Reserved.
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS-IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- goog.provide('goog.ds.JsDataSourceTest');
- goog.setTestOnly('goog.ds.JsDataSourceTest');
- goog.require('goog.dom.xml');
- goog.require('goog.ds.DataManager');
- goog.require('goog.ds.JsDataSource');
- goog.require('goog.ds.SortedNodeList');
- goog.require('goog.ds.XmlDataSource');
- goog.require('goog.testing.jsunit');
- var xmlDs;
- var jsDs;
- function setUp() {
- var xmltext = '<test><node value="5">some data</node></test>';
- var doc = goog.dom.xml.loadXml(xmltext);
- xmlDs = new goog.ds.XmlDataSource(doc.documentElement, null, null);
- var jsObj = {
- node: {
- '@value': 5,
- '#text': 'some data',
- name: 'bob',
- age: 35,
- alive: true,
- aliases: ['bobbo', 'robbo']
- }
- };
- jsDs = new goog.ds.JsDataSource(jsObj, 'JSDS', null);
- }
- function testJsDataSource() {
- var child = jsDs.getChildNode('node');
- var attr = child.getChildNode('@value');
- var text = child.getChildNode('#text');
- var name = child.getChildNode('name');
- var age = child.getChildNode('age');
- var alive = child.getChildNode('alive');
- var aliases = child.getChildNode('aliases');
- assertEquals('Attribute get', attr.get(), 5);
- assertEquals('Text get', text.get(), 'some data');
- assertEquals('string node get', name.get(), 'bob');
- assertEquals('Number get', age.get(), 35);
- assertEquals('Boolean get', alive.get(), true);
- assertEquals('Array value', aliases.get().getByIndex(1).get(), 'robbo');
- assertEquals('Array length', aliases.get().getCount(), 2);
- assertEquals('Datasource name', jsDs.getDataName(), 'JSDS');
- }
- function testXmlDataSource() {
- var child = xmlDs.getChildNode('node');
- var attr = child.getChildNode('@value');
- var text = child.getChildNode('#text');
- assertEquals('Attribute get', attr.get(), '5');
- assertEquals('Text get', text.get(), 'some data');
- assertEquals('Attr child node value', child.getChildNodeValue('@value'), '5');
- }
- function testChildNodeValue() {
- var child = jsDs.getChildNode('node');
- assertEquals('Child node value', child.getChildNodeValue('age'), 35);
- }
- function testJsSet() {
- assertNull('Get new child node is null', jsDs.getChildNode('Newt'));
- jsDs.setChildNode('Newt', 'A newt');
- assertEquals(
- 'New string child node', jsDs.getChildNode('Newt').get(), 'A newt');
- jsDs.setChildNode('Number', 35);
- assertEquals('New number child node', jsDs.getChildNodeValue('Number'), 35);
- var numNode = jsDs.getChildNode('Number');
- jsDs.getChildNode('Number').set(38);
- assertEquals('Changed number child node', numNode.get(), 38);
- assertThrows('Shouldn\'t be able to set a group node yet', function() {
- jsDs.set(5);
- });
- }
- function testDataManager() {
- var dm = goog.ds.DataManager.getInstance();
- assertNotNull('DataManager exists', dm);
- assertTrue('No datasources yet', dm.getChildNodes().getCount() == 0);
- dm.addDataSource(jsDs, true);
- assertTrue('One data source', dm.getChildNodes().getCount() == 1);
- assertEquals(
- 'Renamed to global prefix', '$JSDS',
- dm.getChildNodes().getByIndex(0).getDataName());
- }
- /**
- * Constructs an array of data nodes from a javascript array.
- */
- function createDataNodesArrayFromJs(jsObj) {
- var jsds = new goog.ds.JsDataSource(jsObj, 'MYJSDS', null);
- var dataNodes = jsds.getChildNodes();
- var dataNodesArray = [];
- var dataNodesCount = dataNodes.getCount();
- for (var i = 0; i < dataNodesCount; i++) {
- dataNodesArray[i] = dataNodes.getByIndex(i);
- }
- return dataNodesArray;
- }
- function testSortedNodeListConstruction() {
- var dataNodesArray = createDataNodesArrayFromJs([
- {'Value': 2, 'id': 'C'}, {'Value': 0, 'id': 'A'}, {'Value': 1, 'id': 'B'},
- {'Value': 3, 'id': 'D'}
- ]);
- var sortedNodeList = new goog.ds.SortedNodeList(valueSort, dataNodesArray);
- assertEquals('SortedNodeList count', 4, sortedNodeList.getCount());
- var expectedValues = [0, 1, 2, 3];
- for (var i = 0; i < expectedValues.length; i++) {
- assertEquals(
- 'SortedNodeList position after construction', expectedValues[i],
- sortedNodeList.getByIndex(i).getChildNode('Value').get());
- }
- }
- function testSortedNodeListAdd() {
- var sortedNodeList = new goog.ds.SortedNodeList(valueSort);
- var dataNodesArray = createDataNodesArrayFromJs([
- {'Value': 2, 'id': 'C'}, {'Value': 0, 'id': 'A'}, {'Value': 1, 'id': 'B'},
- {'Value': 3, 'id': 'D'}
- ]);
- for (var i = 0; i < dataNodesArray.length; i++) {
- sortedNodeList.add(dataNodesArray[i]);
- }
- assertEquals('SortedNodeList count', 4, sortedNodeList.getCount());
- var expectedValues = [0, 1, 2, 3];
- for (var i = 0; i < expectedValues.length; i++) {
- assertEquals(
- 'SortedNodeList position after construction', expectedValues[i],
- sortedNodeList.getByIndex(i).getChildNode('Value').get());
- }
- }
- function testSortedNodeListAppend() {
- var sortedNodeList = new goog.ds.SortedNodeList(valueSort);
- var dataNodesArray = createDataNodesArrayFromJs([
- {'Value': 2, 'id': 'C'}, {'Value': 0, 'id': 'A'}, {'Value': 1, 'id': 'B'},
- {'Value': 3, 'id': 'D'}
- ]);
- for (var i = 0; i < dataNodesArray.length; i++) {
- sortedNodeList.append(dataNodesArray[i]);
- }
- assertEquals(
- 'SortedNodeList count', dataNodesArray.length, sortedNodeList.getCount());
- var expectedValues = [2, 0, 1, 3];
- for (var i = 0; i < expectedValues.length; i++) {
- assertEquals(
- 'SortedNodeList position after construction', expectedValues[i],
- sortedNodeList.getByIndex(i).getChildNode('Value').get());
- }
- }
- function testSortedNodeListSet() {
- var dataNodesArray = createDataNodesArrayFromJs([
- {'Value': 4, 'id': 'C'}, {'Value': 0, 'id': 'A'}, {'Value': 2, 'id': 'B'},
- {'Value': 6, 'id': 'D'}
- ]);
- var sortedNodeList = new goog.ds.SortedNodeList(valueSort, dataNodesArray);
- assertEquals('SortedNodeList count', 4, sortedNodeList.getCount());
- // test set that replaces an existing node
- var replaceNode = createDataNodesArrayFromJs([{'Value': 5, 'id': 'B'}])[0];
- sortedNodeList.setNode('B', replaceNode);
- assertEquals('SortedNodeList count', 4, sortedNodeList.getCount());
- assertEquals(
- 'SortedNodeList replacement node correct', replaceNode,
- sortedNodeList.get('B'));
- var expectedValues = [0, 4, 5, 6];
- for (var i = 0; i < expectedValues.length; i++) {
- assertEquals(
- 'SortedNodeList position after set', expectedValues[i],
- sortedNodeList.getByIndex(i).getChildNode('Value').get());
- }
- // test a set that adds a new node
- var addedNode = createDataNodesArrayFromJs([{'Value': 1, 'id': 'E'}])[0];
- sortedNodeList.setNode('E', addedNode);
- assertEquals('SortedNodeList count', 5, sortedNodeList.getCount());
- assertEquals(
- 'SortedNodeList added node correct', addedNode, sortedNodeList.get('E'));
- var expectedValues = [0, 1, 4, 5, 6];
- for (var i = 0; i < expectedValues.length; i++) {
- assertEquals(
- 'SortedNodeList position after set', expectedValues[i],
- sortedNodeList.getByIndex(i).getChildNode('Value').get());
- }
- }
- function valueSort(a, b) {
- var valueA = a.getChildNode('Value').get();
- var valueB = b.getChildNode('Value').get();
- return (valueA - valueB);
- }
|