Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,19 @@ build_ios: install ## Run the iOS build of the example app (located inside `widg
build_android: install ## Run the Android build of the example app (located inside `widget_driver/example`) without deploying to any device
bash scripts/run-android-build.sh

build_macos: install ## Run the macOS build of the example app (located inside `widget_driver/example`) without deploying to any device
bash scripts/run-macos-build.sh

build_web: install ## Run the web build of the example app (located inside `widget_driver/example`) without deploying to any device
bash scripts/run-web-build.sh
watch: install ## Starts the example app and performs the hot reload in case of any change
bash scripts/run-and-watch.sh

quality: clean install lint test ## Run only linter and tests

build: install build_ios build_android ## Build the example Android and iOS apps from the widget_driver package
build: install build_ios build_android build_macos build_web ## Build the example Android, iOS, macOS, and web apps from the widget_driver package

all: clean install lint test build_ios build_android ## Run all steps including building the Android and iOS
all: clean install lint test build_ios build_android build_macos build_web ## Run all steps including building the Android, iOS, macOS, and web

help: ## Show all commands
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'
17 changes: 17 additions & 0 deletions scripts/run-macos-build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/bin/bash

TAG="[widget-driver]:"
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m'
TAG_COLOR="\n${GREEN}${TAG}${NC}"

function run_macos_build() {
echo -e "$TAG_COLOR Building macOS Example app"
make install
cd widget_driver/example
flutter build macos --debug --no-tree-shake-icons $1
echo -e "$TAG_COLOR Example app succesufully built"
}

run_macos_build $@
17 changes: 17 additions & 0 deletions scripts/run-web-build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/bin/bash

TAG="[widget-driver]:"
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m'
TAG_COLOR="\n${GREEN}${TAG}${NC}"

function run_web_build() {
echo -e "$TAG_COLOR Building Web Example app"
make install
cd widget_driver/example
flutter build web --debug --no-tree-shake-icons $1
echo -e "$TAG_COLOR Example app succesufully built"
}

run_web_build $@

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'dart:async';

import 'package:example/models/coffee.dart' as c;
import 'package:example/models/coffee.dart' as b;
import 'package:get_it/get_it.dart';
import 'package:widget_driver/widget_driver.dart';

