OLD | NEW |
| (Empty) |
1 #library('HiddenDom2Test'); | |
2 #import('../../../../lib/unittest/unittest.dart'); | |
3 #import('../../../../lib/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.elements.add(new Element.html(@''' | |
14 <div id='div1'> | |
15 Hello World! | |
16 </div>''')); | |
17 Element e = document.query('#div1'); | |
18 Element e2 = new Element.html(@"<div id='xx'>XX</div>"); | |
19 Expect.isTrue(e != null); | |
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 (var e) { | |
41 threw = true; | |
42 ex = e; | |
43 } | |
44 if (!threw) | |
45 Expect.fail('Action should have thrown exception'); | |
46 | |
47 Expect.isTrue(ex is NoSuchMethodException, 'ex is NoSuchMethodException'); | |
48 } | |
OLD | NEW |