// 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.

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  + ')';
  };
  makeE = function(){return new HTMLGoofyElement()};

  // A non-HTML element with a misleading name.
  function HTMLFakeyElement(){}
  HTMLFakeyElement.prototype.nativeMethod = function(a) {
    return 'Fakey.nativeMethod(' + a  + ')';
  };
  makeF = function(){return new HTMLFakeyElement()};

  self.nativeConstructor(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');
}
