Skip to content

Commit a957121

Browse files
committed
Fix regular expressions for parameters parsing
1 parent a526554 commit a957121

9 files changed

Lines changed: 26 additions & 27 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ Feature: Counter
6161
6262
Scenario: Plus button increases the counter
6363
Given the app is running
64-
When I tap on {Icons.add} icon
64+
When I tap {Icons.add} icon
6565
Then I see {1} text
6666
```
6767

lib/src/feature_generator.dart

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ String generateFeatureDart(List<BddLine> lines, List<StepFile> steps) {
3737
' testWidgets(\'${scenario.first.value}\', (WidgetTester tester) async {');
3838

3939
for (final step in scenario.skip(1)) {
40-
sb.writeln(' await ${_generateStepCall(step.value)};');
40+
sb.writeln(' await ${getStepMethodCall(step.value)};');
4141
}
4242

4343
sb.writeln(' });');
@@ -48,19 +48,6 @@ String generateFeatureDart(List<BddLine> lines, List<StepFile> steps) {
4848
return sb.toString();
4949
}
5050

51-
String _generateStepCall(String stepLine) {
52-
final name = getStepMethodName(stepLine);
53-
54-
final regExp = RegExp(r'(?<=\{)\S+(?=\})', caseSensitive: false);
55-
final params = regExp.allMatches(stepLine);
56-
if (params.isEmpty) {
57-
return '$name(tester)';
58-
}
59-
60-
final methodParameters = params.map((p) => p.group(0)).join(', ');
61-
return '$name(tester, $methodParameters)';
62-
}
63-
6451
List<List<T>> splitWhen<T>(Iterable<T> original, bool Function(T) predicate) =>
6552
original.fold(<List<T>>[], (previousValue, element) {
6653
if (predicate(element)) {

lib/src/regex.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
final parametersRegExp = RegExp(r'\{(.*?)\}', caseSensitive: false);
2+
final charactersAndNumbersRegExp = RegExp(r'[^\w\s\d]+');
3+
final repeatingSpacesRegExp = RegExp(r'\s+');
4+
final parametersValueRegExp = RegExp(r'(?<=\{).+?(?=\})', caseSensitive: false);

lib/src/step/generic_step.dart

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1+
import 'package:bdd_widget_test/src/regex.dart';
12
import 'package:bdd_widget_test/src/step/bdd_step.dart';
23

3-
final _parametersValueRegExp =
4-
RegExp(r'(?<=\{)\S+(?=\})', caseSensitive: false);
5-
64
class GenericStep implements BddStep {
75
GenericStep(this.methodName, this.rawLine);
86

@@ -19,7 +17,7 @@ ${getStepSignature(rawLine)} {
1917
''';
2018

2119
String getStepSignature(String stepLine) {
22-
final params = _parametersValueRegExp.allMatches(stepLine);
20+
final params = parametersValueRegExp.allMatches(stepLine);
2321
if (params.isEmpty) {
2422
return 'Future<void> $methodName(WidgetTester tester) async';
2523
}

lib/src/step_generator.dart

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import 'package:bdd_widget_test/src/regex.dart';
12
import 'package:bdd_widget_test/src/step/bdd_step.dart';
23
import 'package:bdd_widget_test/src/step/dismiss_the_page.dart';
34
import 'package:bdd_widget_test/src/step/generic_step.dart';
@@ -10,10 +11,6 @@ import 'package:bdd_widget_test/src/step/i_tap_text.dart';
1011
import 'package:bdd_widget_test/src/step/the_app_is_running_step.dart';
1112
import 'package:strings/strings.dart';
1213

13-
final parametersRegExp = RegExp(r'\{\S+\}', caseSensitive: false);
14-
final charactersAndNumbersRegExp = RegExp(r'[^\w\s\d]+');
15-
final repeatingSpacesRegExp = RegExp(r'\s+');
16-
1714
String getStepFilename(String stepText) {
1815
final step = getStepMethodName(stepText);
1916
var u = underscore(step);
@@ -31,6 +28,19 @@ String getStepMethodName(String stepText) {
3128
return c;
3229
}
3330

31+
String getStepMethodCall(String stepLine) {
32+
final name = getStepMethodName(stepLine);
33+
34+
// final regExp = RegExp(r'(?<=\{)\S+(?=\})', caseSensitive: false);
35+
final params = parametersValueRegExp.allMatches(stepLine);
36+
if (params.isEmpty) {
37+
return '$name(tester)';
38+
}
39+
40+
final methodParameters = params.map((p) => p.group(0)).join(', ');
41+
return '$name(tester, $methodParameters)';
42+
}
43+
3444
String generateStepDart(String package, String line) {
3545
final methodName = getStepMethodName(line);
3646
final bddStep = _getStep(methodName, package, line);

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: bdd_widget_test
22
description: A BDD-style widget testing library. Generates Flutter widget tests from *.feature files.
3-
version: 0.1.0+1
3+
version: 0.1.1
44
author: Oleksandr Leuschenko <olexa.le@gmail.com>
55
homepage: https://github.com/olexale/bdd_widget_test
66

test/feature_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ void main() {
5656
group('Testing feature', () {
5757
testWidgets('Testing scenario', (WidgetTester tester) async {
5858
await theAppIsRunning(tester);
59-
await iSeeText(tester, 0);
59+
await iSeeText(tester, 'nice param');
6060
await iSeeIcon(tester, Icons.add);
6161
});
6262
});

test/step/i_see_text_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ void main() {
77
const featureFile = '''
88
Feature: Testing feature
99
Scenario: Testing scenario
10-
When I see {0} text
10+
When I see {'some text 42'} text
1111
''';
1212

1313
const expectedSteps = '''

test/testing_data.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ const featureFile = '''
88
Feature: Testing feature
99
Scenario: Testing scenario
1010
Given the app is running
11-
Then I see {0} text
11+
Then I see {'nice param'} text
1212
1313
And I see {Icons.add} icon
1414
''';

0 commit comments

Comments
 (0)