Introduce Dygraph.createIterator, and use it to simplify the code in drawTrivialLine...
[dygraphs.git] / auto_tests / tests / utils_test.js
CommitLineData
48e614ac
DV
1/**
2 * @fileoverview Tests for stand-alone functions in dygraph-utils.js
3 *
4 * @author danvdk@gmail.com (Dan Vanderkam)
5 */
6
7var UtilsTestCase = TestCase("utils-tests");
8
9UtilsTestCase.prototype.testUpdate = function() {
10 var a = {
11 a: 1,
12 b: [1, 2, 3],
13 c: { x: 1, y: 2},
14 d: { f: 10, g: 20}
15 };
16 assertEquals(1, a['a']);
17 assertEquals([1, 2, 3], a['b']);
18 assertEquals({x: 1, y: 2}, a['c']);
19 assertEquals({f: 10, g: 20}, a['d']);
20
21 Dygraph.update(a, { c: { x: 2 } });
22 assertEquals({x: 2}, a['c']);
23
24 Dygraph.update(a, { d: null });
25 assertEquals(null, a['d']);
26
27 Dygraph.update(a, { a: 10, b: [1, 2] });
28 assertEquals(10, a['a']);
29 assertEquals([1, 2], a['b']);
30 assertEquals({x: 2}, a['c']);
31 assertEquals(null, a['d']);
32};
33
34UtilsTestCase.prototype.testUpdateDeep = function() {
35 var a = {
36 a: 1,
37 b: [1, 2, 3],
38 c: { x: 1, y: 2},
39 d: { f: 10, g: 20}
40 };
41 assertEquals(1, a['a']);
42 assertEquals([1, 2, 3], a['b']);
43 assertEquals({x: 1, y: 2}, a['c']);
44 assertEquals({f: 10, g: 20}, a['d']);
45
46 Dygraph.updateDeep(a, { c: { x: 2 } });
47 assertEquals({x: 2, y: 2}, a['c']);
48
49 Dygraph.updateDeep(a, { d: null });
50 assertEquals(null, a['d']);
51
52 Dygraph.updateDeep(a, { a: 10, b: [1, 2] });
53 assertEquals(10, a['a']);
54 assertEquals([1, 2], a['b']);
55 assertEquals({x: 2, y: 2}, a['c']);
56 assertEquals(null, a['d']);
57};
58
59UtilsTestCase.prototype.testUpdateDeepDecoupled = function() {
60 var a = {
61 a: 1,
62 b: [1, 2, 3],
63 c: { x: "original", y: 2},
64 };
65
66 var b = {};
67 Dygraph.updateDeep(b, a);
68
69 b.a = 2;
70 assertEquals(1, a.a);
71
72 b.b[0] = 2;
73 assertEquals(1, a.b[0]);
74
75 b.c.x = "new value";
76 assertEquals("original", a.c.x);
77};
7d1afbb9
RK
78
79
80UtilsTestCase.prototype.testIterator_nopredicate = function() {
81 var array = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'];
82 var iter = Dygraph.createIterator(array, 1, 4);
83 assertTrue(iter.hasNext());
84 assertEquals('b', iter.peek());
85 assertEquals('b', iter.next());
86 assertTrue(iter.hasNext());
87
88 assertEquals('c', iter.peek());
89 assertEquals('c', iter.next());
90
91 assertTrue(iter.hasNext());
92 assertEquals('d', iter.next());
93
94 assertTrue(iter.hasNext());
95 assertEquals('e', iter.next());
96
97 assertFalse(iter.hasNext());
98}
99
100UtilsTestCase.prototype.testIterator_predicate = function() {
101 var array = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'];
102 var iter = Dygraph.createIterator(array, 1, 4,
103 function(array, idx) { return array[idx] !== 'd' });
104 assertTrue(iter.hasNext());
105 assertEquals('b', iter.peek());
106 assertEquals('b', iter.next());
107 assertTrue(iter.hasNext());
108
109 assertEquals('c', iter.peek());
110 assertEquals('c', iter.next());
111
112 assertTrue(iter.hasNext());
113 assertEquals('e', iter.next());
114
115 assertFalse(iter.hasNext());
116}
117
118UtilsTestCase.prototype.testIterator_empty = function() {
119 var array = [];
120 var iter = Dygraph.createIterator([], 0, 0);
121 assertFalse(iter.hasNext());
122}
123
124UtilsTestCase.prototype.testIterator_outOfRange = function() {
125 var array = ['a', 'b', 'c'];
126 var iter = Dygraph.createIterator(array, 1, 4,
127 function(array, idx) { return array[idx] !== 'd' });
128 assertTrue(iter.hasNext());
129 assertEquals('b', iter.peek());
130 assertEquals('b', iter.next());
131 assertTrue(iter.hasNext());
132
133 assertEquals('c', iter.peek());
134 assertEquals('c', iter.next());
135
136 assertFalse(iter.hasNext());
137}
138
139// Makes sure full array is tested, and that the predicate isn't called
140// with invalid boundaries.
141UtilsTestCase.prototype.testIterator_whole_array = function() {
142 var array = ['a', 'b', 'c'];
143 var iter = Dygraph.createIterator(array, 0, array.length,
144 function(array, idx) {
145 if (idx < 0 || idx >= array.length) {
146 throw "err";
147 } else {
148 return true;
149 });
150 assertTrue(iter.hasNext());
151 assertEquals('a', iter.next());
152 assertTrue(iter.hasNext());
153 assertEquals('b', iter.next());
154 assertTrue(iter.hasNext());
155 assertEquals('c', iter.next());
156 assertFalse(iter.hasNext());
157 assertNull(iter.next());
158}