Skip to content

Commit 403b60c

Browse files
authored
chore: update test command to use dart test with coverage flag (#51)
* fix: update test command to use dart test with coverage flag * fix: update code coverage reporting action to v4 * fix: improve code coverage reporting by adding coverage tool installation and LCOV conversion * Add AST validation utilities for router generation and enhance tests - Introduced `router_ast_validators.dart` with specialized validators for router class structure, routes field, pages map, and getter methods. - Enhanced `ast_comparison_helper.dart` with methods to find constructors and methods in extensions. - Updated `route_class_generator_test.dart` to utilize new validation methods for various routing scenarios, including empty routes, nested routers, and aliased imports. - Refactored existing tests to improve structure and validation logic. * fix: update import for AST validation helpers in router class builder test * refactor: streamline AST validation utilities and enhance documentation for clarity * Add comprehensive tests for logging and routing generators - Introduced `logger_builder_simple_test.dart` to validate basic logger generation, structure, error handling, stacktrace support, method chaining, and determinism. - Updated `logger_class_generator_test.dart` to utilize AST-based validation for logger generation instead of string comparison. - Modified `simple_log_printer_test.dart` to correct the log event structure for error handling. - Enhanced `arguments_class_test.dart` to validate the generation of argument classes with basic AST checks. - Refactored `navigation_extension_class_test.dart` and `router_extension_class_test.dart` to implement AST validation for navigation extensions. - Improved `router_class_builder_helper_test.dart` and `routes_class_builder_test.dart` to include basic AST validation for generated routes and getters. - Added new tests for Router 2.0 in `auto_route_generator_test.dart` and `integration_test/router_2_integration_test.dart` to cover complete library generation, error scenarios, and code quality checks. - Created `library_builder_test.dart` and `router_2_generator_test.dart` to validate library generation and router generator functionality. * fix: update SDK version constraint in pubspec.yaml
1 parent bd36234 commit 403b60c

File tree

45 files changed

+5781
-807
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+5781
-807
lines changed

.github/workflows/test.yml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,17 @@ jobs:
2020
- run: dart pub get
2121
- run: dart format .
2222
- run: dart analyze
23-
- run: flutter test --coverage
23+
- run: dart test --coverage=coverage
24+
- name: Install coverage tools
25+
run: dart pub global activate coverage
26+
- name: Convert coverage to LCOV format
27+
run: dart pub global run coverage:format_coverage --lcov --in=coverage --out=coverage/lcov.info --packages=.dart_tool/package_config.json --report-on=lib
2428
- name: Setup LCOV
2529
uses: hrishikesh-kadam/setup-lcov@v1
2630
- name: Report code coverage
27-
uses: zgosalvez/github-actions-report-lcov@v3
31+
uses: zgosalvez/github-actions-report-lcov@v4
2832
with:
29-
coverage-files: coverage/lcov*.info
33+
coverage-files: coverage/lcov.info
3034
artifact-name: code-coverage-report
3135
github-token: ${{ secrets.GITHUB_TOKEN }}
3236
update-comment: true

lib/src/generators/extensions/routes_extension.dart

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,14 @@ extension RoutesExtension on RouterConfig {
77
performAction(this);
88

99
for (var route in routes) {
10-
RouterConfig(
11-
routes: route.children,
12-
routerClassName: '${route.name}Router'.capitalize,
13-
routesClassName: '${route.name}Routes'.capitalize,
14-
).traverseRoutes(performAction);
10+
// Only create and traverse child router config if the route has children
11+
if (route.children.isNotEmpty) {
12+
RouterConfig(
13+
routes: route.children,
14+
routerClassName: '${route.name}Router'.capitalize,
15+
routesClassName: '${route.name}Routes'.capitalize,
16+
).traverseRoutes(performAction);
17+
}
1518
}
1619
}
1720
}

lib/src/generators/logging/logger_class_content.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class SimpleLogPrinter extends LogPrinter {
4242
4343
var methodNameSection =
4444
printCallingFunctionName && methodName != null ? ' | \$methodName' : '';
45-
var stackLog = event.stackTrace.toString();
45+
var stackLog = event.stackTrace?.toString() ?? '';
4646
var output =
4747
'\$emoji \$className\$methodNameSection - \${event.message}\${event.error != null ? '\\nERROR: \${event.error}\\n' : ''}\${printCallStack ? '\\nSTACKTRACE:\\n\$stackLog' : ''}';
4848
@@ -61,7 +61,7 @@ class SimpleLogPrinter extends LogPrinter {
6161
if (kReleaseMode) {
6262
return match.group(0)!;
6363
} else {
64-
return color!(match.group(0)!);
64+
return color != null ? color(match.group(0)!) : match.group(0)!;
6565
}
6666
}));
6767
}

