OLD | NEW |
(Empty) | |
| 1 library HiddenDom2Test; |
| 2 import 'package:unittest/unittest.dart'; |
| 3 import 'package:unittest/html_config.dart'; |
| 4 import 'dart:html'; |
| 5 |
| 6 // Test that the dart:html API does not leak native jsdom methods: |
| 7 // appendChild operation. |
| 8 |
| 9 main() { |
| 10 useHtmlConfiguration(); |
| 11 |
| 12 test('test1', () { |
| 13 document.body.children.add(new Element.html(r''' |
| 14 <div id='div1'> |
| 15 Hello World! |
| 16 </div>''')); |
| 17 Element e = document.query('#div1'); |
| 18 Element e2 = new Element.html(r"<div id='xx'>XX</div>"); |
| 19 expect(e, isNotNull); |
| 20 |
| 21 checkNoSuchMethod(() { confuse(e).appendChild(e2); }); |
| 22 |
| 23 }); |
| 24 } |
| 25 |
| 26 class Decoy { |
| 27 void appendChild(x) { throw 'dead code'; } |
| 28 } |
| 29 |
| 30 confuse(x) => opaqueTrue() ? x : (opaqueTrue() ? new Object() : new Decoy()); |
| 31 |
| 32 /** Returns [:true:], but in a way that confuses the compiler. */ |
| 33 opaqueTrue() => true; // Expand as needed. |
| 34 |
| 35 checkNoSuchMethod(action()) { |
| 36 var ex = null; |
| 37 bool threw = false; |
| 38 try { |
| 39 action(); |
| 40 } catch (e) { |
| 41 threw = true; |
| 42 ex = e; |
| 43 } |
| 44 if (!threw) |
| 45 expect(false, isTrue, reason: 'Action should have thrown exception'); |
| 46 |
| 47 expect(ex, isNoSuchMethodError); |
| 48 } |
OLD | NEW |