| Index: test/codegen/lib/mirrors/generics_substitution_test.dart | 
| diff --git a/test/codegen/lib/mirrors/generics_substitution_test.dart b/test/codegen/lib/mirrors/generics_substitution_test.dart | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..de13f2e4d40048107c0d699f809751632deed654 | 
| --- /dev/null | 
| +++ b/test/codegen/lib/mirrors/generics_substitution_test.dart | 
| @@ -0,0 +1,55 @@ | 
| +// 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.generics_substitution; | 
| + | 
| +import 'dart:mirrors'; | 
| +import 'package:expect/expect.dart'; | 
| + | 
| +class SuperGeneric<R, S> { | 
| +  R r; | 
| +  s(S s) {} | 
| +} | 
| + | 
| +class Generic<T> extends SuperGeneric<T, int> { | 
| +  T t() {} | 
| +} | 
| + | 
| +main() { | 
| +  ClassMirror genericDecl = reflectClass(Generic); | 
| +  ClassMirror genericOfString = reflect(new Generic<String>()).type; | 
| +  ClassMirror superGenericDecl = reflectClass(SuperGeneric); | 
| +  ClassMirror superOfTAndInt = genericDecl.superclass; | 
| +  ClassMirror superOfStringAndInt = genericOfString.superclass; | 
| + | 
| +  Expect.isTrue(genericDecl.isOriginalDeclaration); | 
| +  Expect.isFalse(genericOfString.isOriginalDeclaration); | 
| +  Expect.isTrue(superGenericDecl.isOriginalDeclaration); | 
| +  Expect.isFalse(superOfTAndInt.isOriginalDeclaration); | 
| +  Expect.isFalse(superOfStringAndInt.isOriginalDeclaration); | 
| + | 
| +  Symbol r(ClassMirror cm) => | 
| +      (cm.declarations[#r] as VariableMirror).type.simpleName; | 
| +  Symbol s(ClassMirror cm) => | 
| +      (cm.declarations[#s] as MethodMirror).parameters[0].type.simpleName; | 
| +  Symbol t(ClassMirror cm) => | 
| +      (cm.declarations[#t] as MethodMirror).returnType.simpleName; | 
| + | 
| +  Expect.equals(#T, r(genericDecl.superclass)); | 
| +  Expect.equals(#int, s(genericDecl.superclass)); | 
| +  Expect.equals(#T, t(genericDecl)); | 
| + | 
| +  Expect.equals(#String, r(genericOfString.superclass)); | 
| +  Expect.equals(#int, s(genericOfString.superclass)); | 
| +  Expect.equals(#String, t(genericOfString)); | 
| + | 
| +  Expect.equals(#R, r(superGenericDecl)); | 
| +  Expect.equals(#S, s(superGenericDecl)); | 
| + | 
| +  Expect.equals(#T, r(superOfTAndInt)); | 
| +  Expect.equals(#int, s(superOfTAndInt)); | 
| + | 
| +  Expect.equals(#String, r(superOfStringAndInt)); | 
| +  Expect.equals(#int, s(superOfStringAndInt)); | 
| +} | 
|  |