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

Side by Side Diff: pkg/polymer/test/prop_attr_reflection_test.dart

Issue 29823005: fixes to polymer, gets tests back to a stable state (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 1 month 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 import 'dart:async';
5 import 'dart:html'; 6 import 'dart:html';
6 import 'package:unittest/unittest.dart'; 7 import 'package:unittest/unittest.dart';
7 import 'package:unittest/html_config.dart'; 8 import 'package:unittest/html_config.dart';
8 import 'package:polymer/platform.dart' as Platform; 9 import 'package:polymer/platform.dart' as Platform;
9 import 'package:polymer/polymer.dart'; 10 import 'package:polymer/polymer.dart';
10 11
11 class XFoo extends PolymerElement { 12 class XFoo extends PolymerElement {
12 XFoo.created() : super.created(); 13 XFoo.created() : super.created();
13 14
14 @observable var foo = ''; 15 @observable var foo = '';
15 @observable String baz = ''; 16 @observable String baz = '';
16 } 17 }
17 18
18 class XBar extends XFoo { 19 class XBar extends XFoo {
19 XBar.created() : super.created(); 20 XBar.created() : super.created();
20 21
21 @observable int zot = 3; 22 @observable int zot = 3;
22 @observable bool zim = false; 23 @observable bool zim = false;
23 @observable String str = 'str'; 24 @observable String str = 'str';
24 @observable Object obj; 25 @observable Object obj;
25 } 26 }
26 27
27 class XCompose extends PolymerElement { 28 class XCompose extends PolymerElement {
28 XCompose.created() : super.created(); 29 XCompose.created() : super.created();
29 30
30 @observable bool zim = false; 31 @observable bool zim = false;
31 } 32 }
32 33
34 Future onAttributeChange(Element node) {
35 var completer = new Completer();
36 new MutationObserver((records, observer) {
37 observer.disconnect();
38 completer.complete();
39 })..observe(node, attributes: true);
40 return completer.future;
41 }
42
33 @initMethod _main() { 43 @initMethod _main() {
34 useHtmlConfiguration(); 44 useHtmlConfiguration();
35 45
46 setUp(() => Polymer.onReady);
47
36 // Most tests use @CustomTag, here we test out the impertive register: 48 // Most tests use @CustomTag, here we test out the impertive register:
37 Polymer.register('x-foo', XFoo); 49 Polymer.register('x-foo', XFoo);
38 Polymer.register('x-bar', XBar); 50 Polymer.register('x-bar', XBar);
39 Polymer.register('x-compose', XCompose); 51 Polymer.register('x-compose', XCompose);
40 52
41 test('property attribute reflection', () { 53 test('property attribute reflection', () {
42 var xcompose = query('x-compose').xtag; 54 var xcompose = query('x-compose').xtag;
43 var xfoo = query('x-foo').xtag; 55 var xfoo = query('x-foo').xtag;
56 var xbar = query('x-bar').xtag;
44 xfoo.foo = 5; 57 xfoo.foo = 5;
45 Platform.flush(); 58 return onAttributeChange(xfoo).then((_) {
46 Platform.endOfMicrotask(expectAsync0(() {
47 expect(xcompose.$['bar'].attributes.containsKey('zim'), false, 59 expect(xcompose.$['bar'].attributes.containsKey('zim'), false,
48 reason: 'attribute bound to property updates when binding is made'); 60 reason: 'attribute bound to property updates when binding is made');
49 61
50 expect('${xfoo.foo}', xfoo.attributes['foo'], 62 expect('${xfoo.foo}', xfoo.attributes['foo'],
51 reason: 'attribute reflects property as string'); 63 reason: 'attribute reflects property as string');
52 xfoo.attributes['foo'] = '27'; 64 xfoo.attributes['foo'] = '27';
53 // TODO(jmesserly): why is JS leaving this as a String? From the code it 65 // TODO(jmesserly): why is JS leaving this as a String? From the code it
54 // looks like it should use the type of 5 and parse it as a number. 66 // looks like it should use the type of 5 and parse it as a number.
55 expect('${xfoo.foo}', xfoo.attributes['foo'], 67 expect('${xfoo.foo}', xfoo.attributes['foo'],
56 reason: 'property reflects attribute'); 68 reason: 'property reflects attribute');
57 // 69 //
58 xfoo.baz = 'Hello'; 70 xfoo.baz = 'Hello';
59 Platform.flush(); 71 }).then((_) => onAttributeChange(xfoo)).then((_) {
60 Platform.endOfMicrotask(expectAsync0(() { 72 expect(xfoo.baz, xfoo.attributes['baz'],
61 expect(xfoo.baz, xfoo.attributes['baz'], 73 reason: 'attribute reflects property');
62 reason: 'attribute reflects property'); 74 //
63 // 75 xbar.foo = 'foo!';
64 var xbar = query('x-bar').xtag; 76 xbar.zot = 27;
65 // 77 xbar.zim = true;
66 xbar.foo = 'foo!'; 78 xbar.str = 'str!';
67 xbar.zot = 27; 79 xbar.obj = {'hello': 'world'};
68 xbar.zim = true; 80 }).then((_) => onAttributeChange(xbar)).then((_) {
69 xbar.str = 'str!'; 81 expect(xbar.foo, xbar.attributes['foo'],
70 xbar.obj = {'hello': 'world'}; 82 reason: 'inherited published property is reflected');
71 Platform.flush(); 83 expect('${xbar.zot}', xbar.attributes['zot'],
72 Platform.endOfMicrotask(expectAsync0(() { 84 reason: 'attribute reflects property as number');
73 expect(xbar.foo, xbar.attributes['foo'], 85 expect(xbar.attributes['zim'], '', reason:
74 reason: 'inherited published property is reflected'); 86 'attribute reflects true valued boolean property as '
75 expect('${xbar.zot}', xbar.attributes['zot'], 87 'having attribute');
76 reason: 'attribute reflects property as number'); 88 expect(xbar.str, xbar.attributes['str'],
77 expect(xbar.attributes['zim'], '', reason: 89 reason: 'attribute reflects property as published string');
78 'attribute reflects true valued boolean property as ' 90 expect(xbar.attributes.containsKey('obj'), false,
79 'having attribute'); 91 reason: 'attribute does not reflect object property');
80 expect(xbar.str, xbar.attributes['str'], 92 xbar.attributes['zim'] = 'false';
81 reason: 'attribute reflects property as published string'); 93 xbar.attributes['foo'] = 'foo!!';
82 expect(xbar.attributes.containsKey('obj'), false, 94 xbar.attributes['zot'] = '54';
83 reason: 'attribute does not reflect object property'); 95 xbar.attributes['str'] = 'str!!';
84 xbar.attributes['zim'] = 'false'; 96 xbar.attributes['obj'] = "{'hello': 'world'}";
85 xbar.attributes['foo'] = 'foo!!'; 97 expect(xbar.foo, xbar.attributes['foo'],
86 xbar.attributes['zot'] = '54'; 98 reason: 'property reflects attribute as string');
87 xbar.attributes['str'] = 'str!!'; 99 expect(xbar.zot, 54,
88 xbar.attributes['obj'] = "{'hello': 'world'}"; 100 reason: 'property reflects attribute as number');
89 expect(xbar.foo, xbar.attributes['foo'], 101 expect(xbar.zim, false,
90 reason: 'property reflects attribute as string'); 102 reason: 'property reflects attribute as boolean');
91 expect(xbar.zot, 54, 103 expect(xbar.str, 'str!!',
92 reason: 'property reflects attribute as number'); 104 reason: 'property reflects attribute as published string');
93 expect(xbar.zim, false, 105 expect(xbar.obj, {'hello': 'world'},
94 reason: 'property reflects attribute as boolean'); 106 reason: 'property reflects attribute as object');
95 expect(xbar.str, 'str!!', 107 xbar.zim = false;
96 reason: 'property reflects attribute as published string'); 108 }).then((_) => onAttributeChange(xbar)).then((_) {
97 expect(xbar.obj, {'hello': 'world'}, 109 expect(xbar.attributes.containsKey('zim'), false, reason:
98 reason: 'property reflects attribute as object'); 110 'attribute reflects false valued boolean property as NOT '
99 xbar.zim = false; 111 'having attribute');
100 Platform.flush(); 112 xbar.obj = 'hi';
101 Platform.endOfMicrotask(expectAsync0(() { 113 }).then((_) => onAttributeChange(xbar)).then((_) {
102 expect(xbar.attributes.containsKey('zim'), false, reason: 114 expect(xbar.attributes['obj'], 'hi', reason:
103 'attribute reflects false valued boolean property as NOT ' 115 'reflect property based on current type');
104 'having attribute'); 116 });
105 var objAttr = xbar.attributes['obj'];
106 xbar.obj = 'hi';
107 Platform.endOfMicrotask(expectAsync0(() {
108 expect(xbar.attributes['obj'], objAttr, reason:
109 'do not reflect property with default type of object');
110 }));
111 }));
112 }));
113 }));
114 }));
115 }); 117 });
116 } 118 }
OLDNEW
« no previous file with comments | « pkg/polymer/test/instance_attrs_test.dart ('k') | pkg/polymer/test/publish_attributes_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698