@@ -22,30 +22,59 @@ String generateFeatureDart(List<BddLine> lines, List<StepFile> steps) {
2222
2323 sb.writeln ('' );
2424 sb.writeln ('void main() {' );
25+ _parseBackground (sb, lines);
2526
2627 final features = splitWhen (
2728 lines.skipWhile ((value) => value.type != LineType .feature), // skip header
2829 (e) => e.type == LineType .feature);
2930
3031 for (final feature in features) {
31- sb.writeln (' group(\' ${feature .first .value }\' , () {' );
32+ _parseFeature (sb, feature);
33+ }
34+ sb.writeln ('}' );
35+ return sb.toString ();
36+ }
3237
33- final scenarios =
34- splitWhen (feature.skip (1 ), (e) => e.type == LineType .scenario).toList ();
35- for (final scenario in scenarios) {
36- sb.writeln (
37- ' testWidgets(\' ${scenario .first .value }\' , (WidgetTester tester) async {' );
38+ var backgroundOffset = - 1 ;
39+ void _parseBackground (StringBuffer sb, List <BddLine > feature) {
40+ backgroundOffset =
41+ feature.indexWhere ((element) => element.type == LineType .background);
42+ if (backgroundOffset == - 1 ) {
43+ return ;
44+ }
45+ sb.writeln (' setUp(() async {' );
46+ backgroundOffset++ ;
47+ while (feature[backgroundOffset].type == LineType .step) {
48+ sb.writeln (
49+ ' await ${getStepMethodCall (feature [backgroundOffset ].value )};' );
50+ backgroundOffset++ ;
51+ }
52+ sb.writeln (' });' );
53+ }
3854
39- for (final step in scenario.skip (1 )) {
40- sb.writeln (' await ${getStepMethodCall (step .value )};' );
41- }
55+ void _parseFeature (StringBuffer sb, List <BddLine > feature) {
56+ sb.writeln (' group(\' ${feature .first .value }\' , () {' );
4257
43- sb.writeln (' });' );
44- }
45- sb.writeln (' });' );
58+ final scenarios = splitWhen (
59+ feature.skip (backgroundOffset == - 1
60+ ? 1 // Skip 'Feature:'
61+ : backgroundOffset), // or 'Backround:'
62+ (e) => e.type == LineType .scenario).toList ();
63+ for (final scenario in scenarios) {
64+ _parseScenario (sb, scenario);
4665 }
47- sb.writeln ('}' );
48- return sb.toString ();
66+ sb.writeln (' });' );
67+ }
68+
69+ void _parseScenario (StringBuffer sb, List <BddLine > scenario) {
70+ sb.writeln (
71+ ' testWidgets(\' ${scenario .first .value }\' , (WidgetTester tester) async {' );
72+
73+ for (final step in scenario.skip (1 )) {
74+ sb.writeln (' await ${getStepMethodCall (step .value )};' );
75+ }
76+
77+ sb.writeln (' });' );
4978}
5079
5180List <List <T >> splitWhen <T >(Iterable <T > original, bool Function (T ) predicate) =>
0 commit comments