// Copyright (c) 2018, 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.

// dart2jsOptions=--strong

// Regression test checking that nsm-forwarders do not get installed for private
// members of other libraries. See  https://dartbug.com/33665

import 'package:expect/expect.dart';
import 'no_such_method_strong11_lib.dart';

abstract class J {
  int _m3();
  int _m4();
}

class A implements I, J {
  int _m1() => 1;
  int _m3() => 3;
  noSuchMethod(Invocation m) => -1;
}

main() {
  dynamic a = confuse(new A());
  Expect.equals(1, a._m1());
  Expect.equals(3, a._m3());
  Expect.equals(1, (a._m1)());
  Expect.equals(3, (a._m3)());

  Expect.equals(-1, a._m2());
  Expect.equals(-1, a._m4());
  Expect.isFalse(a._m2 is Function);
  Expect.equals(-1, a._m2);
  Expect.isTrue(a._m4 is Function);
  Expect.equals(-1, (a._m4)());
}

@NoInline()
@AssumeDynamic()
confuse(x) => x;
