| // Copyright (c) 2018, 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. | |
| import "package:expect/expect.dart"; | |
| // Tests the constructors of the Invocation class. | |
| main() { | |
| { | |
| var name = "getter"; | |
| var invocation = new Invocation.getter(#name); | |
| Expect.isTrue(invocation.isGetter, "$name:isGetter"); | |
| Expect.isFalse(invocation.isSetter, "$name:isSetter"); | |
| Expect.isTrue(invocation.isAccessor, "$name:isAccessor"); | |
| Expect.isFalse(invocation.isMethod, "$name:isMethod"); | |
| Expect.equals(#name, invocation.memberName, "$name:name"); | |
| Expect.listEquals([], invocation.typeArguments, "$name:types"); | |
| Expect.listEquals([], invocation.positionalArguments, "$name:pos"); | |
| Expect.mapEquals({}, invocation.namedArguments, "$name: named"); | |
| checkUnmodifiableList("$name types", invocation.typeArguments); | |
| checkUnmodifiableList("$name positional", invocation.positionalArguments); | |
| checkUnmodifiableMap("$name named", invocation.namedArguments); | |
| } | |
| { | |
| var name = "setter"; | |
| var argument = new Object(); | |
| var invocation = new Invocation.setter(const Symbol("name="), argument); | |
| Expect.isFalse(invocation.isGetter, "$name:isGetter"); | |
| Expect.isTrue(invocation.isSetter, "$name:isSetter"); | |
| Expect.isTrue(invocation.isAccessor, "$name:isAccessor"); | |
| Expect.isFalse(invocation.isMethod, "$name:isMethod"); | |
| Expect.equals(const Symbol("name="), invocation.memberName, "$name:name"); | |
| Expect.listEquals([], invocation.typeArguments, "$name:types"); | |
| Expect.listEquals([argument], invocation.positionalArguments, "$name:pos"); | |
| Expect.mapEquals({}, invocation.namedArguments, "$name: named"); | |
| checkUnmodifiableList("$name types", invocation.typeArguments); | |
| checkUnmodifiableList("$name positional", invocation.positionalArguments); | |
| checkUnmodifiableMap("$name named", invocation.namedArguments); | |
| } | |
| { | |
| var name = ".name()"; | |
| var invocation = new Invocation.method(#name, []); | |
| Expect.isFalse(invocation.isGetter, "$name:isGetter"); | |
| Expect.isFalse(invocation.isSetter, "$name:isSetter"); | |
| Expect.isFalse(invocation.isAccessor, "$name:isAccessor"); | |
| Expect.isTrue(invocation.isMethod, "$name:isMethod"); | |
| Expect.equals(#name, invocation.memberName, "$name:name"); | |
| Expect.listEquals([], invocation.typeArguments, "$name:types"); | |
| Expect.listEquals([], invocation.positionalArguments, "$name:pos"); | |
| Expect.mapEquals({}, invocation.namedArguments, "$name: named"); | |
| checkUnmodifiableList("$name types", invocation.typeArguments); | |
| checkUnmodifiableList("$name positional", invocation.positionalArguments); | |
| checkUnmodifiableMap("$name named", invocation.namedArguments); | |
| expectInvocation("$name:", invocation, new Invocation.method(#name, null)); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.method(#name, [], null), | |
| ); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.method(#name, [], {}), | |
| ); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.genericMethod(#name, [], []), | |
| ); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.genericMethod(#name, [], null), | |
| ); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.genericMethod(#name, [], [], null), | |
| ); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.genericMethod(#name, [], [], {}), | |
| ); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.genericMethod(#name, null, []), | |
| ); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.genericMethod(#name, null, null), | |
| ); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.genericMethod(#name, null, [], null), | |
| ); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.genericMethod(#name, null, [], {}), | |
| ); | |
| } | |
| { | |
| var name = ".name(a)"; | |
| var argument = new Object(); | |
| var invocation = new Invocation.method(#name, [argument]); | |
| Expect.isFalse(invocation.isGetter, "$name:isGetter"); | |
| Expect.isFalse(invocation.isSetter, "$name:isSetter"); | |
| Expect.isFalse(invocation.isAccessor, "$name:isAccessor"); | |
| Expect.isTrue(invocation.isMethod, "$name:isMethod"); | |
| Expect.equals(#name, invocation.memberName, "$name:name"); | |
| Expect.listEquals([], invocation.typeArguments, "$name:types"); | |
| Expect.listEquals([argument], invocation.positionalArguments, "$name:pos"); | |
| Expect.mapEquals({}, invocation.namedArguments, "$name: named"); | |
| checkUnmodifiableList("$name types", invocation.typeArguments); | |
| checkUnmodifiableList("$name positional", invocation.positionalArguments); | |
| checkUnmodifiableMap("$name named", invocation.namedArguments); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.method(#name, [argument], null), | |
| ); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.method(#name, [argument], {}), | |
| ); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.genericMethod(#name, [], [argument], null), | |
| ); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.genericMethod(#name, [], [argument], {}), | |
| ); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.genericMethod(#name, null, [argument], null), | |
| ); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.genericMethod(#name, null, [argument], {}), | |
| ); | |
| } | |
| { | |
| var name = ".name(a,b)"; | |
| var argument = new Object(); | |
| var argument2 = new Object(); | |
| var invocation = new Invocation.method(#name, [argument, argument2]); | |
| Expect.isFalse(invocation.isGetter, "$name:isGetter"); | |
| Expect.isFalse(invocation.isSetter, "$name:isSetter"); | |
| Expect.isFalse(invocation.isAccessor, "$name:isAccessor"); | |
| Expect.isTrue(invocation.isMethod, "$name:isMethod"); | |
| Expect.equals(#name, invocation.memberName, "$name:name"); | |
| Expect.listEquals([], invocation.typeArguments, "$name:types"); | |
| Expect.listEquals( | |
| [argument, argument2], | |
| invocation.positionalArguments, | |
| "$name:pos", | |
| ); | |
| Expect.mapEquals({}, invocation.namedArguments, "$name: named"); | |
| checkUnmodifiableList("$name types", invocation.typeArguments); | |
| checkUnmodifiableList("$name positional", invocation.positionalArguments); | |
| checkUnmodifiableMap("$name named", invocation.namedArguments); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.method(#name, [argument, argument2], null), | |
| ); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.method(#name, [argument, argument2], {}), | |
| ); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.genericMethod(#name, [], [argument, argument2], null), | |
| ); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.genericMethod(#name, [], [argument, argument2], {}), | |
| ); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.genericMethod(#name, null, [argument, argument2], null), | |
| ); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.genericMethod(#name, null, [argument, argument2], {}), | |
| ); | |
| } | |
| { | |
| var name = ".name(a,b:)"; | |
| var argument = new Object(); | |
| var argument2 = new Object(); | |
| var invocation = new Invocation.method( | |
| #name, | |
| [argument], | |
| {#arg: argument2}, | |
| ); | |
| Expect.isFalse(invocation.isGetter, "$name:isGetter"); | |
| Expect.isFalse(invocation.isSetter, "$name:isSetter"); | |
| Expect.isFalse(invocation.isAccessor, "$name:isAccessor"); | |
| Expect.isTrue(invocation.isMethod, "$name:isMethod"); | |
| Expect.equals(#name, invocation.memberName, "$name:name"); | |
| Expect.listEquals([], invocation.typeArguments, "$name:types"); | |
| Expect.listEquals([argument], invocation.positionalArguments, "$name:pos"); | |
| Expect.mapEquals( | |
| {#arg: argument2}, | |
| invocation.namedArguments, | |
| "$name: named", | |
| ); | |
| checkUnmodifiableList("$name types", invocation.typeArguments); | |
| checkUnmodifiableList("$name positional", invocation.positionalArguments); | |
| checkUnmodifiableMap("$name named", invocation.namedArguments); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.genericMethod(#name, null, [argument], {#arg: argument2}), | |
| ); | |
| } | |
| { | |
| var name = ".name(a:,b:)"; | |
| var argument = new Object(); | |
| var argument2 = new Object(); | |
| var invocation = new Invocation.method(#name, [], { | |
| #arg: argument, | |
| #arg2: argument2, | |
| }); | |
| Expect.isFalse(invocation.isGetter, "$name:isGetter"); | |
| Expect.isFalse(invocation.isSetter, "$name:isSetter"); | |
| Expect.isFalse(invocation.isAccessor, "$name:isAccessor"); | |
| Expect.isTrue(invocation.isMethod, "$name:isMethod"); | |
| Expect.equals(#name, invocation.memberName, "$name:name"); | |
| Expect.listEquals([], invocation.typeArguments, "$name:types"); | |
| Expect.listEquals([], invocation.positionalArguments, "$name:pos"); | |
| Expect.mapEquals( | |
| {#arg: argument, #arg2: argument2}, | |
| invocation.namedArguments, | |
| "$name: named", | |
| ); | |
| checkUnmodifiableList("$name types", invocation.typeArguments); | |
| checkUnmodifiableList("$name positional", invocation.positionalArguments); | |
| checkUnmodifiableMap("$name named", invocation.namedArguments); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.method(#name, null, {#arg: argument, #arg2: argument2}), | |
| ); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.genericMethod(#name, null, [], { | |
| #arg: argument, | |
| #arg2: argument2, | |
| }), | |
| ); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.genericMethod(#name, null, null, { | |
| #arg: argument, | |
| #arg2: argument2, | |
| }), | |
| ); | |
| } | |
| { | |
| var name = ".name<i>()"; | |
| var invocation = new Invocation.genericMethod(#name, [int], []); | |
| Expect.isFalse(invocation.isGetter, "$name:isGetter"); | |
| Expect.isFalse(invocation.isSetter, "$name:isSetter"); | |
| Expect.isFalse(invocation.isAccessor, "$name:isAccessor"); | |
| Expect.isTrue(invocation.isMethod, "$name:isMethod"); | |
| Expect.equals(#name, invocation.memberName, "$name:name"); | |
| Expect.listEquals([int], invocation.typeArguments, "$name:types"); | |
| Expect.listEquals([], invocation.positionalArguments, "$name:pos"); | |
| Expect.mapEquals({}, invocation.namedArguments, "$name: named"); | |
| checkUnmodifiableList("$name types", invocation.typeArguments); | |
| checkUnmodifiableList("$name positional", invocation.positionalArguments); | |
| checkUnmodifiableMap("$name named", invocation.namedArguments); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.genericMethod(#name, [int], null), | |
| ); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.genericMethod(#name, [int], [], null), | |
| ); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.genericMethod(#name, [int], null, null), | |
| ); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.genericMethod(#name, [int], [], {}), | |
| ); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.genericMethod(#name, [int], null, {}), | |
| ); | |
| } | |
| { | |
| var name = ".name<i>(a)"; | |
| var argument = new Object(); | |
| var invocation = new Invocation.genericMethod(#name, [int], [argument]); | |
| Expect.isFalse(invocation.isGetter, "$name:isGetter"); | |
| Expect.isFalse(invocation.isSetter, "$name:isSetter"); | |
| Expect.isFalse(invocation.isAccessor, "$name:isAccessor"); | |
| Expect.isTrue(invocation.isMethod, "$name:isMethod"); | |
| Expect.equals(#name, invocation.memberName, "$name:name"); | |
| Expect.listEquals([int], invocation.typeArguments, "$name:types"); | |
| Expect.listEquals([argument], invocation.positionalArguments, "$name:pos"); | |
| Expect.mapEquals({}, invocation.namedArguments, "$name: named"); | |
| checkUnmodifiableList("$name types", invocation.typeArguments); | |
| checkUnmodifiableList("$name positional", invocation.positionalArguments); | |
| checkUnmodifiableMap("$name named", invocation.namedArguments); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.genericMethod(#name, [int], [argument], null), | |
| ); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.genericMethod(#name, [int], [argument], {}), | |
| ); | |
| } | |
| { | |
| var name = ".name<i>(a,b)"; | |
| var argument = new Object(); | |
| var argument2 = new Object(); | |
| var invocation = new Invocation.genericMethod( | |
| #name, | |
| [int], | |
| [argument, argument2], | |
| ); | |
| Expect.isFalse(invocation.isGetter, "$name:isGetter"); | |
| Expect.isFalse(invocation.isSetter, "$name:isSetter"); | |
| Expect.isFalse(invocation.isAccessor, "$name:isAccessor"); | |
| Expect.isTrue(invocation.isMethod, "$name:isMethod"); | |
| Expect.equals(#name, invocation.memberName, "$name:name"); | |
| Expect.listEquals([int], invocation.typeArguments, "$name:types"); | |
| Expect.listEquals( | |
| [argument, argument2], | |
| invocation.positionalArguments, | |
| "$name:pos", | |
| ); | |
| Expect.mapEquals({}, invocation.namedArguments, "$name: named"); | |
| checkUnmodifiableList("$name types", invocation.typeArguments); | |
| checkUnmodifiableList("$name positional", invocation.positionalArguments); | |
| checkUnmodifiableMap("$name named", invocation.namedArguments); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.genericMethod(#name, [int], [argument, argument2], null), | |
| ); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.genericMethod(#name, [int], [argument, argument2], {}), | |
| ); | |
| } | |
| { | |
| var name = ".name<i>(a,b:)"; | |
| var argument = new Object(); | |
| var argument2 = new Object(); | |
| var invocation = new Invocation.genericMethod(#name, [int], [argument], { | |
| #arg: argument2, | |
| }); | |
| Expect.isFalse(invocation.isGetter, "$name:isGetter"); | |
| Expect.isFalse(invocation.isSetter, "$name:isSetter"); | |
| Expect.isFalse(invocation.isAccessor, "$name:isAccessor"); | |
| Expect.isTrue(invocation.isMethod, "$name:isMethod"); | |
| Expect.equals(#name, invocation.memberName, "$name:name"); | |
| Expect.listEquals([int], invocation.typeArguments, "$name:types"); | |
| Expect.listEquals([argument], invocation.positionalArguments, "$name:pos"); | |
| Expect.mapEquals( | |
| {#arg: argument2}, | |
| invocation.namedArguments, | |
| "$name: named", | |
| ); | |
| checkUnmodifiableList("$name types", invocation.typeArguments); | |
| checkUnmodifiableList("$name positional", invocation.positionalArguments); | |
| checkUnmodifiableMap("$name named", invocation.namedArguments); | |
| } | |
| { | |
| var name = ".name<i>(a:,b:)"; | |
| var argument = new Object(); | |
| var argument2 = new Object(); | |
| var invocation = new Invocation.genericMethod( | |
| #name, | |
| [int], | |
| [], | |
| {#arg: argument, #arg2: argument2}, | |
| ); | |
| Expect.isFalse(invocation.isGetter, "$name:isGetter"); | |
| Expect.isFalse(invocation.isSetter, "$name:isSetter"); | |
| Expect.isFalse(invocation.isAccessor, "$name:isAccessor"); | |
| Expect.isTrue(invocation.isMethod, "$name:isMethod"); | |
| Expect.equals(#name, invocation.memberName, "$name:name"); | |
| Expect.listEquals([int], invocation.typeArguments, "$name:types"); | |
| Expect.listEquals([], invocation.positionalArguments, "$name:pos"); | |
| Expect.mapEquals( | |
| {#arg: argument, #arg2: argument2}, | |
| invocation.namedArguments, | |
| "$name: named", | |
| ); | |
| checkUnmodifiableList("$name types", invocation.typeArguments); | |
| checkUnmodifiableList("$name positional", invocation.positionalArguments); | |
| checkUnmodifiableMap("$name named", invocation.namedArguments); | |
| expectInvocation( | |
| "$name:", | |
| invocation, | |
| new Invocation.genericMethod( | |
| #name, | |
| [int], | |
| null, | |
| {#arg: argument, #arg2: argument2}, | |
| ), | |
| ); | |
| } | |
| { | |
| // Many arguments. | |
| var name = ".name<..>(..,..:)"; | |
| var argument = new Object(); | |
| var argument2 = new Object(); | |
| Type intList = new TypeHelper<List<int>>().type; | |
| var invocation = new Invocation.genericMethod( | |
| #name, | |
| [int, double, intList], | |
| [argument, argument2, null, argument], | |
| {#arg: argument, #arg2: argument2, #arg3: null, #arg4: argument}, | |
| ); | |
| Expect.isFalse(invocation.isGetter, "$name:isGetter"); | |
| Expect.isFalse(invocation.isSetter, "$name:isSetter"); | |
| Expect.isFalse(invocation.isAccessor, "$name:isAccessor"); | |
| Expect.isTrue(invocation.isMethod, "$name:isMethod"); | |
| Expect.equals(#name, invocation.memberName, "$name:name"); | |
| Expect.listEquals( | |
| [int, double, intList], | |
| invocation.typeArguments, | |
| "$name:types", | |
| ); | |
| Expect.listEquals( | |
| [argument, argument2, null, argument], | |
| invocation.positionalArguments, | |
| "$name:pos", | |
| ); | |
| Expect.mapEquals({ | |
| #arg: argument, | |
| #arg2: argument2, | |
| #arg3: null, | |
| #arg4: argument, | |
| }, invocation.namedArguments); | |
| checkUnmodifiableList("$name types", invocation.typeArguments); | |
| checkUnmodifiableList("$name positional", invocation.positionalArguments); | |
| checkUnmodifiableMap("$name named", invocation.namedArguments); | |
| } | |
| { | |
| // Accepts iterables, not just lists. | |
| var name = "iterables"; | |
| var argument = new Object(); | |
| var argument2 = new Object(); | |
| Type intList = new TypeHelper<List<int>>().type; | |
| var invocation = new Invocation.genericMethod( | |
| #name, | |
| [int, double, intList].where(kTrue), | |
| [argument, argument2, null, argument].where(kTrue), | |
| {#arg: argument, #arg2: argument2, #arg3: null, #arg4: argument}, | |
| ); | |
| Expect.isFalse(invocation.isGetter, "$name:isGetter"); | |
| Expect.isFalse(invocation.isSetter, "$name:isSetter"); | |
| Expect.isFalse(invocation.isAccessor, "$name:isAccessor"); | |
| Expect.isTrue(invocation.isMethod, "$name:isMethod"); | |
| Expect.equals(#name, invocation.memberName, "$name:name"); | |
| Expect.listEquals( | |
| [int, double, intList], | |
| invocation.typeArguments, | |
| "$name:types", | |
| ); | |
| Expect.listEquals( | |
| [argument, argument2, null, argument], | |
| invocation.positionalArguments, | |
| "$name:pos", | |
| ); | |
| Expect.mapEquals({ | |
| #arg: argument, | |
| #arg2: argument2, | |
| #arg3: null, | |
| #arg4: argument, | |
| }, invocation.namedArguments); | |
| checkUnmodifiableList("$name types", invocation.typeArguments); | |
| checkUnmodifiableList("$name positional", invocation.positionalArguments); | |
| checkUnmodifiableMap("$name named", invocation.namedArguments); | |
| } | |
| } | |
| void checkUnmodifiableList(String name, List<Object?> list) { | |
| if (list.isNotEmpty) { | |
| Expect.throws( | |
| () { | |
| list[0] = null; | |
| }, | |
| (_) => true, | |
| "$name: list not unmodifiable", | |
| ); | |
| } | |
| Expect.throws( | |
| () { | |
| list.add(null); | |
| }, | |
| (_) => true, | |
| "$name: list not unmodifiable", | |
| ); | |
| } | |
| void checkUnmodifiableMap(String name, Map<Symbol, Object?> map) { | |
| Expect.throws( | |
| () { | |
| map[#key] = null; | |
| }, | |
| (_) => true, | |
| "$name: map not unmodifiable", | |
| ); | |
| } | |
| class TypeHelper<T> { | |
| Type get type => T; | |
| } | |
| expectInvocation(String name, Invocation expect, Invocation actual) { | |
| Expect.equals(expect.isGetter, actual.isGetter, "$name:isGetter"); | |
| Expect.equals(expect.isSetter, actual.isSetter, "$name:isSetter"); | |
| Expect.equals(expect.isAccessor, actual.isAccessor, "$name:isAccessor"); | |
| Expect.equals(actual.isGetter || actual.isSetter, actual.isAccessor); | |
| Expect.equals(expect.isMethod, actual.isMethod, "$name:isMethod"); | |
| Expect.isTrue(actual.isMethod || actual.isGetter || actual.isSetter); | |
| Expect.isFalse(actual.isMethod && actual.isGetter); | |
| Expect.isFalse(actual.isMethod && actual.isSetter); | |
| Expect.isFalse(actual.isSetter && actual.isGetter); | |
| Expect.equals(expect.memberName, actual.memberName, "$name:memberName"); | |
| Expect.listEquals(expect.typeArguments, actual.typeArguments, "$name:types"); | |
| Expect.listEquals( | |
| expect.positionalArguments, | |
| actual.positionalArguments, | |
| "$name:pos", | |
| ); | |
| Expect.mapEquals(expect.namedArguments, actual.namedArguments, "$name:named"); | |
| checkUnmodifiableList(name, actual.typeArguments); | |
| checkUnmodifiableList(name, actual.positionalArguments); | |
| checkUnmodifiableMap(name, actual.namedArguments); | |
| } | |
| bool kTrue(_) => true; |