912005267d
Change-Id: I46be49b2effec3e38a3dc44cd45cfe736f77fa78 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/182680 Commit-Queue: Sigmund Cherem <sigmund@google.com> Reviewed-by: Joshua Litt <joshualitt@google.com> Reviewed-by: Nicholas Shahan <nshahan@google.com> Reviewed-by: Stephen Adams <sra@google.com>
79 lines
1.7 KiB
Dart
79 lines
1.7 KiB
Dart
// 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 for correct hidden native class when abstract class has same name.
|
|
|
|
library main;
|
|
|
|
import 'dart:_js_helper';
|
|
import 'dart:_foreign_helper' show JS;
|
|
|
|
import 'native_testing.dart';
|
|
|
|
// 'I' is the name of an abstract class and the name of the native class.
|
|
|
|
abstract class I {
|
|
I read();
|
|
write(I x);
|
|
}
|
|
|
|
// Native impl has same name as abstract class.
|
|
@Native("I")
|
|
class Impl implements I {
|
|
Impl read() native;
|
|
write(I x) native;
|
|
}
|
|
|
|
makeI() => JS('creates:Impl; returns:I;', 'makeI()');
|
|
|
|
void setup() {
|
|
JS('', r"""
|
|
(function(){
|
|
// This code is all inside 'setup' and so not accessible from the global
|
|
// scope.
|
|
function I(){}
|
|
I.prototype.read = function() { return this._x; };
|
|
I.prototype.write = function(x) { this._x = x; };
|
|
self.makeI = function(){return new I()};
|
|
self.nativeConstructor(I);
|
|
})()""");
|
|
applyTestExtensions(['I']);
|
|
}
|
|
|
|
// A pure Dart implementation of I.
|
|
|
|
class ProxyI implements I {
|
|
ProxyI? b;
|
|
ProxyI read() {
|
|
return b!;
|
|
}
|
|
|
|
write(I x) {
|
|
b = x as ProxyI;
|
|
}
|
|
}
|
|
|
|
main() {
|
|
nativeTesting();
|
|
setup();
|
|
|
|
var a1 = makeI();
|
|
var a2 = makeI();
|
|
var b1 = new ProxyI();
|
|
var b2 = new ProxyI();
|
|
var ob = new Object();
|
|
|
|
Expect.isFalse(ob is I, 'ob is I');
|
|
Expect.isFalse(ob is ProxyI, 'ob is ProxyI');
|
|
|
|
Expect.isTrue(b1 is I, 'b1 is I');
|
|
Expect.isTrue(b1 is ProxyI, 'b1 is ProxyI');
|
|
|
|
Expect.isTrue(a1 is I, 'a1 is I');
|
|
Expect.isFalse(a1 is ProxyI, 'a1 is ProxyI');
|
|
|
|
Expect.isTrue(confuse(a1) is I, 'a1 is I');
|
|
Expect.isFalse(confuse(a1) is ProxyI, 'a1 is ProxyI');
|
|
}
|