| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 import 'native_testing.dart'; | 5 import "dart:_js_helper"; |
| 6 import "package:expect/expect.dart"; |
| 6 | 7 |
| 7 // Test that hidden native exception classes can be marked as existing. | 8 // Test that hidden native exception classes can be marked as existing. |
| 8 // | 9 // |
| 9 // To infer which native hidden types exist, we need | 10 // To infer which native hidden types exist, we need |
| 10 // (1) return types of native methods and getters | 11 // (1) return types of native methods and getters |
| 11 // (2) argument types of callbacks | 12 // (2) argument types of callbacks |
| 12 // (3) exceptions thrown by the operation. | 13 // (3) exceptions thrown by the operation. |
| 13 // | 14 // |
| 14 // (1) and (2) can be achieved by having nicely typed native methods, but there | 15 // (1) and (2) can be achieved by having nicely typed native methods, but there |
| 15 // is no place in the Dart language to communicate (3). So we use the following | 16 // is no place in the Dart language to communicate (3). So we use the following |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 49 void setup2() native """ | 50 void setup2() native """ |
| 50 // This code is all inside 'setup2' and so not accesible from the global scope. | 51 // This code is all inside 'setup2' and so not accesible from the global scope. |
| 51 function E(x){ this.code = x; } | 52 function E(x){ this.code = x; } |
| 52 | 53 |
| 53 function A(){} | 54 function A(){} |
| 54 A.prototype.op = function (x) { | 55 A.prototype.op = function (x) { |
| 55 if (x & 1) throw new E(100); | 56 if (x & 1) throw new E(100); |
| 56 return x / 2; | 57 return x / 2; |
| 57 }; | 58 }; |
| 58 makeA = function(){return new A}; | 59 makeA = function(){return new A}; |
| 59 | |
| 60 self.nativeConstructor(E); | |
| 61 self.nativeConstructor(A); | |
| 62 """; | 60 """; |
| 63 | 61 |
| 64 int inscrutable(int x) => x == 0 ? 0 : x | inscrutable(x & (x - 1)); | 62 int inscrutable(int x) => x == 0 ? 0 : x | inscrutable(x & (x - 1)); |
| 65 | 63 |
| 66 main() { | 64 main() { |
| 67 nativeTesting(); | |
| 68 setup1(); | 65 setup1(); |
| 69 setup2(); | 66 setup2(); |
| 70 | 67 |
| 71 var things = [makeA(), new B()]; | 68 var things = [makeA(), new B()]; |
| 72 var a = things[inscrutable(0)]; | 69 var a = things[inscrutable(0)]; |
| 73 var b = things[inscrutable(1)]; | 70 var b = things[inscrutable(1)]; |
| 74 | 71 |
| 75 Expect.equals(25, a.op(50)); | 72 Expect.equals(25, a.op(50)); |
| 76 Expect.equals(123, b.op('hello')); | 73 Expect.equals(123, b.op('hello')); |
| 77 Expect.equals(666, b.code); | 74 Expect.equals(666, b.code); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 97 threw = false; | 94 threw = false; |
| 98 try { | 95 try { |
| 99 var x = aa.op(51); | 96 var x = aa.op(51); |
| 100 } on E catch (e) { | 97 } on E catch (e) { |
| 101 threw = true; | 98 threw = true; |
| 102 Expect.equals(100, e.code); | 99 Expect.equals(100, e.code); |
| 103 Expect.isTrue(e is E); | 100 Expect.isTrue(e is E); |
| 104 } | 101 } |
| 105 Expect.isTrue(threw); | 102 Expect.isTrue(threw); |
| 106 } | 103 } |
| OLD | NEW |