lib/src/generators/router/generator/navigate_extension_class/navigate_extension_class_builder_helper.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ mixin NavigateExtensionClassBuilderHelper {
9090
///
9191
/// int? routerId,
9292
/// bool preventDuplicates = true,
93-
/// Map<String, String>? parameters,
94-
/// Widget Function(BuildContext, Animation<double>, Animation<double>, Widget)? transition,
93+
/// Map`<String, String>?` parameters,
94+
/// Widget Function(BuildContext, Animation`<double>`, Animation`<double>`, Widget)? transition,
9595
List<Parameter> get _constParameters => [
9696
Parameter((b) => b
9797
..name = 'routerId'

lib/src/generators/router/generator/router_class/router_class_builder_helper.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ mixin RouterClassBuilderHelper {
3636
/// Example
3737
///
3838
/// @override
39-
/// Map<Type, _i1.StackedRouteFactory> get pagesMap => _pagesMap;
39+
/// Map`<Type, _i1.StackedRouteFactory>` get pagesMap => _pagesMap;
4040
Method get pagesMapGetter => Method((b) => b
4141
..name = 'pagesMap'
4242
..annotations.add(const Reference('override'))
@@ -74,7 +74,7 @@ mixin RouterClassBuilderHelper {
7474

7575
/// Example
7676
///
77-
/// final _pagesMap = <Type, _i1.StackedRouteFactory>{};
77+
/// final _pagesMap = `<Type, _i1.StackedRouteFactory>`{};
7878
Field mapOfPages(List<RouteConfig> routes) => Field(
7979
(b) => b
8080
..name = '_pagesMap'
@@ -142,7 +142,7 @@ mixin RouterClassBuilderHelper {
142142

143143
/// Example
144144
///
145-
/// return MaterialPageRoute<dynamic>(
145+
/// return MaterialPageRoute`<dynamic>`(
146146
/// builder: (context) => HomeView(
147147
/// key: args.key,
148148
/// title: args.title,

lib/src/generators/router/generator/routes_class/routes_class_builder.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class RoutesClassBuilder {
1515
/// static const String loginView = 'pathNamaw';
1616
/// static const String _homeView = '/family/:fid';
1717
/// static String homeView({@required dynamic fid}) => '/family/\$fid';
18-
/// static const all = <String>{
18+
/// static const all = `<String>`{
1919
/// loginView,_homeView,};}
2020
///
2121
Class buildRoutesClass() {

lib/src/generators/router/route_config/material_route_config.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ class MaterialRouteConfig extends RouteConfig {
1616
super.children,
1717
super.imports,
1818
super.parentClassName,
19+
super.pageType,
1920
});
2021

2122
Code registerRoute() {

lib/src/helpers/file_helper.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ class FileHelper {
9999
/// filePath (String): The path to the file to read.
100100
///
101101
/// Returns:
102-
/// A Future<List<String>>
102+
/// A Future`<List<String>>`
103103
Future<List<String>> readFileAsLines({
104104
required String filePath,
105105
}) {

pubspec.yaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,9 @@ version: 2.0.0
55
homepage: https://github.com/FilledStacks/stacked/tree/master/packages/stacked_generator
66

77
environment:
8-
sdk: ">=2.17.0 <4.0.0"
8+
sdk: ">=2.19.0 <4.0.0"
99

1010
dependencies:
11-
1211
build: ^3.0.0
1312
path: ^1.9.1
1413
recase: ^4.1.0

test/bottomsheets/bottomsheet_class_generator_test.dart

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,36 +2,59 @@ import 'package:stacked_generator/src/generators/bottomsheets/bottomsheet_config
22
import 'package:stacked_generator/src/generators/bottomsheets/generate/bottomsheet_class_generator.dart';
33
import 'package:test/test.dart';
44

5-
import '../helpers/test_constants/bottomsheets_constants.dart';
5+
import '../helpers/ast/bottomsheet_ast_validators.dart';
66

77
void main() {
88
group('BottomsheetClassGeneratorTest -', () {
99
group('generate -', () {
1010
test('When empty', () async {
1111
final generator = BottomsheetClassGenerator([]);
12-
expect(await generator.generate(), kBottomsheetsEmpty);
12+
final result = await generator.generate();
13+
14+
BottomsheetClassGeneratorAstValidator.validateEmptyBottomsheetSetup(
15+
result,
16+
expectedLocatorCall: 'locator',
17+
);
1318
});
1419
test('When change locator name', () async {
1520
final generator =
1621
BottomsheetClassGenerator([], locatorName: 'customLocator');
17-
expect(await generator.generate(), kBottomsheetsWithCustomNamedLocator);
22+
final result = await generator.generate();
23+
24+
BottomsheetClassGeneratorAstValidator.validateEmptyBottomsheetSetup(
25+
result,
26+
expectedLocatorCall: 'customLocator',
27+
);
1828
});
1929
test('One bottomsheet', () async {
20-
final generator = BottomsheetClassGenerator([
30+
final bottomsheets = [
2131
const BottomsheetConfig(
2232
import: 'one.dart', bottomsheetClassName: 'BasicBottomsheet')
23-
]);
24-
expect(await generator.generate(), kOneBottomsheet);
33+
];
34+
final generator = BottomsheetClassGenerator(bottomsheets);
35+
final result = await generator.generate();
36+
37+
BottomsheetClassGeneratorAstValidator.validateBottomsheetSetup(
38+
result,
39+
expectedBottomsheets: bottomsheets,
40+
expectedLocatorCall: 'locator',
41+
);
2542
});
2643
test('Two bottomsheets', () async {
27-
final generator = BottomsheetClassGenerator([
44+
final bottomsheets = [
2845
const BottomsheetConfig(
2946
import: 'one.dart', bottomsheetClassName: 'BasicBottomsheet'),
3047
const BottomsheetConfig(
3148
import: 'two.dart', bottomsheetClassName: 'ComplexBottomsheet')
32-
]);
49+
];
50+
final generator = BottomsheetClassGenerator(bottomsheets);
51+
final result = await generator.generate();
3352

34-
expect(await generator.generate(), kTwoBottomsheets);
53+
BottomsheetClassGeneratorAstValidator.validateBottomsheetSetup(
54+
result,
55+
expectedBottomsheets: bottomsheets,
56+
expectedLocatorCall: 'locator',
57+
);
3558
});
3659
});
3760
});

0 commit comments

Comments
 (0)