copy over lots of changes from "shrink" branch.
[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);
ff1074cd
RK
83 assertTrue(iter.hasNext);
84 assertEquals('b', iter.peek);
7d1afbb9 85 assertEquals('b', iter.next());
ff1074cd 86 assertTrue(iter.hasNext);
7d1afbb9 87
ff1074cd 88 assertEquals('c', iter.peek);
7d1afbb9
RK
89 assertEquals('c', iter.next());
90
ff1074cd 91 assertTrue(iter.hasNext);
7d1afbb9
RK
92 assertEquals('d', iter.next());
93
ff1074cd 94 assertTrue(iter.hasNext);
7d1afbb9
RK
95 assertEquals('e', iter.next());
96
ff1074cd 97 assertFalse(iter.hasNext);
9a4fd029 98};
7d1afbb9
RK
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' });
ff1074cd
RK
104 assertTrue(iter.hasNext);
105 assertEquals('b', iter.peek);
7d1afbb9 106 assertEquals('b', iter.next());
ff1074cd 107 assertTrue(iter.hasNext);
7d1afbb9 108
ff1074cd 109 assertEquals('c', iter.peek);
7d1afbb9
RK
110 assertEquals('c', iter.next());
111
ff1074cd 112 assertTrue(iter.hasNext);
7d1afbb9
RK
113 assertEquals('e', iter.next());
114
ff1074cd 115 assertFalse(iter.hasNext);
7d1afbb9
RK
116}
117
118UtilsTestCase.prototype.testIterator_empty = function() {
119 var array = [];
120 var iter = Dygraph.createIterator([], 0, 0);
ff1074cd 121 assertFalse(iter.hasNext);
9a4fd029 122};
7d1afbb9
RK
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' });
ff1074cd
RK
128 assertTrue(iter.hasNext);
129 assertEquals('b', iter.peek);
7d1afbb9 130 assertEquals('b', iter.next());
ff1074cd 131 assertTrue(iter.hasNext);
7d1afbb9 132
ff1074cd 133 assertEquals('c', iter.peek);
7d1afbb9
RK
134 assertEquals('c', iter.next());
135
ff1074cd 136 assertFalse(iter.hasNext);
9a4fd029 137};
7d1afbb9
RK
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;
199fd784
RK
149 };
150 });
ff1074cd 151 assertTrue(iter.hasNext);
7d1afbb9 152 assertEquals('a', iter.next());
ff1074cd 153 assertTrue(iter.hasNext);
7d1afbb9 154 assertEquals('b', iter.next());
ff1074cd 155 assertTrue(iter.hasNext);
7d1afbb9 156 assertEquals('c', iter.next());
ff1074cd 157 assertFalse(iter.hasNext);
7d1afbb9 158 assertNull(iter.next());
9a4fd029 159};
64885539
RK
160
161UtilsTestCase.prototype.testIterator_no_args = function() {
162 var array = ['a', 'b', 'c'];
163 var iter = Dygraph.createIterator(array);
ff1074cd 164 assertTrue(iter.hasNext);
64885539 165 assertEquals('a', iter.next());
ff1074cd 166 assertTrue(iter.hasNext);
64885539 167 assertEquals('b', iter.next());
ff1074cd 168 assertTrue(iter.hasNext);
64885539 169 assertEquals('c', iter.next());
ff1074cd 170 assertFalse(iter.hasNext);
64885539 171 assertNull(iter.next());
9a4fd029
DV
172};
173
464b5f50
DV
174UtilsTestCase.prototype.testToRGB = function() {
175 assertEquals({r: 255, g: 200, b: 150}, Dygraph.toRGB_('rgb(255,200,150)'));
176 assertEquals({r: 255, g: 200, b: 150}, Dygraph.toRGB_('#FFC896'));
177 assertEquals({r: 255, g: 0, b: 0}, Dygraph.toRGB_('red'));
178};
179
ace524b5 180/*
9a4fd029
DV
181UtilsTestCase.prototype.testDateSet = function() {
182 var base = new Date(1383455100000);
183 var d = new Date(base);
184
185 // A one hour shift -- this is surprising behavior!
186 d.setMilliseconds(10);
187 assertEquals(3600010, d.getTime() - base.getTime());
188
189 // setDateSameTZ compensates for this surprise.
190 d = new Date(base);
191 Dygraph.setDateSameTZ(d, {ms: 10});
192 assertEquals(10, d.getTime() - base.getTime());
193};
ace524b5 194*/