Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(32)

Side by Side Diff: tests/html/js_test.dart

Issue 27514003: A few API changes: (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library jsTest; 5 library jsTest;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:html'; 8 import 'dart:html';
9 import 'dart:js'; 9 import 'dart:js';
10 10
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 203
204 test('retrieve same dart Object', () { 204 test('retrieve same dart Object', () {
205 final date = new DateTime.now(); 205 final date = new DateTime.now();
206 context['dartDate'] = date; 206 context['dartDate'] = date;
207 expect(context['dartDate'], same(date)); 207 expect(context['dartDate'], same(date));
208 context.deleteProperty('dartDate'); 208 context.deleteProperty('dartDate');
209 }); 209 });
210 210
211 }); 211 });
212 212
213 test('read global field', () { 213 group('context', () {
214 expect(context['x'], equals(42)); 214
215 expect(context['y'], isNull); 215 test('read global field', () {
216 }); 216 expect(context['x'], equals(42));
217 217 expect(context['y'], isNull);
218 test('read global field with underscore', () { 218 });
219 expect(context['_x'], equals(123)); 219
220 expect(context['y'], isNull); 220 test('read global field with underscore', () {
221 }); 221 expect(context['_x'], equals(123));
222 222 expect(context['y'], isNull);
223 test('hashCode and operator==(other)', () { 223 });
224 final o1 = context['Object']; 224
225 final o2 = context['Object']; 225 test('write global field', () {
226 expect(o1 == o2, isTrue); 226 context['y'] = 42;
227 expect(o1.hashCode == o2.hashCode, isTrue); 227 expect(context['y'], equals(42));
228 final d = context['document']; 228 });
229 expect(o1 == d, isFalse); 229
230 }); 230 });
231 231
232 test('js instantiation : new Foo()', () { 232 group('new JsObject()', () {
233 final Foo2 = context['container']['Foo']; 233
234 final foo = new JsObject(Foo2, [42]); 234 test('allocate JS object', () {
235 expect(foo['a'], 42); 235 var foo = new JsObject(context['Foo'], [42]);
236 expect(Foo2['b'], 38); 236 expect(foo['a'], equals(42));
237 }); 237 expect(foo.callMethod('bar'), equals(42));
238 238 expect(() => foo.callMethod('baz'), throwsA(isNoSuchMethodError));
239 test('js instantiation : new Array()', () { 239 });
240 final a = new JsObject(context['Array']); 240
241 expect(a, isNotNull); 241 test('new Foo()', () {
242 expect(a['length'], equals(0)); 242 final Foo2 = context['container']['Foo'];
243 243 final foo = new JsObject(Foo2, [42]);
244 a.callMethod('push', ["value 1"]); 244 expect(foo['a'], 42);
245 expect(a['length'], equals(1)); 245 expect(Foo2['b'], 38);
246 expect(a[0], equals("value 1")); 246 });
247 247
248 a.callMethod('pop'); 248 test('new Array()', () {
249 expect(a['length'], equals(0)); 249 final a = new JsObject(context['Array']);
250 }); 250 expect(a, isNotNull);
251 251 expect(a['length'], equals(0));
252 test('js instantiation : new Date()', () { 252
253 final a = new JsObject(context['Date']); 253 a.callMethod('push', ["value 1"]);
254 expect(a.callMethod('getTime'), isNotNull); 254 expect(a['length'], equals(1));
255 }); 255 expect(a[0], equals("value 1"));
256 256
257 test('js instantiation : new Date(12345678)', () { 257 a.callMethod('pop');
258 final a = new JsObject(context['Date'], [12345678]); 258 expect(a['length'], equals(0));
259 expect(a.callMethod('getTime'), equals(12345678)); 259 });
260 }); 260
261 261 test('new Date()', () {
262 test('js instantiation : new Date("December 17, 1995 03:24:00 GMT")', 262 final a = new JsObject(context['Date']);
263 () { 263 expect(a.callMethod('getTime'), isNotNull);
264 final a = new JsObject(context['Date'], 264 });
265 ["December 17, 1995 03:24:00 GMT"]); 265
266 expect(a.callMethod('getTime'), equals(819170640000)); 266 test('new Date(12345678)', () {
267 }); 267 final a = new JsObject(context['Date'], [12345678]);
268 268 expect(a.callMethod('getTime'), equals(12345678));
269 test('js instantiation : new Date(1995,11,17)', () { 269 });
270 // Note: JS Date counts months from 0 while Dart counts from 1. 270
271 final a = new JsObject(context['Date'], [1995, 11, 17]); 271 test('new Date("December 17, 1995 03:24:00 GMT")',
272 final b = new DateTime(1995, 12, 17); 272 () {
273 expect(a.callMethod('getTime'), equals(b.millisecondsSinceEpoch)); 273 final a = new JsObject(context['Date'],
274 }); 274 ["December 17, 1995 03:24:00 GMT"]);
275 275 expect(a.callMethod('getTime'), equals(819170640000));
276 test('js instantiation : new Date(1995,11,17,3,24,0)', () { 276 });
277 // Note: JS Date counts months from 0 while Dart counts from 1. 277
278 final a = new JsObject(context['Date'], 278 test('new Date(1995,11,17)', () {
279 [1995, 11, 17, 3, 24, 0]); 279 // Note: JS Date counts months from 0 while Dart counts from 1.
280 final b = new DateTime(1995, 12, 17, 3, 24, 0); 280 final a = new JsObject(context['Date'], [1995, 11, 17]);
281 expect(a.callMethod('getTime'), equals(b.millisecondsSinceEpoch)); 281 final b = new DateTime(1995, 12, 17);
282 }); 282 expect(a.callMethod('getTime'), equals(b.millisecondsSinceEpoch));
283 283 });
284 test('js instantiation : new Object()', () { 284
285 final a = new JsObject(context['Object']); 285 test('new Date(1995,11,17,3,24,0)', () {
286 expect(a, isNotNull); 286 // Note: JS Date counts months from 0 while Dart counts from 1.
287 287 final a = new JsObject(context['Date'],
288 a['attr'] = "value"; 288 [1995, 11, 17, 3, 24, 0]);
289 expect(a['attr'], equals("value")); 289 final b = new DateTime(1995, 12, 17, 3, 24, 0);
290 }); 290 expect(a.callMethod('getTime'), equals(b.millisecondsSinceEpoch));
291 291 });
292 test(r'js instantiation : new RegExp("^\w+$")', () { 292
293 final a = new JsObject(context['RegExp'], [r'^\w+$']); 293 test('new Object()', () {
294 expect(a, isNotNull); 294 final a = new JsObject(context['Object']);
295 expect(a.callMethod('test', ['true']), isTrue); 295 expect(a, isNotNull);
296 expect(a.callMethod('test', [' false']), isFalse); 296
297 }); 297 a['attr'] = "value";
298 298 expect(a['attr'], equals("value"));
299 test('js instantiation via map notation : new Array()', () { 299 });
300 final a = new JsObject(context['Array']); 300
301 expect(a, isNotNull); 301 test(r'new RegExp("^\w+$")', () {
302 expect(a['length'], equals(0)); 302 final a = new JsObject(context['RegExp'], [r'^\w+$']);
303 303 expect(a, isNotNull);
304 a['push'].apply(a, ["value 1"]); 304 expect(a.callMethod('test', ['true']), isTrue);
305 expect(a['length'], equals(1)); 305 expect(a.callMethod('test', [' false']), isFalse);
306 expect(a[0], equals("value 1")); 306 });
307 307
308 a['pop'].apply(a); 308 test('js instantiation via map notation : new Array()', () {
309 expect(a['length'], equals(0)); 309 final a = new JsObject(context['Array']);
310 }); 310 expect(a, isNotNull);
311 311 expect(a['length'], equals(0));
312 test('js instantiation via map notation : new Date()', () { 312
313 final a = new JsObject(context['Date']); 313 a['push'].apply(a, ["value 1"]);
314 expect(a['getTime'].apply(a), isNotNull); 314 expect(a['length'], equals(1));
315 }); 315 expect(a[0], equals("value 1"));
316 316
317 test('js instantiation : typed array', () { 317 a['pop'].apply(a);
318 if (Platform.supportsTypedData) { 318 expect(a['length'], equals(0));
319 final codeUnits = "test".codeUnits; 319 });
320 final buf = new JsObject(context['ArrayBuffer'], [codeUnits.length]); 320
321 final bufView = new JsObject(context['Uint8Array'], [buf]); 321 test('js instantiation via map notation : new Date()', () {
322 for (var i = 0; i < codeUnits.length; i++) { 322 final a = new JsObject(context['Date']);
323 bufView[i] = codeUnits[i]; 323 expect(a['getTime'].apply(a), isNotNull);
324 } 324 });
325 } 325
326 }); 326 test('typed array', () {
327 327 if (Platform.supportsTypedData) {
328 test('js instantiation : >10 parameters', () { 328 final codeUnits = "test".codeUnits;
329 final o = new JsObject(context['Baz'], [1,2,3,4,5,6,7,8,9,10,11]); 329 final buf = new JsObject(context['ArrayBuffer'], [codeUnits.length]);
330 for (var i = 1; i <= 11; i++) { 330 final bufView = new JsObject(context['Uint8Array'], [buf]);
331 expect(o["f$i"], i); 331 for (var i = 0; i < codeUnits.length; i++) {
332 } 332 bufView[i] = codeUnits[i];
333 expect(o['constructor'], same(context['Baz'])); 333 }
334 }); 334 }
335 335 });
336 test('write global field', () { 336
337 context['y'] = 42; 337 test('>10 parameters', () {
338 expect(context['y'], equals(42)); 338 final o = new JsObject(context['Baz'], [1,2,3,4,5,6,7,8,9,10,11]);
339 }); 339 for (var i = 1; i <= 11; i++) {
340 340 expect(o["f$i"], i);
341 test('get JS JsFunction', () { 341 }
342 var razzle = context['razzle']; 342 expect(o['constructor'], same(context['Baz']));
343 expect(razzle.apply(context), equals(42)); 343 });
344 }); 344 });
345 345
346 test('call JS function', () { 346 group('JsFunction', () {
347 expect(context.callMethod('razzle'), equals(42)); 347
348 expect(() => context.callMethod('dazzle'), throwsA(isNoSuchMethodError)); 348 test('get JS JsFunction', () {
349 }); 349 var razzle = context['razzle'];
350 350 expect(razzle.apply(context), equals(42));
351 test('call JS function via map notation', () { 351 });
352 expect(context['razzle'].apply(context), equals(42)); 352
353 expect(() => context['dazzle'].apply(context), 353 test('call JS function', () {
354 throwsA(isNoSuchMethodError)); 354 expect(context.callMethod('razzle'), equals(42));
355 }); 355 expect(() => context.callMethod('dazzle'), throwsA(isNoSuchMethodError));
356 356 });
357 test('call JS function with varargs', () { 357
358 expect(context.callMethod('varArgs', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]), 358 test('call JS function via map notation', () {
359 equals(55)); 359 expect(context['razzle'].apply(context), equals(42));
360 }); 360 expect(() => context['dazzle'].apply(context),
361 361 throwsA(isNoSuchMethodError));
362 test('allocate JS object', () { 362 });
363 var foo = new JsObject(context['Foo'], [42]); 363
364 expect(foo['a'], equals(42)); 364 test('call JS function with varargs', () {
365 expect(foo.callMethod('bar'), equals(42)); 365 expect(context.callMethod('varArgs', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]),
366 expect(() => foo.callMethod('baz'), throwsA(isNoSuchMethodError)); 366 equals(55));
367 }); 367 });
368 368
369 test('call toString()', () { 369 test('access a property of a function', () {
370 var foo = new JsObject(context['Foo'], [42]); 370 expect(context.callMethod('Bar'), "ret_value");
371 expect(foo.toString(), equals("I'm a Foo a=42")); 371 expect(context['Bar']['foo'], "property_value");
372 var container = context['container']; 372 });
373 expect(container.toString(), equals("[object Object]")); 373
374 }); 374 });
375 375
376 test('allocate simple JS array', () { 376 group('Dart callback', () {
377 final list = [1, 2, 3, 4, 5, 6, 7, 8]; 377 test('invoke Dart callback from JS', () {
378 var array = jsify(list); 378 expect(() => context.callMethod('invokeCallback'), throws);
379 expect(context.callMethod('isArray', [array]), isTrue); 379
380 expect(array['length'], equals(list.length)); 380 // context['callback'] = new Callback(() => 42);
381 for (var i = 0; i < list.length ; i++) { 381 // expect(context.callMethod('invokeCallback'), equals(42));
382 expect(array[i], equals(list[i])); 382
383 } 383 // context.deleteProperty('callback');
384 }); 384 // expect(() => context.callMethod('invokeCallback'), throws);
385 385
386 test('allocate JS array with iterable', () { 386 context['callback'] = () => 42;
387 final set = new Set.from([1, 2, 3, 4, 5, 6, 7, 8]); 387 expect(context.callMethod('invokeCallback'), equals(42));
388 var array = jsify(set); 388
389 expect(context.callMethod('isArray', [array]), isTrue); 389 context.deleteProperty('callback');
390 expect(array['length'], equals(set.length)); 390 });
391 for (var i = 0; i < array['length'] ; i++) { 391
392 expect(set.contains(array[i]), isTrue); 392 test('callback as parameter', () {
393 } 393 expect(context.callMethod('getTypeOf', [context['razzle']]),
394 }); 394 equals("function"));
395 395 });
396 test('allocate simple JS map', () { 396
397 var map = {'a': 1, 'b': 2, 'c': 3}; 397 test('invoke Dart callback from JS with this', () {
398 var jsMap = jsify(map); 398 // A JavaScript constructor function implemented in Dart which
399 expect(!context.callMethod('isArray', [jsMap]), isTrue); 399 // uses 'this'
400 for (final key in map.keys) { 400 final constructor = new JsFunction.withThis(($this, arg1) {
401 expect(context.callMethod('checkMap', [jsMap, key, map[key]]), isTrue); 401 var t = $this;
402 } 402 $this['a'] = 42;
403 }); 403 });
404 404 var o = new JsObject(constructor, ["b"]);
405 test('allocate complex JS object', () { 405 expect(o['a'], equals(42));
406 final object = 406 });
407 { 407
408 'a': [1, [2, 3]], 408 test('invoke Dart callback from JS with 11 parameters', () {
409 'b': { 409 context['callbackWith11params'] = (p1, p2, p3, p4, p5, p6, p7,
410 'c': 3, 410 p8, p9, p10, p11) => '$p1$p2$p3$p4$p5$p6$p7$p8$p9$p10$p11';
411 'd': new JsObject(context['Foo'], [42]) 411 expect(context.callMethod('invokeCallbackWith11params'),
412 }, 412 equals('1234567891011'));
413 'e': null 413 });
414 }; 414
415 var jsObject = jsify(object); 415 test('return a JS proxy to JavaScript', () {
416 expect(jsObject['a'][0], equals(object['a'][0])); 416 var result = context.callMethod('testJsMap', [() => new JsObject.jsify({'v alue': 42})]);
417 expect(jsObject['a'][1][0], equals(object['a'][1][0])); 417 expect(result, 42);
418 expect(jsObject['a'][1][1], equals(object['a'][1][1])); 418 });
419 expect(jsObject['b']['c'], equals(object['b']['c'])); 419
420 expect(jsObject['b']['d'], equals(object['b']['d'])); 420 });
421 expect(jsObject['b']['d'].callMethod('bar'), equals(42)); 421
422 expect(jsObject['e'], isNull); 422 group('new JsObject.jsify', () {
423 }); 423
424 424 test('allocate simple JS array', () {
425 test('invoke Dart callback from JS', () { 425 final list = [1, 2, 3, 4, 5, 6, 7, 8];
426 expect(() => context.callMethod('invokeCallback'), throws); 426 var array = new JsObject.jsify(list);
427 427 expect(context.callMethod('isArray', [array]), isTrue);
428 context['callback'] = new Callback(() => 42); 428 expect(array['length'], equals(list.length));
429 expect(context.callMethod('invokeCallback'), equals(42)); 429 for (var i = 0; i < list.length ; i++) {
430 430 expect(array[i], equals(list[i]));
431 context.deleteProperty('callback'); 431 }
432 expect(() => context.callMethod('invokeCallback'), throws); 432 });
433 433
434 context['callback'] = () => 42; 434 test('allocate JS array with iterable', () {
435 expect(context.callMethod('invokeCallback'), equals(42)); 435 final set = new Set.from([1, 2, 3, 4, 5, 6, 7, 8]);
436 436 var array = new JsObject.jsify(set);
437 context.deleteProperty('callback'); 437 expect(context.callMethod('isArray', [array]), isTrue);
438 }); 438 expect(array['length'], equals(set.length));
439 439 for (var i = 0; i < array['length'] ; i++) {
440 test('callback as parameter', () { 440 expect(set.contains(array[i]), isTrue);
441 expect(context.callMethod('getTypeOf', [context['razzle']]), 441 }
442 equals("function")); 442 });
443 }); 443
444 444 test('allocate simple JS map', () {
445 test('invoke Dart callback from JS with this', () { 445 var map = {'a': 1, 'b': 2, 'c': 3};
446 final constructor = new Callback.withThis(($this, arg1) { 446 var jsMap = new JsObject.jsify(map);
447 $this['a'] = 42; 447 expect(!context.callMethod('isArray', [jsMap]), isTrue);
448 $this['b'] = jsify(["a", arg1]); 448 for (final key in map.keys) {
449 }); 449 expect(context.callMethod('checkMap', [jsMap, key, map[key]]), isTrue);
450 var o = new JsObject(constructor, ["b"]); 450 }
451 expect(o['a'], equals(42)); 451 });
452 expect(o['b'][0], equals("a")); 452
453 expect(o['b'][1], equals("b")); 453 test('allocate complex JS object', () {
454 }); 454 final object =
455 455 {
456 test('invoke Dart callback from JS with 11 parameters', () { 456 'a': [1, [2, 3]],
457 context['callbackWith11params'] = new Callback((p1, p2, p3, p4, p5, p6, p7, 457 'b': {
458 p8, p9, p10, p11) => '$p1$p2$p3$p4$p5$p6$p7$p8$p9$p10$p11'); 458 'c': 3,
459 expect(context.callMethod('invokeCallbackWith11params'), 459 'd': new JsObject(context['Foo'], [42])
460 equals('1234567891011')); 460 },
461 }); 461 'e': null
462 462 };
463 test('return a JS proxy to JavaScript', () { 463 var jsObject = new JsObject.jsify(object);
464 var result = context.callMethod('testJsMap', [() => jsify({'value': 42})]); 464 expect(jsObject['a'][0], equals(object['a'][0]));
465 expect(result, 42); 465 expect(jsObject['a'][1][0], equals(object['a'][1][0]));
466 }); 466 expect(jsObject['a'][1][1], equals(object['a'][1][1]));
467 467 expect(jsObject['b']['c'], equals(object['b']['c']));
468 test('test instanceof', () { 468 expect(jsObject['b']['d'], equals(object['b']['d']));
469 var foo = new JsObject(context['Foo'], [1]); 469 expect(jsObject['b']['d'].callMethod('bar'), equals(42));
470 expect(foo.instanceof(context['Foo']), isTrue); 470 expect(jsObject['e'], isNull);
471 expect(foo.instanceof(context['Object']), isTrue); 471 });
472 expect(foo.instanceof(context['String']), isFalse); 472
473 }); 473 });
474 474
475 test('test deleteProperty', () { 475 group('JsObject methods', () {
476 var object = jsify({}); 476
477 object['a'] = 1; 477 test('hashCode and operator==(other)', () {
478 expect(context['Object'].callMethod('keys', [object])['length'], 1); 478 final o1 = context['Object'];
479 expect(context['Object'].callMethod('keys', [object])[0], "a"); 479 final o2 = context['Object'];
480 object.deleteProperty("a"); 480 expect(o1 == o2, isTrue);
481 expect(context['Object'].callMethod('keys', [object])['length'], 0); 481 expect(o1.hashCode == o2.hashCode, isTrue);
482 }); 482 final d = context['document'];
483 483 expect(o1 == d, isFalse);
484 test('test hasProperty', () { 484 });
485 var object = jsify({}); 485
486 object['a'] = 1; 486 test('toString()', () {
487 expect(object.hasProperty('a'), isTrue); 487 var foo = new JsObject(context['Foo'], [42]);
488 expect(object.hasProperty('b'), isFalse); 488 expect(foo.toString(), equals("I'm a Foo a=42"));
489 }); 489 var container = context['container'];
490 490 expect(container.toString(), equals("[object Object]"));
491 test('test index get and set', () { 491 });
492 final myArray = context['myArray']; 492
493 expect(myArray['length'], equals(1)); 493 test('instanceof', () {
494 expect(myArray[0], equals("value1")); 494 var foo = new JsObject(context['Foo'], [1]);
495 myArray[0] = "value2"; 495 expect(foo.instanceof(context['Foo']), isTrue);
496 expect(myArray['length'], equals(1)); 496 expect(foo.instanceof(context['Object']), isTrue);
497 expect(myArray[0], equals("value2")); 497 expect(foo.instanceof(context['String']), isFalse);
498 498 });
499 final foo = new JsObject(context['Foo'], [1]); 499
500 foo["getAge"] = () => 10; 500 test('deleteProperty', () {
501 expect(foo.callMethod('getAge'), equals(10)); 501 var object = new JsObject.jsify({});
502 }); 502 object['a'] = 1;
503 503 expect(context['Object'].callMethod('keys', [object])['length'], 1);
504 test('access a property of a function', () { 504 expect(context['Object'].callMethod('keys', [object])[0], "a");
505 expect(context.callMethod('Bar'), "ret_value"); 505 object.deleteProperty("a");
506 expect(context['Bar']['foo'], "property_value"); 506 expect(context['Object'].callMethod('keys', [object])['length'], 0);
507 }); 507 });
508 508
509 test('usage of Serializable', () { 509 test('hasProperty', () {
510 var object = new JsObject.jsify({});
511 object['a'] = 1;
512 expect(object.hasProperty('a'), isTrue);
513 expect(object.hasProperty('b'), isFalse);
514 });
515
516 test('index get and set', () {
517 final myArray = context['myArray'];
518 expect(myArray['length'], equals(1));
519 expect(myArray[0], equals("value1"));
520 myArray[0] = "value2";
521 expect(myArray['length'], equals(1));
522 expect(myArray[0], equals("value2"));
523
524 final foo = new JsObject(context['Foo'], [1]);
525 foo["getAge"] = () => 10;
526 expect(foo.callMethod('getAge'), equals(10));
527 });
528
529 });
530
531 test('Serializable', () {
510 final red = Color.RED; 532 final red = Color.RED;
511 context['color'] = red; 533 context['color'] = red;
512 expect(context['color'], equals(red._value)); 534 expect(context['color'], equals(red._value));
513 }); 535 });
514 } 536 }
OLDNEW
« sdk/lib/js/dart2js/js_dart2js.dart ('K') | « sdk/lib/js/dart2js/js_dart2js.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698