|
| 1 | +import 'dart:math'; |
| 2 | + |
1 | 3 | import 'package:bdd_widget_test/src/bdd_line.dart'; |
2 | 4 | import 'package:bdd_widget_test/src/step_file.dart'; |
3 | 5 | import 'package:bdd_widget_test/src/step_generator.dart'; |
@@ -29,36 +31,49 @@ String generateFeatureDart(List<BddLine> lines, List<StepFile> steps) { |
29 | 31 |
|
30 | 32 | for (final feature in features) { |
31 | 33 | final backgroundOffset = _parseBackground(sb, feature); |
32 | | - _parseFeature(sb, feature, backgroundOffset); |
| 34 | + final afterOffset = _parseAfter(sb, feature); |
| 35 | + final offset = _calculateOffset(backgroundOffset, afterOffset); |
| 36 | + _parseFeature(sb, feature, offset); |
33 | 37 | } |
34 | 38 | sb.writeln('}'); |
35 | 39 | return sb.toString(); |
36 | 40 | } |
37 | 41 |
|
38 | | -int _parseBackground(StringBuffer sb, List<BddLine> lines) { |
39 | | - var backgroundOffset = |
40 | | - lines.indexWhere((element) => element.type == LineType.background); |
41 | | - if (backgroundOffset != -1) { |
42 | | - sb.writeln(' setUp(() async {'); |
43 | | - backgroundOffset++; |
44 | | - while (lines[backgroundOffset].type == LineType.step) { |
45 | | - sb.writeln( |
46 | | - ' await ${getStepMethodName(lines[backgroundOffset].value)}();'); |
47 | | - backgroundOffset++; |
| 42 | +int _parseBackground(StringBuffer sb, List<BddLine> lines) => |
| 43 | + _parseSetup(sb, lines, LineType.background, 'setUp'); |
| 44 | + |
| 45 | +int _parseAfter(StringBuffer sb, List<BddLine> lines) => |
| 46 | + _parseSetup(sb, lines, LineType.after, 'tearDown'); |
| 47 | + |
| 48 | +int _calculateOffset(int backgroundOffset, int afterOffset) { |
| 49 | + if (backgroundOffset == -1 && afterOffset == -1) { |
| 50 | + return -1; |
| 51 | + } |
| 52 | + return max(backgroundOffset, afterOffset); |
| 53 | +} |
| 54 | + |
| 55 | +int _parseSetup( |
| 56 | + StringBuffer sb, List<BddLine> lines, LineType elementType, String title) { |
| 57 | + var offset = lines.indexWhere((element) => element.type == elementType); |
| 58 | + if (offset != -1) { |
| 59 | + sb.writeln(' $title(() async {'); |
| 60 | + offset++; |
| 61 | + while (lines[offset].type == LineType.step) { |
| 62 | + sb.writeln(' await ${getStepMethodName(lines[offset].value)}();'); |
| 63 | + offset++; |
48 | 64 | } |
49 | 65 | sb.writeln(' });'); |
50 | 66 | } |
51 | | - return backgroundOffset; |
| 67 | + return offset; |
52 | 68 | } |
53 | 69 |
|
54 | | -void _parseFeature( |
55 | | - StringBuffer sb, List<BddLine> feature, int backgroundOffset) { |
| 70 | +void _parseFeature(StringBuffer sb, List<BddLine> feature, int offset) { |
56 | 71 | sb.writeln(' group(\'${feature.first.value}\', () {'); |
57 | 72 |
|
58 | 73 | final scenarios = splitWhen( |
59 | | - feature.skip(backgroundOffset == -1 |
| 74 | + feature.skip(offset == -1 |
60 | 75 | ? 1 // Skip 'Feature:' |
61 | | - : backgroundOffset), // or 'Backround:' |
| 76 | + : offset), // or 'Backround:' / 'After:' |
62 | 77 | (e) => e.type == LineType.scenario).toList(); |
63 | 78 | for (final scenario in scenarios) { |
64 | 79 | _parseScenario(sb, scenario); |
|
0 commit comments