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

// @dart = 2.9

library test.repeated_private_anon_mixin_app;

// Regression test for symbol mangling.

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

import 'repeated_private_anon_mixin_app1.dart' as lib1;
import 'repeated_private_anon_mixin_app2.dart' as lib2;

testMA() {
  Symbol name1 = reflectClass(lib1.MA).superclass.simpleName;
  Symbol name2 = reflectClass(lib2.MA).superclass.simpleName;

  Expect.equals('lib._S with lib._M', MirrorSystem.getName(name1));
  Expect.equals('lib._S with lib._M', MirrorSystem.getName(name2));

  Expect.notEquals(name1, name2);
  Expect.notEquals(name2, name1);
}

testMA2() {
  Symbol name1 = reflectClass(lib1.MA2).superclass.simpleName;
  Symbol name2 = reflectClass(lib2.MA2).superclass.simpleName;

  Expect.equals('lib._S with lib._M, lib._M2', MirrorSystem.getName(name1));
  Expect.equals('lib._S with lib._M, lib._M2', MirrorSystem.getName(name2));

  Expect.notEquals(name1, name2);
  Expect.notEquals(name2, name1);
}

main() {
  testMA();
  testMA2();
}
