Skip to content
9 changes: 6 additions & 3 deletions lib/src/scenario_generator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -120,15 +120,18 @@ Iterable<BddLine> _processScenarioLines(
for (final line in lines.skip(1)) {
yield BddLine.fromValue(
line.type,
_replacePlaceholders(line.value, examples),
_replacePlaceholders(
line.value, line.type == LineType.dataTableStep, examples),
);
}
}

String _replacePlaceholders(String line, Map<String, String> example) {
String _replacePlaceholders(
String line, bool isDataTableStep, Map<String, String> example) {
var replaced = line;
for (final e in example.keys) {
replaced = replaced.replaceAll('<$e>', '{${example[e]}}');
final value = isDataTableStep ? '${example[e]}' : '{${example[e]}}';
replaced = replaced.replaceAll('<$e>', value);
}
return replaced;
}
51 changes: 51 additions & 0 deletions test/data_tables_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -485,4 +485,55 @@ Future<void> theFollowingSongs(WidgetTester tester, String param1, bdd.DataTable
expectedStep,
);
});

test('Scenario Outline with data table variables', () {
const featureFile = '''
Feature: Testing feature
Scenario Outline: Add and remove buttons work together
Given the app is running
When I tap add icon <times> times
Then I see result
| 'counter' | 'color' |
| <counter> | <color> |
Examples:
| times | counter | color |
| 20 | '20' | 'blue' |
| 25 | '25' | 'green' |
''';

const expectedFeatureDart = '''
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning

import 'package:bdd_widget_test/data_table.dart' as bdd;
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';

import './step/the_app_is_running.dart';
import './step/i_tap_add_icon_times.dart';
import './step/i_see_result.dart';

void main() {
group(\'\'\'Testing feature\'\'\', () {
testWidgets(\'\'\'Outline: Add and remove buttons work together (20, '20', 'blue')\'\'\', (tester) async {
await theAppIsRunning(tester);
await iTapAddIconTimes(tester, 20);
await iSeeResult(tester, const bdd.DataTable([['counter', 'color'], ['20', 'blue']]));
});
testWidgets(\'\'\'Outline: Add and remove buttons work together (25, '25', 'green')\'\'\', (tester) async {
await theAppIsRunning(tester);
await iTapAddIconTimes(tester, 25);
await iSeeResult(tester, const bdd.DataTable([['counter', 'color'], ['25', 'green']]));
});
});
}
''';

final feature = FeatureFile(
featureDir: 'test.feature',
package: 'test',
input: featureFile,
);
expect(feature.dartContent, expectedFeatureDart);
});
}