OLD | NEW |
(Empty) | |
| 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 |
| 3 // BSD-style license that can be found in the LICENSE file. |
| 4 |
| 5 import 'dart:async'; |
| 6 import 'dart:html'; |
| 7 import 'package:unittest/unittest.dart'; |
| 8 import 'package:unittest/html_config.dart'; |
| 9 import 'package:polymer/polymer.dart'; |
| 10 |
| 11 @CustomTag('inner-element') |
| 12 class InnerElement extends PolymerElement { |
| 13 @published int number; |
| 14 @published bool boolean; |
| 15 @published String string; |
| 16 |
| 17 InnerElement.created() : super.created(); |
| 18 } |
| 19 |
| 20 @CustomTag('outer-element') |
| 21 class OuterElement extends PolymerElement { |
| 22 @observable int number = 1; |
| 23 @observable bool boolean = false; |
| 24 @observable String string = 'a'; |
| 25 |
| 26 OuterElement.created() : super.created(); |
| 27 } |
| 28 |
| 29 main() => initPolymer().then((zone) => zone.run(() { |
| 30 useHtmlConfiguration(); |
| 31 |
| 32 setUp(() => Polymer.onReady); |
| 33 |
| 34 test('inner element gets initial values', () { |
| 35 var outer = querySelector('outer-element'); |
| 36 var inner = outer.shadowRoot.querySelector('inner-element'); |
| 37 |
| 38 expect(inner.number, 1); |
| 39 expect(inner.boolean, false); |
| 40 expect(inner.string, 'a'); |
| 41 }); |
| 42 |
| 43 test('inner element updates the outer element', () { |
| 44 var outer = querySelector('outer-element'); |
| 45 var inner = outer.shadowRoot.querySelector('inner-element'); |
| 46 |
| 47 // Toggle the value in the child and make sure that propagates around. |
| 48 inner.number = 2; |
| 49 inner.boolean = true; |
| 50 inner.string = 'b'; |
| 51 return new Future(() {}).then((_) { |
| 52 expect(outer.number, 2); |
| 53 expect(outer.boolean, true); |
| 54 expect(outer.string, 'b'); |
| 55 |
| 56 inner.number = 1; |
| 57 inner.boolean = false; |
| 58 inner.string = 'a'; |
| 59 }).then((_) => new Future(() {})).then((_) { |
| 60 expect(outer.number, 1); |
| 61 expect(outer.boolean, false); |
| 62 expect(outer.string, 'a'); |
| 63 }); |
| 64 }); |
| 65 |
| 66 test('outer element updates the inner element', () { |
| 67 var outer = querySelector('outer-element'); |
| 68 var inner = outer.shadowRoot.querySelector('inner-element'); |
| 69 |
| 70 // Toggle the value in the parent and make sure that propagates around. |
| 71 outer.number = 2; |
| 72 outer.boolean = true; |
| 73 outer.string = 'b'; |
| 74 return new Future(() {}).then((_) { |
| 75 expect(inner.number, 2); |
| 76 expect(inner.boolean, true); |
| 77 expect(inner.string, 'b'); |
| 78 |
| 79 outer.number = 1; |
| 80 outer.boolean = false; |
| 81 outer.string = 'a'; |
| 82 }).then((_) => new Future(() {})).then((_) { |
| 83 expect(inner.number, 1); |
| 84 expect(inner.boolean, false); |
| 85 expect(inner.string, 'a'); |
| 86 }); |
| 87 }); |
| 88 })); |
OLD | NEW |