[ddc] Refactor NSM error tests

Change-Id: Id88b6809736320b6ae098f40f16ced218649a385
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/297181
Reviewed-by: Mark Zhou <markzipan@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
This commit is contained in:
Nicholas Shahan 2023-04-27 16:36:58 +00:00 committed by Commit Queue
parent 58e48de282
commit 9d0781bd9b

View file

@ -2,7 +2,9 @@
// 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 "utils.dart";
import 'package:expect/minitest.dart';
import 'utils.dart';
class A {
int x = 42;
@ -17,71 +19,85 @@ String arity1(int val) {
return val.toString();
}
dynamic dynamicFunction = arity1;
void main() {
dynamic instanceOfA = A();
// Call an instance of a class with no call() method.
try {
instanceOfA();
} on NoSuchMethodError catch (error) {
var message = error.toString();
expectStringContains("NoSuchMethodError: 'call'", message);
expectStringContains("Receiver: Instance of 'A'", message);
}
group('Dynamic call of', () {
dynamic instanceOfA = A();
test('instance of a class with no `call()` method', () {
try {
instanceOfA();
} on NoSuchMethodError catch (error) {
var message = error.toString();
expectStringContains("NoSuchMethodError: 'call'", message);
expectStringContains("Receiver: Instance of 'A'", message);
}
});
group('class instance', () {
group('method tearoff', () {
dynamic tearoff = instanceOfA.arity1;
test('passing too many arguments', () {
try {
tearoff(1, 2);
} on NoSuchMethodError catch (error) {
var message = error.toString();
expectStringContains("NoSuchMethodError: 'bound arity1'", message);
expectStringContains('too many arguments', message);
}
});
test('passing too few arguments', () {
try {
tearoff();
} on NoSuchMethodError catch (error) {
var message = error.toString();
expectStringContains("NoSuchMethodError: 'bound arity1'", message);
expectStringContains('too few arguments', message);
}
});
});
});
group('top level function tearoff', () {
dynamic dynamicFunction = arity1;
test('passing too many arguments', () {
try {
dynamicFunction(1, 2);
} on NoSuchMethodError catch (error) {
var message = error.toString();
expectStringContains("NoSuchMethodError: 'arity1'", message);
expectStringContains('too many arguments', message);
}
});
test('passing too few arguments', () {
try {
dynamicFunction();
} on NoSuchMethodError catch (error) {
var message = error.toString();
expectStringContains("NoSuchMethodError: 'arity1'", message);
expectStringContains('too few arguments', message);
}
});
});
});
dynamic tearOff = instanceOfA.arity1;
// Dynamic call of a class method with too many arguments.
try {
tearOff(1, 2);
} on NoSuchMethodError catch (error) {
var message = error.toString();
expectStringContains("NoSuchMethodError: 'bound arity1'", message);
expectStringContains("too many arguments", message);
}
// Dynamic call of a class method with too few arguments.
try {
tearOff();
} on NoSuchMethodError catch (error) {
var message = error.toString();
expectStringContains("NoSuchMethodError: 'bound arity1'", message);
expectStringContains("too few arguments", message);
}
// Dynamic call of a top level function with too many arguments.
try {
dynamicFunction(1, 2);
} on NoSuchMethodError catch (error) {
var message = error.toString();
expectStringContains("NoSuchMethodError: 'arity1'", message);
expectStringContains("too many arguments", message);
}
// Dynamic call of a top level function with too few arguments.
try {
dynamicFunction();
} on NoSuchMethodError catch (error) {
var message = error.toString();
expectStringContains("NoSuchMethodError: 'arity1'", message);
expectStringContains("too few arguments", message);
}
// Function.apply() with too many arguments.
try {
Function.apply(dynamicFunction, [1, 2]);
} on NoSuchMethodError catch (error) {
var message = error.toString();
expectStringContains("NoSuchMethodError: 'arity1'", message);
expectStringContains("too many arguments", message);
}
// Function.apply() with too few arguments.
try {
Function.apply(dynamicFunction, []);
} on NoSuchMethodError catch (error) {
var message = error.toString();
expectStringContains("NoSuchMethodError: 'arity1'", message);
expectStringContains("too few arguments", message);
}
group('`Function.apply()`', () {
dynamic dynamicFunction = arity1;
group('top level function tearoff', () {
test('passing too many arguments', () {
try {
Function.apply(dynamicFunction, [1, 2]);
} on NoSuchMethodError catch (error) {
var message = error.toString();
expectStringContains("NoSuchMethodError: 'arity1'", message);
expectStringContains('too many arguments', message);
}
});
test('passing too few arguments', () {
try {
Function.apply(dynamicFunction, []);
} on NoSuchMethodError catch (error) {
var message = error.toString();
expectStringContains("NoSuchMethodError: 'arity1'", message);
expectStringContains('too few arguments', message);
}
});
});
});
}