expect function
void
expect(
- dynamic actual,
- dynamic expected, {
- String reason = '',
- IsMatching? isMatching,
- num precision = 1e-12,
Compares actual
with expected
and throws a FailedTestException if
the two objects do not match.
- Custom objects may be compared using the callback
isMatching
. This is useful if the equality operator cannot be overriden. - Collections are matched entry by entry in a recursive fashion.
- The argument
precision
is used to matchnum
s approximately.
Implementation
void expect(
dynamic actual,
dynamic expected, {
String reason = '',
IsMatching? isMatching,
num precision = 1e-12,
}) {
if (match(
actual,
expected,
isMatching: isMatching,
precision: precision,
)) {
print(' passed${reason.isEmpty ? '' : ': $reason'}');
} else {
print(' failed${reason.isEmpty ? '' : ': $reason'}');
var actualString = (actual is String)
? actual.indentedBlock(8, skipFirstLine: true)
: actual.toString().indent(8, skipFirstLine: true);
var expectedString = (expected is String)
? expected.indentedBlock(8, skipFirstLine: true)
: expected.toString().indent(8, skipFirstLine: true);
final difference =
(actual is String && expected is String) ? actual - expected : '';
// Add hashCode if printed objects are identical.
if (actualString == expectedString) {
actualString += ' (${actual.runtimeType}, '
'hashCode: ${actual.hashCode})';
expectedString += ' (${expected.runtimeType}, '
'hashCode: ${expected.hashCode})';
}
print(' Actual: $actualString');
print(' Expected: $expectedString');
if (difference.isNotEmpty) {
print(' Difference: '
'${difference.indentedBlock(8, skipFirstLine: true)}');
}
try {
throw FailedTestException(
message: 'Equality test failed.',
expected: expected,
actual: actual,
path: Platform.script.path,
);
} catch (e, s) {
stderr.write(e.toString());
final lines = s.toString().split('\n');
final indentString = ' ';
stderr.writeln(lines
.map<String>(
(item) => indentString + item,
)
.join('\n'));
}
}
}