| OLD | NEW |
| (Empty) |
| 1 #library('HiddenDom1Test'); | |
| 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 // onfocus setter. | |
| 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 Expect.isTrue(e != null); | |
| 19 | |
| 20 checkNoSuchMethod(() { confuse(e).onfocus = null; }); | |
| 21 }); | |
| 22 | |
| 23 } | |
| 24 | |
| 25 class Decoy { | |
| 26 void set onfocus(x) { throw 'dead code'; } | |
| 27 } | |
| 28 | |
| 29 confuse(x) => opaqueTrue() ? x : (opaqueTrue() ? new Object() : new Decoy()); | |
| 30 | |
| 31 /** Returns [:true:], but in a way that confuses the compiler. */ | |
| 32 opaqueTrue() => true; // Expand as needed. | |
| 33 | |
| 34 checkNoSuchMethod(action()) { | |
| 35 var ex = null; | |
| 36 try { | |
| 37 action(); | |
| 38 } catch (var e) { | |
| 39 ex = e; | |
| 40 } | |
| 41 if (ex === null) | |
| 42 Expect.fail('Action should have thrown exception'); | |
| 43 | |
| 44 Expect.isTrue(ex is NoSuchMethodException, 'ex is NoSuchMethodException'); | |
| 45 } | |
| OLD | NEW |