blob: 54b1ac97919345c3d78cf3ae43a9c343f8753d06 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import 'dart:ui';
import 'package:flutter_test/flutter_test.dart';
import 'package:playground_components/playground_components.dart';
import 'examples/example_descriptor.dart';
import 'widget_tester.dart';
void expectContextLine(
int contextLine1Based,
WidgetTester wt, {
String? reason,
}) {
final controller = wt.findOneCodeController();
final selection = controller.selection;
final position = controller.code.hiddenRanges.recoverPosition(
selection.baseOffset,
placeHiddenRanges: TextAffinity.downstream,
);
expect(selection.isCollapsed, true);
expect(
controller.code.lines.characterIndexToLineIndex(position),
contextLine1Based - 1,
reason: reason,
);
}
void expectOutputIfDeployed(ExampleDescriptor example, WidgetTester wt) {
if (example.outputTail != null) {
expectOutputEndsWithIfDeployed(example.outputTail, wt);
} else if (example.outputContains != null) {
for (final str in example.outputContains!) {
expectOutputContainsIfDeployed(str, wt);
}
} else {
throw AssertionError('No pattern to check example output: ${example.path}');
}
}
void expectOutputEqualsIfDeployed(String text, WidgetTester wt) {
if (!areExamplesDeployed) {
return;
}
final actualText = wt.findOutputText();
expect(actualText, text);
}
void expectOutputContainsIfDeployed(String? text, WidgetTester wt) {
if (!areExamplesDeployed) {
return;
}
final actualText = wt.findOutputText();
expect(text, isNotNull);
expect(actualText, contains(text));
}
void expectOutputEndsWithIfDeployed(String? text, WidgetTester wt) {
if (!areExamplesDeployed) {
return;
}
final actualText = wt.findOutputText();
expect(text, isNotNull);
expect(actualText, endsWith(text!));
}
void expectOutputStartsWith(String? text, WidgetTester wt) {
final actualText = wt.findOutputText();
expect(text, isNotNull);
expect(actualText, startsWith(text!));
}
void expectSdk(Sdk sdk, WidgetTester wt) {
final controller = wt.findPlaygroundController();
expect(controller.sdk, sdk);
}
void expectSimilar(double a, double b) {
Matcher closeToFraction(num value, double fraction) =>
closeTo(value, value * fraction);
Matcher onePerCentTolerance(num value) => closeToFraction(value, 0.01);
expect(a, onePerCentTolerance(b));
}
void expectVisibleTextIfDeployed(String? visibleText, WidgetTester wt) {
if (!areExamplesDeployed) {
return;
}
expectVisibleText(visibleText, wt);
}
void expectVisibleText(String? visibleText, WidgetTester wt, {String? reason}) {
final controller = wt.findOneCodeController();
expect(visibleText, isNotNull);
expect(controller.text, visibleText, reason: reason);
}
void expectLastAnalyticsEvent(
AnalyticsEvent event, {
String? reason,
}) {
expect(
PlaygroundComponents.analyticsService.lastEvent,
event,
reason: reason,
);
}