Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(371)

Unified Diff: pkg/kernel/test/verify_test.dart

Issue 2825053002: Add typedef AST node boilerplate. (Closed)
Patch Set: Update FastaVerifyingVisitor to work with the changes in VerifyingVisitor Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/kernel/test/typedef_unalias_test.dart ('k') | runtime/vm/kernel.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/kernel/test/verify_test.dart
diff --git a/pkg/kernel/test/verify_test.dart b/pkg/kernel/test/verify_test.dart
index 610111cf3656f66499b676c0f4d8b926e2cf4c87..3d4c51d67af167ad0c5d9308550d97073c4cad30 100644
--- a/pkg/kernel/test/verify_test.dart
+++ b/pkg/kernel/test/verify_test.dart
@@ -199,6 +199,171 @@ main() {
test.enclosingClass.addMember(constructor);
return new ConstructorInvocation(constructor, new Arguments.empty());
});
+ positiveTest('Valid typedef Foo = `(C) => void`', (TestHarness test) {
+ var typedef_ = new Typedef(
+ 'Foo', new FunctionType([test.otherClass.rawType], const VoidType()));
+ test.enclosingLibrary.addTypedef(typedef_);
+ });
+ positiveTest('Valid typedef Foo = C<dynamic>', (TestHarness test) {
+ var typedef_ = new Typedef(
+ 'Foo', new InterfaceType(test.otherClass, [const DynamicType()]));
+ test.enclosingLibrary.addTypedef(typedef_);
+ });
+ positiveTest('Valid typedefs Foo = Bar, Bar = C', (TestHarness test) {
+ var foo = new Typedef('Foo', null);
+ var bar = new Typedef('Bar', null);
+ foo.type = new TypedefType(bar);
+ bar.type = test.otherClass.rawType;
+ test.enclosingLibrary.addTypedef(foo);
+ test.enclosingLibrary.addTypedef(bar);
+ });
+ positiveTest('Valid typedefs Foo = C<Bar>, Bar = C', (TestHarness test) {
+ var foo = new Typedef('Foo', null);
+ var bar = new Typedef('Bar', null);
+ foo.type = new InterfaceType(test.otherClass, [new TypedefType(bar)]);
+ bar.type = test.otherClass.rawType;
+ test.enclosingLibrary.addTypedef(foo);
+ test.enclosingLibrary.addTypedef(bar);
+ });
+ positiveTest('Valid typedef type in field', (TestHarness test) {
+ var typedef_ = new Typedef(
+ 'Foo', new FunctionType([test.otherClass.rawType], const VoidType()));
+ var field = new Field(new Name('field'), type: new TypedefType(typedef_));
+ test.enclosingLibrary.addTypedef(typedef_);
+ test.enclosingLibrary.addMember(field);
+ });
+ negativeTest('Invalid typedef Foo = Foo', (TestHarness test) {
+ var typedef_ = new Typedef('Foo', null);
+ typedef_.type = new TypedefType(typedef_);
+ test.enclosingLibrary.addTypedef(typedef_);
+ });
+ negativeTest('Invalid typedef Foo = `(Foo) => void`', (TestHarness test) {
+ var typedef_ = new Typedef('Foo', null);
+ typedef_.type =
+ new FunctionType([new TypedefType(typedef_)], const VoidType());
+ test.enclosingLibrary.addTypedef(typedef_);
+ });
+ negativeTest('Invalid typedef Foo = `() => Foo`', (TestHarness test) {
+ var typedef_ = new Typedef('Foo', null);
+ typedef_.type = new FunctionType([], new TypedefType(typedef_));
+ test.enclosingLibrary.addTypedef(typedef_);
+ });
+ negativeTest('Invalid typedef Foo = C<Foo>', (TestHarness test) {
+ var typedef_ = new Typedef('Foo', null);
+ typedef_.type =
+ new InterfaceType(test.otherClass, [new TypedefType(typedef_)]);
+ test.enclosingLibrary.addTypedef(typedef_);
+ });
+ negativeTest('Invalid typedefs Foo = Bar, Bar = Foo', (TestHarness test) {
+ var foo = new Typedef('Foo', null);
+ var bar = new Typedef('Bar', null);
+ foo.type = new TypedefType(bar);
+ bar.type = new TypedefType(foo);
+ test.enclosingLibrary.addTypedef(foo);
+ test.enclosingLibrary.addTypedef(bar);
+ });
+ negativeTest('Invalid typedefs Foo = Bar, Bar = C<Foo>', (TestHarness test) {
+ var foo = new Typedef('Foo', null);
+ var bar = new Typedef('Bar', null);
+ foo.type = new TypedefType(bar);
+ bar.type = new InterfaceType(test.otherClass, [new TypedefType(foo)]);
+ test.enclosingLibrary.addTypedef(foo);
+ test.enclosingLibrary.addTypedef(bar);
+ });
+ negativeTest('Invalid typedefs Foo = C<Bar>, Bar = C<Foo>',
+ (TestHarness test) {
+ var foo = new Typedef('Foo', null);
+ var bar = new Typedef('Bar', null);
+ foo.type = new InterfaceType(test.otherClass, [new TypedefType(bar)]);
+ bar.type = new InterfaceType(test.otherClass, [new TypedefType(foo)]);
+ test.enclosingLibrary.addTypedef(foo);
+ test.enclosingLibrary.addTypedef(bar);
+ });
+ positiveTest('Valid long typedefs C20 = C19 = ... = C1 = C0 = dynamic',
+ (TestHarness test) {
+ var typedef_ = new Typedef('C0', const DynamicType());
+ test.enclosingLibrary.addTypedef(typedef_);
+ for (int i = 1; i < 20; ++i) {
+ typedef_ = new Typedef('C$i', new TypedefType(typedef_));
+ test.enclosingLibrary.addTypedef(typedef_);
+ }
+ });
+ negativeTest('Invalid long typedefs C20 = C19 = ... = C1 = C0 = C20',
+ (TestHarness test) {
+ var typedef_ = new Typedef('C0', null);
+ test.enclosingLibrary.addTypedef(typedef_);
+ var first = typedef_;
+ for (int i = 1; i < 20; ++i) {
+ typedef_ = new Typedef('C$i', new TypedefType(typedef_));
+ test.enclosingLibrary.addTypedef(typedef_);
+ }
+ first.type = new TypedefType(typedef_);
+ });
+ positiveTest('Valid typedef Foo<T extends C> = C<T>', (TestHarness test) {
+ var param = new TypeParameter('T', test.otherClass.rawType);
+ var foo = new Typedef('Foo',
+ new InterfaceType(test.otherClass, [new TypeParameterType(param)]),
+ typeParameters: [param]);
+ test.enclosingLibrary.addTypedef(foo);
+ });
+ positiveTest('Valid typedef Foo<T extends C<T>> = C<T>', (TestHarness test) {
+ var param = new TypeParameter('T', test.otherClass.rawType);
+ param.bound =
+ new InterfaceType(test.otherClass, [new TypeParameterType(param)]);
+ var foo = new Typedef('Foo',
+ new InterfaceType(test.otherClass, [new TypeParameterType(param)]),
+ typeParameters: [param]);
+ test.enclosingLibrary.addTypedef(foo);
+ });
+ positiveTest('Valid typedef Foo<T> = dynamic, Bar<T extends Foo<T>> = C<T>',
+ (TestHarness test) {
+ var fooParam = test.makeTypeParameter('T');
+ var foo =
+ new Typedef('Foo', const DynamicType(), typeParameters: [fooParam]);
+ var barParam = new TypeParameter('T', null);
+ barParam.bound = new TypedefType(foo, [new TypeParameterType(barParam)]);
+ var bar = new Typedef('Bar',
+ new InterfaceType(test.otherClass, [new TypeParameterType(barParam)]),
+ typeParameters: [barParam]);
+ test.enclosingLibrary.addTypedef(foo);
+ test.enclosingLibrary.addTypedef(bar);
+ });
+ negativeTest('Invalid typedefs Foo<T extends Bar<T>>, Bar<T extends Foo<T>>',
+ (TestHarness test) {
+ var fooParam = test.makeTypeParameter('T');
+ var foo =
+ new Typedef('Foo', const DynamicType(), typeParameters: [fooParam]);
+ var barParam = new TypeParameter('T', null);
+ barParam.bound = new TypedefType(foo, [new TypeParameterType(barParam)]);
+ var bar = new Typedef('Bar',
+ new InterfaceType(test.otherClass, [new TypeParameterType(barParam)]),
+ typeParameters: [barParam]);
+ fooParam.bound = new TypedefType(bar, [new TypeParameterType(fooParam)]);
+ test.enclosingLibrary.addTypedef(foo);
+ test.enclosingLibrary.addTypedef(bar);
+ });
+ negativeTest('Invalid typedef Foo<T extends Foo<dynamic> = C<T>',
+ (TestHarness test) {
+ var param = new TypeParameter('T', null);
+ var foo = new Typedef('Foo',
+ new InterfaceType(test.otherClass, [new TypeParameterType(param)]),
+ typeParameters: [param]);
+ param.bound = new TypedefType(foo, [const DynamicType()]);
+ test.enclosingLibrary.addTypedef(foo);
+ });
+ negativeTest('Typedef arity error', (TestHarness test) {
+ var param = test.makeTypeParameter('T');
+ var foo =
+ new Typedef('Foo', test.otherClass.rawType, typeParameters: [param]);
+ var field = new Field(new Name('field'), type: new TypedefType(foo, []));
+ test.enclosingLibrary.addTypedef(foo);
+ test.enclosingLibrary.addMember(field);
+ });
+ negativeTest('Dangling typedef reference', (TestHarness test) {
+ var foo = new Typedef('Foo', test.otherClass.rawType, typeParameters: []);
+ var field = new Field(new Name('field'), type: new TypedefType(foo, []));
+ test.enclosingLibrary.addMember(field);
+ });
}
checkHasError(Program program) {
« no previous file with comments | « pkg/kernel/test/typedef_unalias_test.dart ('k') | runtime/vm/kernel.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698