Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(308)

Unified Diff: tests/language/src/NativeClassInheritance3FrogTest.dart

Issue 8674009: Test for finding correct method for overriden native method of hidden native class. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Rename first test to be '1' Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tests/language/src/NativeClassInheritance2FrogTest.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/language/src/NativeClassInheritance3FrogTest.dart
diff --git a/tests/language/src/NativeClassInheritance3FrogTest.dart b/tests/language/src/NativeClassInheritance3FrogTest.dart
new file mode 100644
index 0000000000000000000000000000000000000000..d6d98367f074566bf2d6ec8661a00e5ebc737f7d
--- /dev/null
+++ b/tests/language/src/NativeClassInheritance3FrogTest.dart
@@ -0,0 +1,98 @@
+// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Test to see if resolving a hidden native class's method to noSuchMethod
+// interferes with subsequent resolving of the method. This might happen if the
+// noSuchMethod is cached on Object.prototype.
+
+class A1 native "*A1" {
+ foo() native;
+}
+
+class B1 extends A1 native "*B1" {
+}
+
+makeA1() native;
+makeB1() native;
+
+
+class A2 native "*A2" {
+ foo([a=99]) native;
+}
+
+class B2 extends A2 native "*B2" {
+}
+
+makeA2() native;
+makeB2() native;
+
+makeObject() native;
+
+void setup() native """
+// This code is all inside 'setup' and so not accesible from the global scope.
+function inherits(child, parent) {
+ if (child.prototype.__proto__) {
+ child.prototype.__proto__ = parent.prototype;
+ } else {
+ function tmp() {};
+ tmp.prototype = parent.prototype;
+ child.prototype = new tmp();
+ child.prototype.constructor = child;
+ }
+}
+function A1(){}
+function B1(){}
+inherits(B1, A1);
+
+makeA1 = function(){return new A1};
+makeB1 = function(){return new B1};
+
+function A2(){}
+function B2(){}
+inherits(B2, A2);
+A2.prototype.foo = function(a){return 'A2.foo(' + a + ')';}
+
+makeA2 = function(){return new A2};
+makeB2 = function(){return new B2};
+
+makeObject = function(){return new Object};
+""";
+
+
+main() {
+ setup();
+
+ var a1 = makeA1();
+ var b1 = makeB1();
+ var ob = makeObject();
+
+ // Does calling missing methods in one tree of inheritance forest affect other
+ // trees?
+ expectNoSuchMethod(() => b1.foo(), 'b1.foo()');
+ expectNoSuchMethod(() => a1.foo(), 'a1.foo()');
+ expectNoSuchMethod(() => ob.foo(), 'ob.foo()');
+
+ var a2 = makeA2();
+ var b2 = makeB2();
+
+ Expect.equals('A2.foo(99)', a2.foo());
+ Expect.equals('A2.foo(99)', b2.foo());
+ Expect.equals('A2.foo(1)', a2.foo(1));
+ Expect.equals('A2.foo(2)', b2.foo(2));
+
+
+ expectNoSuchMethod(() => b1.foo(3), 'b1.foo(3)');
+ expectNoSuchMethod(() => a1.foo(4), 'a1.foo(4)');
+}
+
+expectNoSuchMethod(action, note) {
+ bool caught = false;
+ try {
+ action();
+ } catch (var ex) {
+ caught = true;
+ Expect.isTrue(ex is NoSuchMethodException, note);
+ }
+ Expect.isTrue(caught, note);
+}
« no previous file with comments | « tests/language/src/NativeClassInheritance2FrogTest.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698