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

// Ensure that classes handled specially by dart2js can be reflected on.

library test.intercepted_class_test;

@MirrorsUsed(targets: "dart.core")
import 'dart:mirrors';

import 'stringify.dart' show stringify, expect;

checkClassMirrorMethods(ClassMirror cls) {
  var variables = new Map();
  cls.declarations.forEach((Symbol key, DeclarationMirror value) {
    if (value is VariableMirror && !value.isStatic && !value.isPrivate) {
      variables[key] = value;
    }
  });
  expect('{}', variables);
}

checkClassMirror(ClassMirror cls, String name) {
  expect('s($name)', cls.simpleName);
  checkClassMirrorMethods(cls);
}

main() {
  checkClassMirror(reflectClass(String), 'String');
  checkClassMirror(reflectClass(int), 'int');
  checkClassMirror(reflectClass(double), 'double');
  checkClassMirror(reflectClass(num), 'num');
  checkClassMirror(reflectClass(bool), 'bool');
  checkClassMirror(reflectClass(List), 'List');
}
