// 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() native """
function B() {}
makeB = function(){return new B;};

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