| 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 library polymer.test.bind_mdv_test; |  | 
|   6  |  | 
|   7 import 'dart:async'; |  | 
|   8 import 'dart:html'; |  | 
|   9 import 'package:template_binding/template_binding.dart'; |  | 
|  10 import 'package:observe/observe.dart'; |  | 
|  11 import 'package:observe/mirrors_used.dart'; // make test smaller. |  | 
|  12 import 'package:unittest/html_config.dart'; |  | 
|  13 import 'package:unittest/unittest.dart'; |  | 
|  14 import 'package:web_components/polyfill.dart'; |  | 
|  15  |  | 
|  16 main() { |  | 
|  17   useHtmlConfiguration(); |  | 
|  18  |  | 
|  19   var registered = customElementsReady.then((_) { |  | 
|  20     document.registerElement('my-div', MyDivElement); |  | 
|  21   }); |  | 
|  22  |  | 
|  23   setUp(() => registered); |  | 
|  24  |  | 
|  25   group('bindModel', bindModelTests); |  | 
|  26 } |  | 
|  27  |  | 
|  28 bindModelTests() { |  | 
|  29   var div; |  | 
|  30  |  | 
|  31   setUp(() { |  | 
|  32     div = new MyDivElement(); |  | 
|  33     document.body.append(div); |  | 
|  34   }); |  | 
|  35  |  | 
|  36   tearDown(() { |  | 
|  37     div.remove(); |  | 
|  38   }); |  | 
|  39  |  | 
|  40   parseAndBindHTML(html, model) => templateBind(new Element.tag('template') |  | 
|  41     ..setInnerHtml(html, treeSanitizer: const NullTreeSanitizer())) |  | 
|  42       .createInstance(model); |  | 
|  43  |  | 
|  44   test('bindModel', () { |  | 
|  45     var fragment = parseAndBindHTML('<div id="a" foo="{{bar}}"></div>', div); |  | 
|  46     div.append(fragment); |  | 
|  47     var a = div.query('#a'); |  | 
|  48  |  | 
|  49     div.bar = 5; |  | 
|  50     return onAttributeChange(a).then((_) { |  | 
|  51       expect(a.attributes['foo'], '5'); |  | 
|  52       div.bar = 8; |  | 
|  53       return onAttributeChange(a).then((_) { |  | 
|  54         expect(a.attributes['foo'], '8'); |  | 
|  55       }); |  | 
|  56     }); |  | 
|  57   }); |  | 
|  58  |  | 
|  59   test('bind input', () { |  | 
|  60     var fragment = parseAndBindHTML('<input value="{{bar}}" />', div); |  | 
|  61     div.append(fragment); |  | 
|  62     var a = div.query('input'); |  | 
|  63  |  | 
|  64     div.bar = 'hello'; |  | 
|  65     // TODO(sorvell): fix this when observe-js lets us explicitly listen for |  | 
|  66     // a change on input.value |  | 
|  67     Observable.dirtyCheck(); |  | 
|  68     return new Future.microtask(() { |  | 
|  69       expect(a.value, 'hello'); |  | 
|  70     }); |  | 
|  71   }); |  | 
|  72 } |  | 
|  73  |  | 
|  74 class MyDivElement extends HtmlElement with Observable { |  | 
|  75   factory MyDivElement() => new Element.tag('my-div'); |  | 
|  76   MyDivElement.created() : super.created(); |  | 
|  77   @observable var bar; |  | 
|  78 } |  | 
|  79  |  | 
|  80 class NullTreeSanitizer implements NodeTreeSanitizer { |  | 
|  81   const NullTreeSanitizer(); |  | 
|  82   void sanitizeTree(Node node) {} |  | 
|  83 } |  | 
|  84  |  | 
|  85 Future onAttributeChange(Element node) { |  | 
|  86   var completer = new Completer(); |  | 
|  87   new MutationObserver((records, observer) { |  | 
|  88     observer.disconnect(); |  | 
|  89     completer.complete(); |  | 
|  90   })..observe(node, attributes: true); |  | 
|  91   scheduleMicrotask(Observable.dirtyCheck); |  | 
|  92   return completer.future; |  | 
|  93 } |  | 
| OLD | NEW |