• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<!DOCTYPE html>
2<html>
3<head>
4<title></title>
5<style>
6
7</style>
8<script src="http://closure-library.googlecode.com/svn/trunk/closure/goog/base.js"></script>
9<script src="cr.js"></script>
10<script src="cr/event_target.js"></script>
11<script>
12
13goog.require('goog.testing.jsunit');
14
15</script>
16
17</head>
18<body>
19
20<script>
21
22const EventTarget = cr.EventTarget;
23
24function testDefineProperty() {
25  var obj = new EventTarget;
26  cr.defineProperty(obj, 'test');
27
28  obj.test = 1;
29  assertEquals(1, obj.test);
30  assertEquals(1, obj.test_);
31}
32
33function testDefinePropertyOnClass() {
34  function C() {}
35  C.prototype = {
36    __proto__: EventTarget.prototype
37  };
38
39  cr.defineProperty(C, 'test');
40
41  var obj = new C;
42  assertUndefined(obj.test);
43
44  obj.test = 1;
45  assertEquals(1, obj.test);
46  assertEquals(1, obj.test_);
47}
48
49function testDefinePropertyWithSetter() {
50  var obj = new EventTarget;
51
52  var hit = false;
53  function onTestSet(value, oldValue) {
54    assertEquals(obj, this);
55    assertEquals(2, this.test);
56    assertUndefined(oldValue);
57    assertEquals(2, value);
58    hit = true;
59  }
60  cr.defineProperty(obj, 'test', cr.PropertyKind.JS, onTestSet);
61  obj.test = 2;
62  assertTrue(hit);
63}
64
65function testDefinePropertyEvent() {
66  var obj = new EventTarget;
67  cr.defineProperty(obj, 'test');
68  obj.test = 1;
69
70  var count = 0;
71  function f(e) {
72    assertEquals('testChange', e.type);
73    assertEquals('test', e.propertyName);
74    assertEquals(1, e.oldValue);
75    assertEquals(2, e.newValue);
76    count++;
77  }
78
79  obj.addEventListener('testChange', f);
80  obj.test = 2;
81  assertEquals(2, obj.test);
82  assertEquals('Should have called the property change listener', 1, count);
83
84  obj.test = 2;
85  assertEquals(1, count);
86}
87
88function testDefinePropertyEventWithDefault() {
89  var obj = new EventTarget;
90  cr.defineProperty(obj, 'test', cr.PropertyKind.JS);
91
92  var count = 0;
93  function f(e) {
94    assertEquals('testChange', e.type);
95    assertEquals('test', e.propertyName);
96    assertUndefined(e.oldValue);
97    assertEquals(2, e.newValue);
98    count++;
99  }
100
101  obj.addEventListener('testChange', f);
102
103  obj.test = undefined;
104  assertEquals('Should not have called the property change listener', 0, count);
105
106  obj.test = 2;
107  assertEquals(2, obj.test);
108  assertEquals('Should have called the property change listener', 1, count);
109
110  obj.test = 2;
111  assertEquals(1, count);
112}
113
114function testDefinePropertyAttr() {
115  var obj = document.createElement('div');
116  cr.defineProperty(obj, 'test', cr.PropertyKind.ATTR);
117
118  obj.test = 'a';
119  assertEquals('a', obj.test);
120  assertEquals('a', obj.getAttribute('test'));
121
122  obj.test = undefined;
123  assertEquals(undefined, obj.test);
124  assertFalse(obj.hasAttribute('test'));
125}
126
127function testDefinePropertyAttrOnClass() {
128  var obj = document.createElement('button');
129  cr.defineProperty(HTMLButtonElement, 'test', cr.PropertyKind.ATTR);
130
131  assertEquals(null, obj.test);
132
133  obj.test = 'a';
134  assertEquals('a', obj.test);
135  assertEquals('a', obj.getAttribute('test'));
136
137  obj.test = undefined;
138  assertEquals(undefined, obj.test);
139  assertFalse(obj.hasAttribute('test'));
140}
141
142function testDefinePropertyAttrWithSetter() {
143  var obj = document.createElement('div');
144
145  var hit = false;
146  function onTestSet(value, oldValue) {
147    assertEquals(obj, this);
148    assertEquals(null, oldValue);
149    assertEquals('b', value);
150    assertEquals('b', this.test);
151    hit = true;
152  }
153  cr.defineProperty(obj, 'test', cr.PropertyKind.ATTR, onTestSet);
154  obj.test = 'b';
155  assertTrue(hit);
156}
157
158function testDefinePropertyAttrEvent() {
159  var obj = document.createElement('div');
160  cr.defineProperty(obj, 'test', cr.PropertyKind.ATTR);
161
162  var count = 0;
163  function f(e) {
164    assertEquals('testChange', e.type);
165    assertEquals('test', e.propertyName);
166    assertEquals(null, e.oldValue);
167    assertEquals('b', e.newValue);
168    count++;
169  }
170
171  obj.addEventListener('testChange', f);
172
173  obj.test = null;
174  assertEquals('Should not have called the property change listener', 0, count);
175
176  obj.test = 'b';
177  assertEquals('b', obj.test);
178  assertEquals('Should have called the property change listener', 1, count);
179
180  obj.test = 'b';
181  assertEquals(1, count);
182}
183
184function testDefinePropertyBoolAttr() {
185  var obj = document.createElement('div');
186  cr.defineProperty(obj, 'test', cr.PropertyKind.BOOL_ATTR);
187
188  assertFalse(obj.test);
189  assertFalse(obj.hasAttribute('test'));
190
191  obj.test = true;
192  assertTrue(obj.test);
193  assertTrue(obj.hasAttribute('test'));
194
195  obj.test = false;
196  assertFalse(obj.test);
197  assertFalse(obj.hasAttribute('test'));
198}
199
200function testDefinePropertyBoolAttrEvent() {
201  var obj = document.createElement('div');
202  cr.defineProperty(obj, 'test', cr.PropertyKind.BOOL_ATTR);
203
204  var count = 0;
205  function f(e) {
206    assertEquals('testChange', e.type);
207    assertEquals('test', e.propertyName);
208    assertEquals(false, e.oldValue);
209    assertEquals(true, e.newValue);
210    count++;
211  }
212
213  obj.addEventListener('testChange', f);
214  obj.test = true;
215  assertTrue(obj.test);
216  assertEquals('Should have called the property change listener', 1, count);
217
218  obj.test = true;
219  assertEquals(1, count);
220}
221
222function testDefinePropertyBoolAttrEvent() {
223  var obj = document.createElement('div');
224  var hit = false;
225  function onTestSet(value, oldValue) {
226    assertEquals(obj, this);
227    assertTrue(this.test);
228    assertFalse(oldValue);
229    assertTrue(value);
230    hit = true;
231  }
232  cr.defineProperty(obj, 'test', cr.PropertyKind.BOOL_ATTR, onTestSet);
233  obj.test = true;
234  assertTrue(hit);
235}
236
237function testAddSingletonGetter() {
238  function Foo() {};
239  cr.addSingletonGetter(Foo);
240
241  assertNotNull('Should add get instance function', Foo.getInstance);
242
243  var x = Foo.getInstance();
244  assertNotNull('Should successfully create an object', x);
245
246  var y = Foo.getInstance();
247  assertEquals('Should return the same object', x, y);
248
249  delete Foo.instance_;
250
251  var z = Foo.getInstance();
252  assertNotNull('Should work after clearing for testing', z);
253
254  assertNotEquals('Should return a different object after clearing for testing',
255      x, z);
256}
257
258function testWithDoc() {
259  var d = {};
260
261  assertEquals(document, cr.doc);
262
263  cr.withDoc(d, function() {
264    assertEquals(d, cr.doc);
265  });
266
267  assertEquals(document, cr.doc);
268}
269
270function testDefineWithGetter() {
271  var v = 0;
272  cr.define('foo', function() {
273    return {
274      get v() {
275        return v;
276      }
277    }
278  });
279
280  assertEquals(0, foo.v);
281
282  v = 1;
283  assertEquals(1, foo.v);
284}
285
286</script>
287
288</body>
289</html>
290