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

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

import 'stringify.dart';
import 'declarations_model.dart' as declarations_model;

Set<DeclarationMirror> inheritedDeclarations(ClassMirror cm) {
  var decls = new Set<DeclarationMirror>();
  while (cm != null) {
    decls.addAll(cm.declarations.values);
    cm = cm.superclass;
  }
  return decls;
}

main() {
  ClassMirror cm = reflectClass(declarations_model.Class);

  Expect.setEquals(
   ['Variable(s(_instanceVariable) in s(Class), private)',
    'Variable(s(_staticVariable) in s(Class), private, static)',
    'Variable(s(instanceVariable) in s(Class))',
    'Variable(s(staticVariable) in s(Class), static)'],
    cm.declarations.values
        .where((dm) => dm is VariableMirror).map(stringify),
    'variables');

  Expect.setEquals(
   ['Method(s(_instanceGetter) in s(Class), private, getter)',
    'Method(s(_staticGetter) in s(Class), private, static, getter)',
    'Method(s(instanceGetter) in s(Class), getter)',
    'Method(s(staticGetter) in s(Class), static, getter)'],
    cm.declarations.values
        .where((dm) => dm is MethodMirror && dm.isGetter).map(stringify),
    'getters');

  Expect.setEquals(
   ['Method(s(_instanceSetter=) in s(Class), private, setter)',
    'Method(s(_staticSetter=) in s(Class), private, static, setter)',
    'Method(s(instanceSetter=) in s(Class), setter)',
    'Method(s(staticSetter=) in s(Class), static, setter)'],
    cm.declarations.values
        .where((dm) => dm is MethodMirror && dm.isSetter).map(stringify),
    'setters');

  // dart2js stops testing here.
  return;  /// 01: ok

  Expect.setEquals(
   ['Method(s(+) in s(Class))',
    'Method(s(_instanceMethod) in s(Class), private)',
    'Method(s(_staticMethod) in s(Class), private, static)',
    'Method(s(abstractMethod) in s(Class), abstract)',
    'Method(s(instanceMethod) in s(Class))',
    'Method(s(staticMethod) in s(Class), static)'],
    cm.declarations.values
        .where((dm) => dm is MethodMirror && dm.isRegularMethod).map(stringify),
    'regular methods');

  Expect.setEquals(
   ['Method(s(Class._generativeConstructor) in s(Class), private, constructor)',
    'Method(s(Class._normalFactory) in s(Class), private, static, constructor)',
    'Method(s(Class._redirectingConstructor)'
        ' in s(Class), private, constructor)',
    'Method(s(Class._redirectingFactory)'
        ' in s(Class), private, static, constructor)',
    'Method(s(Class.generativeConstructor) in s(Class), constructor)',
    'Method(s(Class.normalFactory) in s(Class), static, constructor)',
    'Method(s(Class.redirectingConstructor) in s(Class), constructor)',
    'Method(s(Class.redirectingFactory) in s(Class), static, constructor)'],
    cm.declarations.values
        .where((dm) => dm is MethodMirror && dm.isConstructor).map(stringify),
    'constructors and factories');

  Expect.setEquals(
   ['Method(s(Class._normalFactory) in s(Class), private, static, constructor)',
    'Method(s(Class._redirectingFactory)'
        ' in s(Class), private, static, constructor)',
    'Method(s(Class.normalFactory) in s(Class), static, constructor)',
    'Method(s(Class.redirectingFactory) in s(Class), static, constructor)',
    'Method(s(_staticGetter) in s(Class), private, static, getter)',
    'Method(s(_staticMethod) in s(Class), private, static)',
    'Method(s(_staticSetter=) in s(Class), private, static, setter)',
    'Variable(s(_staticVariable) in s(Class), private, static)',
    'Method(s(staticGetter) in s(Class), static, getter)',
    'Method(s(staticMethod) in s(Class), static)',
    'Method(s(staticSetter=) in s(Class), static, setter)',
    'Variable(s(staticVariable) in s(Class), static)'],
    cm.declarations.values.where((dm) => dm.isStatic).map(stringify),
    'statics');

  Expect.setEquals(
   ['Method(s(+) in s(Class))',
    'TypeVariable(s(C) in s(Class),'
        ' upperBound = Class(s(Object) in s(dart.core), top-level))',
    'Method(s(Class._generativeConstructor) in s(Class), private, constructor)',
    'Method(s(Class._redirectingConstructor)'
        ' in s(Class), private, constructor)',
    'Method(s(Class.generativeConstructor) in s(Class), constructor)',
    'Method(s(Class.redirectingConstructor) in s(Class), constructor)',
    'Method(s(_instanceGetter) in s(Class), private, getter)',
    'Method(s(_instanceMethod) in s(Class), private)',
    'Method(s(_instanceSetter=) in s(Class), private, setter)',
    'Variable(s(_instanceVariable) in s(Class), private)',
    'Method(s(abstractMethod) in s(Class), abstract)',
    'Method(s(instanceGetter) in s(Class), getter)',
    'Method(s(instanceMethod) in s(Class))',
    'Method(s(instanceSetter=) in s(Class), setter)',
    'Variable(s(instanceVariable) in s(Class))'],
    cm.declarations.values.where((dm) => !dm.isStatic).map(stringify),
    'non-statics');

  Expect.setEquals(
   ['Method(s(+) in s(Class))',
    'TypeVariable(s(C) in s(Class),'
        ' upperBound = Class(s(Object) in s(dart.core), top-level))',
    'Method(s(Class.generativeConstructor) in s(Class), constructor)',
    'Method(s(Class.normalFactory) in s(Class), static, constructor)',
    'Method(s(Class.redirectingConstructor) in s(Class), constructor)',
    'Method(s(Class.redirectingFactory) in s(Class), static, constructor)',
    'Method(s(abstractMethod) in s(Class), abstract)',
    'Method(s(instanceGetter) in s(Class), getter)',
    'Method(s(instanceMethod) in s(Class))',
    'Method(s(instanceSetter=) in s(Class), setter)',
    'Variable(s(instanceVariable) in s(Class))',
    'Method(s(staticGetter) in s(Class), static, getter)',
    'Method(s(staticMethod) in s(Class), static)',
    'Method(s(staticSetter=) in s(Class), static, setter)',
    'Variable(s(staticVariable) in s(Class), static)'],
    cm.declarations.values.where((dm) => !dm.isPrivate).map(stringify),
    'public');

  Expect.setEquals(
   ['Method(s(*) in s(Mixin))',
    'Method(s(+) in s(Class))',
    'Method(s(-) in s(Superclass))',
    'Method(s(==) in s(Object))',
    'TypeVariable(s(C) in s(Class),'
        ' upperBound = Class(s(Object) in s(dart.core), top-level))',
    'Method(s(Class.generativeConstructor) in s(Class), constructor)',
    'Method(s(Class.normalFactory) in s(Class), static, constructor)',
    'Method(s(Class.redirectingConstructor) in s(Class), constructor)',
    'Method(s(Class.redirectingFactory) in s(Class), static, constructor)',
    'Method(s(Object) in s(Object), constructor)',
    'TypeVariable(s(S) in s(Superclass),'
        ' upperBound = Class(s(Object) in s(dart.core), top-level))',
    'Method(s(Superclass.inheritedGenerativeConstructor)'
        ' in s(Superclass), constructor)',
    'Method(s(Superclass.inheritedNormalFactory)'
        ' in s(Superclass), static, constructor)',
    'Method(s(Superclass.inheritedRedirectingConstructor)'
        ' in s(Superclass), constructor)',
    'Method(s(Superclass.inheritedRedirectingFactory)'
        ' in s(Superclass), static, constructor)',
    'Method(s(abstractMethod) in s(Class), abstract)',
    'Method(s(hashCode) in s(Object), getter)',
    'Method(s(inheritedInstanceGetter) in s(Superclass), getter)',
    'Method(s(inheritedInstanceMethod) in s(Superclass))',
    'Method(s(inheritedInstanceSetter=) in s(Superclass), setter)',
    'Variable(s(inheritedInstanceVariable) in s(Superclass))',
    'Method(s(inheritedStaticGetter) in s(Superclass), static, getter)',
    'Method(s(inheritedStaticMethod) in s(Superclass), static)',
    'Method(s(inheritedStaticSetter=) in s(Superclass), static, setter)',
    'Variable(s(inheritedStaticVariable) in s(Superclass), static)',
    'Method(s(instanceGetter) in s(Class), getter)',
    'Method(s(instanceMethod) in s(Class))',
    'Method(s(instanceSetter=) in s(Class), setter)',
    'Variable(s(instanceVariable) in s(Class))',
    'Method(s(mixinInstanceGetter) in s(Mixin), getter)',
    'Method(s(mixinInstanceMethod) in s(Mixin))',
    'Method(s(mixinInstanceSetter=) in s(Mixin), setter)',
    'Variable(s(mixinInstanceVariable) in s(Mixin))',
    'Method(s(noSuchMethod) in s(Object))',
    'Method(s(runtimeType) in s(Object), getter)',
    'Method(s(staticGetter) in s(Class), static, getter)',
    'Method(s(staticMethod) in s(Class), static)',
    'Method(s(staticSetter=) in s(Class), static, setter)',
    'Variable(s(staticVariable) in s(Class), static)',
    'Method(s(test.declarations_model.Superclass'
        ' with test.declarations_model.Mixin.inheritedGenerativeConstructor)'
        ' in s(test.declarations_model.Superclass'
        ' with test.declarations_model.Mixin), constructor)',
    'Method(s(test.declarations_model.Superclass'
        ' with test.declarations_model.Mixin.inheritedRedirectingConstructor)'
        ' in s(test.declarations_model.Superclass'
        ' with test.declarations_model.Mixin), constructor)',
    'Method(s(toString) in s(Object))'],
    inheritedDeclarations(cm).where((dm) => !dm.isPrivate).map(stringify),
    'transitive public');
  // The public members of Object should be the same in all implementations, so
  // we don't exclude Object here.

  Expect.setEquals(
   ['Method(s(+) in s(Class))',
    'TypeVariable(s(C) in s(Class),'
        ' upperBound = Class(s(Object) in s(dart.core), top-level))',
    'Method(s(Class._generativeConstructor) in s(Class), private, constructor)',
    'Method(s(Class._normalFactory) in s(Class), private, static, constructor)',
    'Method(s(Class._redirectingConstructor)'
        ' in s(Class), private, constructor)',
    'Method(s(Class._redirectingFactory)'
        ' in s(Class), private, static, constructor)',
    'Method(s(Class.generativeConstructor) in s(Class), constructor)',
    'Method(s(Class.normalFactory) in s(Class), static, constructor)',
    'Method(s(Class.redirectingConstructor) in s(Class), constructor)',
    'Method(s(Class.redirectingFactory) in s(Class), static, constructor)',
    'Method(s(_instanceGetter) in s(Class), private, getter)',
    'Method(s(_instanceMethod) in s(Class), private)',
    'Method(s(_instanceSetter=) in s(Class), private, setter)',
    'Variable(s(_instanceVariable) in s(Class), private)',
    'Method(s(_staticGetter) in s(Class), private, static, getter)',
    'Method(s(_staticMethod) in s(Class), private, static)',
    'Method(s(_staticSetter=) in s(Class), private, static, setter)',
    'Variable(s(_staticVariable) in s(Class), private, static)',
    'Method(s(abstractMethod) in s(Class), abstract)',
    'Method(s(instanceGetter) in s(Class), getter)',
    'Method(s(instanceMethod) in s(Class))',
    'Method(s(instanceSetter=) in s(Class), setter)',
    'Variable(s(instanceVariable) in s(Class))',
    'Method(s(staticGetter) in s(Class), static, getter)',
    'Method(s(staticMethod) in s(Class), static)',
    'Method(s(staticSetter=) in s(Class), static, setter)',
    'Variable(s(staticVariable) in s(Class), static)'],
    cm.declarations.values.map(stringify),
    'declarations');

  Expect.setEquals(
   ['Method(s(*) in s(Mixin))',
    'Method(s(+) in s(Class))',
    'Method(s(-) in s(Superclass))',
    'TypeVariable(s(C) in s(Class),'
        ' upperBound = Class(s(Object) in s(dart.core), top-level))',
    'Method(s(Class._generativeConstructor) in s(Class), private, constructor)',
    'Method(s(Class._normalFactory) in s(Class), private, static, constructor)',
    'Method(s(Class._redirectingConstructor)'
        ' in s(Class), private, constructor)',
    'Method(s(Class._redirectingFactory)'
        ' in s(Class), private, static, constructor)',
    'Method(s(Class.generativeConstructor) in s(Class), constructor)',
    'Method(s(Class.normalFactory) in s(Class), static, constructor)',
    'Method(s(Class.redirectingConstructor) in s(Class), constructor)',
    'Method(s(Class.redirectingFactory) in s(Class), static, constructor)',
    'TypeVariable(s(S) in s(Superclass),'
        ' upperBound = Class(s(Object) in s(dart.core), top-level))',
    'Method(s(Superclass._inheritedGenerativeConstructor)'
        ' in s(Superclass), private, constructor)',
    'Method(s(Superclass._inheritedNormalFactory)'
        ' in s(Superclass), private, static, constructor)',
    'Method(s(Superclass._inheritedRedirectingConstructor)'
        ' in s(Superclass), private, constructor)',
    'Method(s(Superclass._inheritedRedirectingFactory)'
        ' in s(Superclass), private, static, constructor)',
    'Method(s(Superclass.inheritedGenerativeConstructor)'
        ' in s(Superclass), constructor)',
    'Method(s(Superclass.inheritedNormalFactory)'
        ' in s(Superclass), static, constructor)',
    'Method(s(Superclass.inheritedRedirectingConstructor)'
        ' in s(Superclass), constructor)',
    'Method(s(Superclass.inheritedRedirectingFactory)'
        ' in s(Superclass), static, constructor)',
    'Method(s(_inheritedInstanceGetter) in s(Superclass), private, getter)',
    'Method(s(_inheritedInstanceMethod) in s(Superclass), private)',
    'Method(s(_inheritedInstanceSetter=) in s(Superclass), private, setter)',
    'Variable(s(_inheritedInstanceVariable) in s(Superclass), private)',
    'Method(s(_inheritedStaticGetter)'
        ' in s(Superclass), private, static, getter)',
    'Method(s(_inheritedStaticMethod) in s(Superclass), private, static)',
    'Method(s(_inheritedStaticSetter=)'
        ' in s(Superclass), private, static, setter)',
    'Variable(s(_inheritedStaticVariable) in s(Superclass), private, static)',
    'Method(s(_instanceGetter) in s(Class), private, getter)',
    'Method(s(_instanceMethod) in s(Class), private)',
    'Method(s(_instanceSetter=) in s(Class), private, setter)',
    'Variable(s(_instanceVariable) in s(Class), private)',
    'Method(s(_mixinInstanceGetter) in s(Mixin), private, getter)',
    'Method(s(_mixinInstanceMethod) in s(Mixin), private)',
    'Method(s(_mixinInstanceSetter=) in s(Mixin), private, setter)',
    'Variable(s(_mixinInstanceVariable) in s(Mixin), private)',
    'Method(s(_staticGetter) in s(Class), private, static, getter)',
    'Method(s(_staticMethod) in s(Class), private, static)',
    'Method(s(_staticSetter=) in s(Class), private, static, setter)',
    'Variable(s(_staticVariable) in s(Class), private, static)',
    'Method(s(abstractMethod) in s(Class), abstract)',
    'Method(s(inheritedInstanceGetter) in s(Superclass), getter)',
    'Method(s(inheritedInstanceMethod) in s(Superclass))',
    'Method(s(inheritedInstanceSetter=) in s(Superclass), setter)',
    'Variable(s(inheritedInstanceVariable) in s(Superclass))',
    'Method(s(inheritedStaticGetter) in s(Superclass), static, getter)',
    'Method(s(inheritedStaticMethod) in s(Superclass), static)',
    'Method(s(inheritedStaticSetter=) in s(Superclass), static, setter)',
    'Variable(s(inheritedStaticVariable) in s(Superclass), static)',
    'Method(s(instanceGetter) in s(Class), getter)',
    'Method(s(instanceMethod) in s(Class))',
    'Method(s(instanceSetter=) in s(Class), setter)',
    'Variable(s(instanceVariable) in s(Class))',
    'Method(s(mixinInstanceGetter) in s(Mixin), getter)',
    'Method(s(mixinInstanceMethod) in s(Mixin))',
    'Method(s(mixinInstanceSetter=) in s(Mixin), setter)',
    'Variable(s(mixinInstanceVariable) in s(Mixin))',
    'Method(s(staticGetter) in s(Class), static, getter)',
    'Method(s(staticMethod) in s(Class), static)',
    'Method(s(staticSetter=) in s(Class), static, setter)',
    'Variable(s(staticVariable) in s(Class), static)',
    'Method(s(test.declarations_model.Superclass'
        ' with test.declarations_model.Mixin._inheritedGenerativeConstructor)'
        ' in s(test.declarations_model.Superclass'
        ' with test.declarations_model.Mixin), private, constructor)',
    'Method(s(test.declarations_model.Superclass'
        ' with test.declarations_model.Mixin._inheritedRedirectingConstructor)'
        ' in s(test.declarations_model.Superclass'
        ' with test.declarations_model.Mixin), private, constructor)',
    'Method(s(test.declarations_model.Superclass'
        ' with test.declarations_model.Mixin.inheritedGenerativeConstructor)'
        ' in s(test.declarations_model.Superclass'
        ' with test.declarations_model.Mixin), constructor)',
    'Method(s(test.declarations_model.Superclass'
        ' with test.declarations_model.Mixin.inheritedRedirectingConstructor)'
        ' in s(test.declarations_model.Superclass'
        ' with test.declarations_model.Mixin), constructor)'],
    inheritedDeclarations(cm)
        .difference(reflectClass(Object).declarations.values.toSet())
        .map(stringify),
    'transitive less Object');
  // The private members of Object may vary across implementations, so we
  // exclude the declarations of Object in this test case.
}
