blob: 160e41a78778847c0df257b07d42b15f697c0752 [file] [log] [blame]
// Copyright (c) 2013, 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.
import "native_testing.dart";
// Test for dartExperimentalFixupGetTag.
@Native("A")
class Foo {
// There is one native class with dispatch tag 'A'.
token() native ;
}
void setup() native r"""
dartExperimentalFixupGetTag = function (originalGetTag) {
function fixedGetTag(obj) {
// Local JS 'class' B is made to be another implementation of the native
// class with tag 'A'.
if (obj instanceof B) return 'A';
// Other classes behave as before.
return originalGetTag(obj);
}
return fixedGetTag;
};
function A(){ }
A.prototype.token = function () { return 'isA'; }
function B(){ }
B.prototype.token = function () { return 'isB'; }
makeA = function() { return new A; };
makeB = function() { return new B; };
self.nativeConstructor(A);
""";
makeA() native ;
makeB() native ;
main() {
nativeTesting();
setup();
var a = makeA();
var b = makeB();
Expect.equals('isA', a.token());
// This call succeeds because the fixed-up 'getTag' method returns Foo's
// dispatch tag, and B is a faithful polyfil for Foo/A.
Expect.equals('isB', b.token());
Expect.isTrue(a is Foo);
Expect.isTrue(b is Foo);
}