blob: 8f5fcf1720ad8138fee82ae46b9138ddae02fd20 [file] [log] [blame]
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:ui';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
TestWidgetsFlutterBinding retrieveTestBinding(WidgetTester tester) {
final WidgetsBinding binding = tester.binding;
assert(binding is TestWidgetsFlutterBinding);
final TestWidgetsFlutterBinding testBinding = binding as TestWidgetsFlutterBinding;
return testBinding;
}
void verifyPropertyFaked<TProperty>({
required WidgetTester tester,
required TProperty realValue,
required TProperty fakeValue,
required TProperty Function() propertyRetriever,
required void Function(TestWidgetsFlutterBinding, TProperty fakeValue) propertyFaker,
Matcher Function(TProperty) matcher = equals,
}) {
TProperty propertyBeforeFaking;
TProperty propertyAfterFaking;
propertyBeforeFaking = propertyRetriever();
propertyFaker(retrieveTestBinding(tester), fakeValue);
propertyAfterFaking = propertyRetriever();
expect(
realValue == fakeValue,
isFalse,
reason: 'Since the real value and fake value are equal, we cannot validate '
'that a property has been faked. Choose a different fake value to test.',
);
expect(propertyBeforeFaking, matcher(realValue));
expect(propertyAfterFaking, matcher(fakeValue));
}
void verifyPropertyReset<TProperty>({
required WidgetTester tester,
required TProperty fakeValue,
required TProperty Function() propertyRetriever,
required VoidCallback propertyResetter,
required ValueSetter<TProperty> propertyFaker,
Matcher Function(TProperty) matcher = equals,
}) {
TProperty propertyBeforeFaking;
TProperty propertyAfterFaking;
TProperty propertyAfterReset;
propertyBeforeFaking = propertyRetriever();
propertyFaker(fakeValue);
propertyAfterFaking = propertyRetriever();
propertyResetter();
propertyAfterReset = propertyRetriever();
expect(propertyAfterFaking, matcher(fakeValue));
expect(propertyAfterReset, matcher(propertyBeforeFaking));
}
Matcher matchesViewPadding(ViewPadding expected) => _FakeViewPaddingMatcher(expected);
class _FakeViewPaddingMatcher extends Matcher {
_FakeViewPaddingMatcher(this.expected);
final ViewPadding expected;
@override
Description describe(Description description) {
description.add('two ViewPadding instances match');
return description;
}
@override
Description describeMismatch(dynamic item, Description mismatchDescription, Map<dynamic, dynamic> matchState, bool verbose) {
assert(item is ViewPadding, 'Can only match against implementations of ViewPadding.');
final ViewPadding actual = item as ViewPadding;
if (actual.left != expected.left) {
mismatchDescription.add('actual.left (${actual.left}) did not match expected.left (${expected.left})');
}
if (actual.top != expected.top) {
mismatchDescription.add('actual.top (${actual.top}) did not match expected.top (${expected.top})');
}
if (actual.right != expected.right) {
mismatchDescription.add('actual.right (${actual.right}) did not match expected.right (${expected.right})');
}
if (actual.bottom != expected.bottom) {
mismatchDescription.add('actual.bottom (${actual.bottom}) did not match expected.bottom (${expected.bottom})');
}
return mismatchDescription;
}
@override
bool matches(dynamic item, Map<dynamic, dynamic> matchState) {
assert(item is ViewPadding, 'Can only match against implementations of ViewPadding.');
final ViewPadding actual = item as ViewPadding;
return actual.left == expected.left &&
actual.top == expected.top &&
actual.right == expected.right &&
actual.bottom == expected.bottom;
}
}