// Copyright (c) 2016, 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.mixin;

import 'dart:mirrors';

import 'package:expect/expect.dart';

class Super {}

class Mixin {}

class Mixin2 {}

class Class extends Super with Mixin {}

class MultipleMixins extends Class with Mixin2 {}

main() {
  Expect.equals(reflectClass(Class), reflectClass(Class).mixin);
  Expect.equals(reflectClass(Mixin), reflectClass(Class).superclass.mixin);
  Expect.equals(
      reflectClass(Super), reflectClass(Class).superclass.superclass.mixin);

  Expect.equals(
      reflectClass(MultipleMixins), reflectClass(MultipleMixins).mixin);
  Expect.equals(
      reflectClass(Mixin2), reflectClass(MultipleMixins).superclass.mixin);
  Expect.equals(reflectClass(Class),
      reflectClass(MultipleMixins).superclass.superclass.mixin);
  Expect.equals(reflectClass(Mixin),
      reflectClass(MultipleMixins).superclass.superclass.superclass.mixin);
  Expect.equals(
      reflectClass(Super),
      reflectClass(MultipleMixins)
          .superclass
          .superclass
          .superclass
          .superclass
          .mixin);
}
