Skip to content

Commit d1391b5

Browse files
committed
Update tests to new -label:l1,l2 format.
Escape embedded spaces.
1 parent 5296e76 commit d1391b5

File tree

2 files changed

+35
-10
lines changed

2 files changed

+35
-10
lines changed

lib/redirect.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ final _matchers = <RegExp, Uri Function(Match)>{
8484
'q': [
8585
'is:issue',
8686
'is:open',
87-
'-label:${_areaLabels.join(',')}',
87+
'-label:${_areaLabels.map(_quoteSpaces).join(',')}',
8888
].join(' '),
8989
},
9090
),
@@ -211,3 +211,5 @@ String get _dateOneMonth {
211211
'${date.month.toString().padLeft(2, '0')}-'
212212
'${date.day.toString().padLeft(2, '0')}';
213213
}
214+
215+
String _quoteSpaces(String label) => label.contains(' ') ? '"$label"' : label;

test/redirect_test.dart

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -84,17 +84,20 @@ void main() {
8484
});
8585

8686
test('triage/sdk spaces escaped', () {
87-
final actual =
88-
findRedirect(Uri.parse('https://dartbug.com/triage/sdk')).toString();
87+
final actual = findRedirect(Uri.parse('https://dartbug.com/triage/sdk'))!;
88+
89+
final parameters = actual.queryParameters['q']!;
90+
final parts = splitParameters(parameters);
91+
final labels = parts.firstWhere((s) => s.startsWith('-label:'));
8992

9093
expect(
91-
actual,
92-
contains(Uri.encodeQueryComponent('-label:area-analyzer')),
94+
labels,
95+
contains('area-analyzer'),
9396
);
97+
9498
expect(
95-
actual,
96-
contains(
97-
Uri.encodeQueryComponent('-label:"area-migration (deprecated)"')),
99+
labels,
100+
contains('"area-migration (deprecated)"'),
98101
);
99102
});
100103
});
@@ -112,8 +115,8 @@ void main() {
112115
findRedirect(Uri.parse('https://dartbug.com/triage/core/issues'))
113116
.toString(),
114117
startsWith(
115-
'https://github.com/issues?q=is%3Aissue+is%3Aopen+-label%3Abug'
116-
'+-label%3Aenhancement+',
118+
'https://github.com/issues?q=is%3Aissue+is%3Aopen+-label%3Abug%2C'
119+
'enhancement',
117120
),
118121
);
119122
});
@@ -188,3 +191,23 @@ void main() {
188191
}
189192
});
190193
}
194+
195+
// Splits on spaces, if not inside quotes.
196+
List<String> splitParameters(String parameters) {
197+
const space = 0x20;
198+
const quote = 0x22;
199+
final result = <String>[];
200+
var start = 0;
201+
var insideQuote = false;
202+
for (var i = 0; i < parameters.length; i++) {
203+
final char = parameters.codeUnitAt(i);
204+
if (char == quote) {
205+
insideQuote = !insideQuote;
206+
} else if (char == space && !insideQuote) {
207+
if (i > start) result.add(parameters.substring(start, i));
208+
start = i + 1;
209+
}
210+
}
211+
if (start < parameters.length) result.add(parameters.substring(start));
212+
return result;
213+
}

0 commit comments

Comments
 (0)