// 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 to see if novel HTML tags are interpreted as HTMLElement. @Native("HTMLElement") class Element { String dartMethod(int x) => 'dartMethod(${nativeMethod(x + 1)})'; String nativeMethod(int x) native; } makeE() native; makeF() native; void setup() { JS('', r""" (function(){ // A novel HTML element. function HTMLGoofyElement(){} HTMLGoofyElement.prototype.nativeMethod = function(a) { return 'Goofy.nativeMethod(' + a + ')'; }; self.makeE = function(){return new HTMLGoofyElement()}; // A non-HTML element with a misleading name. function HTMLFakeyElement(){} HTMLFakeyElement.prototype.nativeMethod = function(a) { return 'Fakey.nativeMethod(' + a + ')'; }; self.makeF = function(){return new HTMLFakeyElement()}; self.nativeConstructor(HTMLGoofyElement); })()"""); applyTestExtensions(['HTMLGoofyElement']); } main() { nativeTesting(); setup(); var e = makeE(); Expect.equals('Goofy.nativeMethod(10)', e.nativeMethod(10)); Expect.equals('dartMethod(Goofy.nativeMethod(11))', e.dartMethod(10)); var f = makeF(); Expect.throws(() => f.nativeMethod(20), (e) => e is NoSuchMethodError, 'fake HTML Element must not run Dart method on native class'); Expect.throws(() => f.dartMethod(20), (e) => e is NoSuchMethodError, 'fake HTML Element must not run native method on native class'); }