blob: d18380760518d2b7a8a3cbf54c945ecd61d7cc2b [file] [log] [blame]
// 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.
// @dart = 2.7
import "native_testing.dart";
// Test that hidden native class names are not used by generated code.
@Native("BB")
class AA {
get name => 'AA';
static AA create() => makeA();
}
@Native("CC")
class BB {
get name => 'BB';
static BB create() => makeB();
}
class CC {
// Ordinary class with name clashing with native class.
get name => 'CC';
static CC create() => new CC();
}
makeA() native;
makeB() native;
void setup1() {
JS('', r"""
(function(){
// Poison hidden native names 'BB' and 'CC' to prove the compiler didn't place
// anything on the hidden native class.
BB = null;
CC = null;
})()""");
applyTestExtensions(['BB', 'CC']);
}
void setup2() {
JS('', r"""
(function(){
// This code is inside 'setup' and so not accessible from the global scope.
function BB(){}
function CC(){}
self.makeA = function(){return new BB()}; // AA is native "BB"
self.makeB = function(){return new CC()}; // BB is native "CC"
self.nativeConstructor(BB);
self.nativeConstructor(CC);
})()""");
}
main() {
nativeTesting();
setup1();
setup2();
var a = confuse(AA.create());
var b = confuse(BB.create());
var c = confuse(CC.create());
Expect.equals('AA', a.name);
Expect.equals('BB', b.name);
Expect.equals('CC', c.name);
}