| OLD | NEW |
| 1 import 'dart:html'; | 1 import 'dart:html'; |
| 2 | 2 |
| 3 import 'package:minitest/minitest.dart'; | 3 import 'package:expect/minitest.dart'; |
| 4 | 4 |
| 5 // Test that the dart:html API does not leak native jsdom methods: | 5 // Test that the dart:html API does not leak native jsdom methods: |
| 6 // appendChild operation. | 6 // appendChild operation. |
| 7 | 7 |
| 8 main() { | 8 main() { |
| 9 test('test1', () { | 9 test('test1', () { |
| 10 document.body.children.add(new Element.html(r''' | 10 document.body.children.add(new Element.html(r''' |
| 11 <div id='div1'> | 11 <div id='div1'> |
| 12 Hello World! | 12 Hello World! |
| 13 </div>''')); | 13 </div>''')); |
| 14 Element e = document.query('#div1'); | 14 Element e = document.query('#div1'); |
| 15 Element e2 = new Element.html(r"<div id='xx'>XX</div>"); | 15 Element e2 = new Element.html(r"<div id='xx'>XX</div>"); |
| 16 expect(e, isNotNull); | 16 expect(e, isNotNull); |
| 17 | 17 |
| 18 expect(() { confuse(e).appendChild(e2); }, throwsNoSuchMethodError); | 18 expect(() { confuse(e).appendChild(e2); }, throwsNoSuchMethodError); |
| 19 | 19 |
| 20 }); | 20 }); |
| 21 } | 21 } |
| 22 | 22 |
| 23 class Decoy { | 23 class Decoy { |
| 24 void appendChild(x) { throw 'dead code'; } | 24 void appendChild(x) { throw 'dead code'; } |
| 25 } | 25 } |
| 26 | 26 |
| 27 confuse(x) => opaqueTrue() ? x : (opaqueTrue() ? new Object() : new Decoy()); | 27 confuse(x) => opaqueTrue() ? x : (opaqueTrue() ? new Object() : new Decoy()); |
| 28 | 28 |
| 29 /** Returns `true`, but in a way that confuses the compiler. */ | 29 /** Returns `true`, but in a way that confuses the compiler. */ |
| 30 opaqueTrue() => true; // Expand as needed. | 30 opaqueTrue() => true; // Expand as needed. |
| OLD | NEW |