blob: abc22afb505da255e3a364cf6e350b821c363e2b [file] [log] [blame]
// Copyright (c) 2014, 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.
// @dart = 2.7
import "native_testing.dart";
@Native("A")
class A {
var foo;
}
class B {
var foo;
}
nativeId(x) native;
void setup() {
JS('', r"""
(function(){
self.nativeId = function(x) { return x; }
})()""");
}
main() {
setup();
var b = new B();
b.foo = (x) => x + 1;
b = nativeId(b); // Inferrer doesn't know if A has been instantiated.
// At this point b could be A or B. The call to "foo" thus needs to go through
// an interceptor. Tests that the interceptor works for retrieving the field
// and invoking the closure.
// Use a type-check to guarantee that b is a "B".
if (b is B) {
Expect.equals(499, b.foo(498));
}
}