@@ -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