// Copyright (c) 2013, 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 that native classes can access methods defined only by mixins.

@Native("A")
class A {
  foo(x, [y]) => '$x;$y';
}

@Native("B")
class B extends A with M1, M2, M3 {}

class M1 {}

class M2 {
  // These methods are only defined in this non-first, non-last mixin.
  plain(x) => 'P $x';
  bar(x, [y]) => '$y,$x';
}

class M3 {}

makeB() native;

void setup() {
  JS('', r"""
(function(){
  function B() {}
  self.makeB = function(){return new B()};

  self.nativeConstructor(B);
})()""");
  applyTestExtensions(['B']);
}

main() {
  nativeTesting();
  setup();

  B b = makeB();
  Expect.equals('1;2', b.foo(1, 2));
  Expect.equals('2;null', b.foo(2));
  Expect.equals('P 3', b.plain(3));
  Expect.equals('100,4', b.bar(4, 100));
  Expect.equals('null,5', b.bar(5));
}
