mirror of
https://github.com/dart-lang/sdk
synced 2024-11-02 15:17:07 +00:00
284f662022
Change-Id: I764d0457da85b2935e1d83309eab4c4b5b3ea000 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/126204 Commit-Queue: Bob Nystrom <rnystrom@google.com> Reviewed-by: Lasse R.H. Nielsen <lrn@google.com> Auto-Submit: Bob Nystrom <rnystrom@google.com>
413 lines
19 KiB
Dart
413 lines
19 KiB
Dart
// 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;
|