| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | |
| 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. | |
| 4 | |
| 5 // VMOptions=--support_find_in_context=true | |
| 6 | |
| 7 // Regression test: this used to crash the VM. | |
| 8 | |
| 9 library test.find_in_context_fake_function; | |
| 10 | |
| 11 import "dart:mirrors"; | |
| 12 import "package:expect/expect.dart"; | |
| 13 | |
| 14 var topLevelField = 1; | |
| 15 get topLevelGetter => 2; | |
| 16 topLevelFunction() => 3; | |
| 17 | |
| 18 class FakeFunction1 { | |
| 19 var field = 4; | |
| 20 get getter => 5; | |
| 21 method() => 6; | |
| 22 static var staticField = 7; | |
| 23 static get staticGetter => 8; | |
| 24 staticFunction() => 9; | |
| 25 call(x) { | |
| 26 var local = x * 2; | |
| 27 return local; | |
| 28 } | |
| 29 } | |
| 30 | |
| 31 class FakeFunction2 implements Function { | |
| 32 var field = 10; | |
| 33 get getter => 11; | |
| 34 method() => 12; | |
| 35 static var staticField = 13; | |
| 36 static get staticGetter => 14; | |
| 37 staticFunction() => 15; | |
| 38 noSuchMethod(msg) { | |
| 39 var local = msg.positionalArguments; | |
| 40 if (msg.memberName != #call) return super.noSuchMethod(msg); | |
| 41 return local.join('+'); | |
| 42 } | |
| 43 } | |
| 44 | |
| 45 doFindInContext(cm, name, value) { | |
| 46 Expect.equals(value, | |
| 47 cm.findInContext(name).reflectee); | |
| 48 } | |
| 49 dontFindInContext(cm, name) { | |
| 50 Expect.isNull(cm.findInContext(name)); | |
| 51 } | |
| 52 | |
| 53 main() { | |
| 54 ClosureMirror cm = reflect(new FakeFunction1()); | |
| 55 dontFindInContext(cm, #local); | |
| 56 dontFindInContext(cm, const Symbol('this')); | |
| 57 dontFindInContext(cm, #field); | |
| 58 dontFindInContext(cm, #getter); | |
| 59 dontFindInContext(cm, #method); | |
| 60 dontFindInContext(cm, #staticField); | |
| 61 dontFindInContext(cm, #staticGetter); | |
| 62 dontFindInContext(cm, #staticFunction); | |
| 63 dontFindInContext(cm, #topLevelField); | |
| 64 dontFindInContext(cm, #topLevelGetter); | |
| 65 dontFindInContext(cm, #topLevelFunction); | |
| 66 | |
| 67 cm = reflect(new FakeFunction2()); | |
| 68 dontFindInContext(cm, #local); | |
| 69 dontFindInContext(cm, const Symbol('this')); | |
| 70 dontFindInContext(cm, #field); | |
| 71 dontFindInContext(cm, #getter); | |
| 72 dontFindInContext(cm, #method); | |
| 73 dontFindInContext(cm, #staticField); | |
| 74 dontFindInContext(cm, #staticGetter); | |
| 75 dontFindInContext(cm, #staticFunction); | |
| 76 dontFindInContext(cm, #topLevelField); | |
| 77 dontFindInContext(cm, #topLevelGetter); | |
| 78 dontFindInContext(cm, #topLevelFunction); | |
| 79 } | |
| OLD | NEW |