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