Skip to content

Commit 865fb4d

Browse files
committed
Refactor string utils
1 parent 13ae04f commit 865fb4d

9 files changed

Lines changed: 262 additions & 15 deletions

lib/src/feature_generator.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ String generateFeatureDart(List<BddLine> lines, List<StepFile> steps) {
88
final sb = StringBuffer();
99
sb.writeln('// GENERATED CODE - DO NOT MODIFY BY HAND');
1010
sb.writeln('// ignore_for_file: unused_import, directives_ordering');
11-
sb.writeln('');
11+
sb.writeln();
1212
sb.writeln('import \'package:flutter/material.dart\';');
1313
sb.writeln('import \'package:flutter_test/flutter_test.dart\';');
14-
sb.writeln('');
14+
sb.writeln();
1515

1616
for (final line
1717
in lines.takeWhile((value) => value.type != LineType.feature)) {
@@ -22,7 +22,7 @@ String generateFeatureDart(List<BddLine> lines, List<StepFile> steps) {
2222
sb.writeln('import \'$step\';');
2323
}
2424

25-
sb.writeln('');
25+
sb.writeln();
2626
sb.writeln('void main() {');
2727

2828
final features = splitWhen<BddLine>(

lib/src/step_file.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ import 'package:path/path.dart' as p;
44
class StepFile {
55
StepFile(String featureDir, this.package, this.line)
66
: filename = p.join(featureDir, 'step', '${getStepFilename(line)}.dart'),
7-
import = p.join('.', 'step', '${getStepFilename(line)}.dart').replaceAll('\\', '/');
7+
import = p
8+
.join('.', 'step', '${getStepFilename(line)}.dart')
9+
.replaceAll('\\', '/');
810

911
final String filename;
1012
final String import;

lib/src/step_generator.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import 'package:bdd_widget_test/src/step/i_tap_text.dart';
1212
import 'package:bdd_widget_test/src/step/i_tap_text_and_wait.dart';
1313
import 'package:bdd_widget_test/src/step/i_wait.dart';
1414
import 'package:bdd_widget_test/src/step/the_app_is_running_step.dart';
15-
import 'package:strings/strings.dart';
15+
import 'package:bdd_widget_test/src/util/string_utils.dart';
1616

1717
String getStepFilename(String stepText) {
1818
final step = getStepMethodName(stepText);
@@ -26,7 +26,7 @@ String getStepMethodName(String stepText) {
2626
.replaceAll(repeatingSpacesRegExp, ' ')
2727
.trim()
2828
.replaceAll(' ', '_');
29-
return camelize(text, true);
29+
return camelize(text);
3030
}
3131

3232
String getStepMethodCall(String stepLine) {

lib/src/util/string_utils.dart

Lines changed: 215 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,215 @@
1+
import 'package:characters/characters.dart';
2+
3+
const int _DIGIT = 1;
4+
const int _LOWER = 2;
5+
const int _UNDERSCORE = 4;
6+
const int _UPPER = 8;
7+
const int _ALPHA = _LOWER | _UPPER;
8+
const int _ALPHA_NUM = _ALPHA | _DIGIT;
9+
const int _ASCII_END = 127; // _ascii list length
10+
11+
/// "The app is running" => "the app is running"
12+
/// "theAppIsRunning" => "the_app_is_running"
13+
String underscore(String input) {
14+
final sb = StringBuffer();
15+
var separate = false;
16+
Characters(input).forEach((s) {
17+
final type = _getAsciiType(s.runes);
18+
19+
if (separate && type & _UPPER != 0) {
20+
sb.write('_');
21+
sb.write(s.toLowerCase());
22+
separate = true;
23+
} else {
24+
sb.write(s.toLowerCase());
25+
separate = type & _ALPHA_NUM != 0 || type & _UNDERSCORE != 0 && separate;
26+
}
27+
});
28+
29+
return sb.toString();
30+
}
31+
32+
/// "The_app_is_running" => "theAppIsRunning"
33+
String camelize(String input) {
34+
final string = input.toLowerCase();
35+
final sb = StringBuffer();
36+
37+
var capitalize = true;
38+
var isBeginning = true;
39+
var remove = false;
40+
41+
Characters(string).forEach((s) {
42+
final type = _getAsciiType(s.runes);
43+
44+
if (capitalize && type & _ALPHA != 0) {
45+
sb.write(isBeginning ? s : s.toUpperCase());
46+
47+
capitalize = false;
48+
remove = true;
49+
isBeginning = false;
50+
} else {
51+
if (type & _UNDERSCORE != 0) {
52+
if (!remove) {
53+
sb.write(s);
54+
remove = true;
55+
}
56+
57+
capitalize = true;
58+
} else {
59+
if (type & _ALPHA_NUM != 0) {
60+
capitalize = false;
61+
remove = true;
62+
} else {
63+
capitalize = true;
64+
remove = false;
65+
isBeginning = true;
66+
}
67+
68+
sb.write(s);
69+
}
70+
}
71+
});
72+
73+
return sb.toString();
74+
}
75+
76+
int _getAsciiType(Runes runes) {
77+
if (runes.length == 1) {
78+
final c = runes.first;
79+
if (c <= _ASCII_END) {
80+
return _ascii[c];
81+
}
82+
}
83+
return 0;
84+
}
85+
86+
final List<int> _ascii = <int>[
87+
0,
88+
0,
89+
0,
90+
0,
91+
0,
92+
0,
93+
0,
94+
0,
95+
0,
96+
0,
97+
0,
98+
0,
99+
0,
100+
0,
101+
0,
102+
0,
103+
0,
104+
0,
105+
0,
106+
0,
107+
0,
108+
0,
109+
0,
110+
0,
111+
0,
112+
0,
113+
0,
114+
0,
115+
0,
116+
0,
117+
0,
118+
0,
119+
0,
120+
0,
121+
0,
122+
0,
123+
0,
124+
0,
125+
0,
126+
0,
127+
0,
128+
0,
129+
0,
130+
0,
131+
0,
132+
0,
133+
0,
134+
0,
135+
1,
136+
1,
137+
1,
138+
1,
139+
1,
140+
1,
141+
1,
142+
1,
143+
1,
144+
1,
145+
0,
146+
0,
147+
0,
148+
0,
149+
0,
150+
0,
151+
0,
152+
8,
153+
8,
154+
8,
155+
8,
156+
8,
157+
8,
158+
8,
159+
8,
160+
8,
161+
8,
162+
8,
163+
8,
164+
8,
165+
8,
166+
8,
167+
8,
168+
8,
169+
8,
170+
8,
171+
8,
172+
8,
173+
8,
174+
8,
175+
8,
176+
8,
177+
8,
178+
0,
179+
0,
180+
0,
181+
0,
182+
4,
183+
0,
184+
2,
185+
2,
186+
2,
187+
2,
188+
2,
189+
2,
190+
2,
191+
2,
192+
2,
193+
2,
194+
2,
195+
2,
196+
2,
197+
2,
198+
2,
199+
2,
200+
2,
201+
2,
202+
2,
203+
2,
204+
2,
205+
2,
206+
2,
207+
2,
208+
2,
209+
2,
210+
0,
211+
0,
212+
0,
213+
0,
214+
0
215+
];

test/after_test.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,11 @@ void main() {
3333
}
3434
''';
3535

36-
final feature = FeatureFile(path: 'test.feature', input: featureFile);
36+
final feature = FeatureFile(
37+
path: 'test.feature',
38+
package: 'test',
39+
input: featureFile,
40+
);
3741
expect(feature.dartContent, expectedFeatureDart);
3842
});
3943
}

test/background_test.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,11 @@ void main() {
3333
}
3434
''';
3535

36-
final feature = FeatureFile(path: 'test.feature', input: featureFile);
36+
final feature = FeatureFile(
37+
path: 'test.feature',
38+
package: 'test',
39+
input: featureFile,
40+
);
3741
expect(feature.dartContent, expectedFeatureDart);
3842
});
3943
}

test/feature_test.dart

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,11 @@ void main() {
2222
}
2323
''';
2424

25-
final feature = FeatureFile(path: 'test.feature', input: '');
25+
final feature = FeatureFile(
26+
path: 'test.feature',
27+
package: 'test',
28+
input: '',
29+
);
2630
expect(feature.dartContent, expectedFeatureDart);
2731
});
2832

@@ -40,8 +44,11 @@ void main() {
4044
}
4145
''';
4246

43-
final feature =
44-
FeatureFile(path: 'test.feature', input: minimalFeatureFile);
47+
final feature = FeatureFile(
48+
path: 'test.feature',
49+
package: 'test',
50+
input: minimalFeatureFile,
51+
);
4552
expect(feature.dartContent, expectedFeatureDart);
4653
});
4754

@@ -63,7 +70,11 @@ void main() {
6370
}
6471
''';
6572

66-
final feature = FeatureFile(path: 'test.feature', input: featureFile);
73+
final feature = FeatureFile(
74+
path: 'test.feature',
75+
package: 'test',
76+
input: featureFile,
77+
);
6778
expect(feature.dartContent, expectedFeatureDart);
6879
});
6980

@@ -91,7 +102,11 @@ void main() {
91102
}
92103
''';
93104

94-
final feature = FeatureFile(path: 'test.feature', input: bigFeatureFile);
105+
final feature = FeatureFile(
106+
path: 'test.feature',
107+
package: 'test',
108+
input: bigFeatureFile,
109+
);
95110
expect(feature.dartContent, expectedFeatureDart);
96111
});
97112
}

test/lines_before_feature_test.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,10 @@ void main() {
3333
''';
3434

3535
final feature = FeatureFile(
36-
path: 'test.feature', input: additionalLines + minimalFeatureFile);
36+
path: 'test.feature',
37+
package: 'test',
38+
input: additionalLines + minimalFeatureFile,
39+
);
3740
expect(feature.dartContent, expectedFeatureDart);
3841
});
3942
}

test/setup_test.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,11 @@ void main() {
3939
}
4040
''';
4141

42-
final feature = FeatureFile(path: 'test.feature', input: featureFile);
42+
final feature = FeatureFile(
43+
path: 'test.feature',
44+
package: 'test',
45+
input: featureFile,
46+
);
4347
expect(feature.dartContent, expectedFeatureDart);
4448
});
4549
}

0 commit comments

Comments
 (0)