Expand All @@ -12,7 +12,7 @@ part 'coffee_library_page_driver.g.dart';
class CoffeeLibraryPageDriver extends WidgetDriver {
final CoffeeService _coffeeService;
bool _isFetching = false;
List<c.Coffee> _coffees = [];
List<b.Coffee> _coffees = [];
StreamSubscription? _subscription;

CoffeeLibraryPageDriver({
Expand All @@ -30,7 +30,7 @@ class CoffeeLibraryPageDriver extends WidgetDriver {

int get numberOfCoffees => _coffees.length;

c.Coffee getCoffeeAtIndex(int index) {
b.Coffee getCoffeeAtIndex(int index) {
return _coffees[index];
}

Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,9 @@ class RegisterAccountPageDriver extends WidgetDriver {
_setRegisterLoading(true);
await _createUserService.createUserAndLogin(_currentUsername);
_setRegisterLoading(false);
_coordinator.pop(context: context);
if (context.mounted) {
_coordinator.pop(context: context);
}
} else {
_validateUsernameInput();
}
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion widget_driver/example/lib/widgets/my_app_driver.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 3 additions & 8 deletions widget_driver/example/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,12 @@ dependencies:
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^1.0.4
flutter_lints: ^2.0.1
mocktail: ^1.0.4
widget_driver_test:
path: ../../widget_driver_test
build_runner:
widget_driver_generator: ^1.2.0

# Overrides the published widget_driver_generator with the local package, whose analyzer
# constraint was relaxed to resolve with newer Flutter SDKs (see widget_driver_generator/pubspec.yaml).
dependency_overrides:
widget_driver_generator:
build_runner: ^2.3.3
widget_driver_generator:
path: ../../widget_driver_generator

flutter:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ void main() {
mockLocalization = MockLocalization();
});

Future<DriverTester<CoffeeCounterHeaderSectionDriver>> _getDriver(WidgetTester tester) async {
Future<DriverTester<CoffeeCounterHeaderSectionDriver>> getDriver(WidgetTester tester) async {
return tester.getDriverTester(
driverBuilder: () => CoffeeCounterHeaderSectionDriver(),
parentWidgetBuilder: (driverWidget) {
Expand All @@ -42,14 +42,14 @@ void main() {
const expectedText = 'Some text about consumed coffees';
when(() => mockLocalization.consumedCoffees).thenReturn(expectedText);

final driverTester = await _getDriver(tester);
final driverTester = await getDriver(tester);
expect(driverTester.driver.descriptionText, expectedText);
});

testWidgets('Has correct value for amountText', (tester) async {
fakeCoffeeCountNotifier.value = 123;

final driverTester = await _getDriver(tester);
final driverTester = await getDriver(tester);
expect(driverTester.driver.amountText, '123');
});
});
Expand All @@ -59,7 +59,7 @@ void main() {
// The initial value used when driver is created
fakeCoffeeCountNotifier.value = 123;

final driverTester = await _getDriver(tester);
final driverTester = await getDriver(tester);
expect(driverTester.driver.amountText, '123');

// Set a new value to the coffee count and trigger widget tester to render the update.
Expand Down
2 changes: 1 addition & 1 deletion widget_driver_annotation/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ environment:
sdk: ">=3.4.0 <4.0.0"

dev_dependencies:
test: ^1.22.2
test: ">=1.3.0 <2.0.0"
3 changes: 2 additions & 1 deletion widget_driver_generator/lib/builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ Builder generateWidgetDriver(BuilderOptions options) {
return SharedPartBuilder(
[WidgetDriverGenerator(options: options)],
'widget_driver_generator',
formatOutput: DartFormatter(pageWidth: customLineLength).format,
formatOutput: (code, languageVersion) =>
DartFormatter(languageVersion: languageVersion, pageWidth: customLineLength).format(code),
);
}
13 changes: 9 additions & 4 deletions widget_driver_generator/lib/src/model_visitor.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/visitor.dart';
import 'package:analyzer/dart/element/visitor2.dart';
import 'package:widget_driver_annotation/widget_driver_annotation.dart';

import 'models/annotated_element.dart';
Expand All @@ -11,7 +11,7 @@ import 'utils/property_accessor_element_extensions.dart';
typedef CodeGeneratorMethod = String Function(String codeDefinition, String returnValue);

/// Inspect classes and get className, fields and all constructor parameters annotated with the @driverProvidableFields.
class ModelVisitor extends SimpleElementVisitor<void> {
class ModelVisitor extends SimpleElementVisitor2<void> {
String className = "";
final fields = <AnnotatedElement>[];
final methods = <AnnotatedElement>[];
Expand All @@ -35,7 +35,7 @@ class ModelVisitor extends SimpleElementVisitor<void> {
className = elementReturnType.replaceFirst('*', '');

if (!element.isFactory || !element.isDefaultConstructor) {
for (final param in element.parameters) {
for (final param in element.formalParameters) {
if (_elementUtils.hasValidAnnotation(
element: param,
validAnnotationType: driverProvidableProperty.runtimeType,
Expand Down Expand Up @@ -65,7 +65,12 @@ class ModelVisitor extends SimpleElementVisitor<void> {
}

@override
void visitPropertyAccessorElement(PropertyAccessorElement element) {
void visitGetterElement(GetterElement element) => _visitPropertyAccessorElement(element);

@override
void visitSetterElement(SetterElement element) => _visitPropertyAccessorElement(element);

void _visitPropertyAccessorElement(PropertyAccessorElement element) {
if (element.isStatic) {
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class ProvidableField {
});

factory ProvidableField.fromParameterElement(
ParameterElement param, {
FormalParameterElement param, {
ImportPrefixResolver importPrefixResolver = const ImportPrefixResolver(),
}) {
final rawType = param.type.toString().replaceFirst('*', '');
Expand All @@ -29,7 +29,7 @@ class ProvidableField {
? rawType
: importPrefixResolver.applyPrefixes(code: rawType, types: [param.type], library: library);
return ProvidableField(
name: param.name.removeLeadingUnderscore(),
name: param.name?.removeLeadingUnderscore() ?? "",
type: type,
isRequired: param.isRequired,
defaultValueCode: param.defaultValueCode,
Expand Down
8 changes: 4 additions & 4 deletions widget_driver_generator/lib/src/utils/element_utils.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class ElementUtils {
required List<Type> validAnnotationTypes,
}) {
for (var validAnnotationType in validAnnotationTypes) {
final annotation = TypeChecker.fromRuntime(validAnnotationType).firstAnnotationOfExact(element);
final annotation = TypeChecker.typeNamed(validAnnotationType).firstAnnotationOfExact(element);
if (annotation != null) {
return validAnnotationType;
}
Expand Down Expand Up @@ -61,10 +61,10 @@ class ElementUtils {
return [element.type];
}
if (element is PropertyAccessorElement) {
return [element.returnType, ...element.parameters.map((parameter) => parameter.type)];
return [element.returnType, ...element.formalParameters.map((parameter) => parameter.type)];
}
if (element is MethodElement) {
return [element.returnType, ...element.parameters.map((parameter) => parameter.type)];
return [element.returnType, ...element.formalParameters.map((parameter) => parameter.type)];
}
return const [];
}
Expand All @@ -91,7 +91,7 @@ class ElementUtils {
}

String _getAnnotationStringFromElement(Element element) {
final metaData = element.metadata.first;
final metaData = element.metadata.annotations.first;
return metaData.toSource();
}

Expand Down
Loading
Loading