// 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));
}
