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

library test.superclass;

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

checkSuperclassChain(ClassMirror? cm) {
  ClassMirror? last;
  do {
    last = cm;
    cm = cm!.superclass;
  } while (cm != null);
  Expect.equals(reflectClass(Object), last);
}

main() {
  checkSuperclassChain(reflect(null).type);
  checkSuperclassChain(reflect([]).type);
  checkSuperclassChain(reflect(<int>[]).type);
  checkSuperclassChain(reflect(0).type);
  checkSuperclassChain(reflect(1.5).type);
  checkSuperclassChain(reflect("str").type);
  checkSuperclassChain(reflect(true).type);
  checkSuperclassChain(reflect(false).type);
}
