Merge pull request #465 from danvk/callback-this
[dygraphs.git] / auto_tests / tests / utils_test.js
1 /**
2 * @fileoverview Tests for stand-alone functions in dygraph-utils.js
3 *
4 * @author danvdk@gmail.com (Dan Vanderkam)
5 */
6
7 var UtilsTestCase = TestCase("utils-tests");
8
9 UtilsTestCase.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
34 UtilsTestCase.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
59 UtilsTestCase.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 };
78
79
80 UtilsTestCase.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
100 UtilsTestCase.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
118 UtilsTestCase.prototype.testIterator_empty = function() {
119 var array = [];
120 var iter = Dygraph.createIterator([], 0, 0);
121 assertFalse(iter.hasNext);
122 };
123
124 UtilsTestCase.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.
141 UtilsTestCase.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 });
151 assertTrue(iter.hasNext);
152 assertEquals('a', iter.next());
153 assertTrue(iter.hasNext);
154 assertEquals('b', iter.next());
155 assertTrue(iter.hasNext);
156 assertEquals('c', iter.next());
157 assertFalse(iter.hasNext);
158 assertNull(iter.next());
159 };
160
161 UtilsTestCase.prototype.testIterator_no_args = function() {
162 var array = ['a', 'b', 'c'];
163 var iter = Dygraph.createIterator(array);
164 assertTrue(iter.hasNext);
165 assertEquals('a', iter.next());
166 assertTrue(iter.hasNext);
167 assertEquals('b', iter.next());
168 assertTrue(iter.hasNext);
169 assertEquals('c', iter.next());
170 assertFalse(iter.hasNext);
171 assertNull(iter.next());
172 };
173
174 UtilsTestCase.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
180 /*
181 UtilsTestCase.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 };
194 */