@@ -180,6 +180,55 @@ def _normalize_test(ctx):
180
180
181
181
normalize_test = unittest .make (_normalize_test )
182
182
183
+ def _is_normalized_test (ctx ):
184
+ """Unit tests for paths.is_normalized."""
185
+ env = unittest .begin (ctx )
186
+
187
+ # Try the most basic cases.
188
+ asserts .true (env , paths .is_normalized ("" ))
189
+ asserts .false (env , paths .is_normalized ("." ))
190
+ asserts .true (env , paths .is_normalized ("/" ))
191
+ asserts .true (env , paths .is_normalized ("/tmp" ))
192
+ asserts .true (env , paths .is_normalized ("tmp" ))
193
+ asserts .true (env , paths .is_normalized ("c:/" ))
194
+ asserts .false (env , paths .is_normalized ("../a" ))
195
+ asserts .false (env , paths .is_normalized ("a/.." ))
196
+
197
+ # Try some basic adjacent-slash removal.
198
+ asserts .true (env , paths .is_normalized ("foo//bar" ))
199
+ asserts .true (env , paths .is_normalized ("foo////bar" ))
200
+
201
+ # Try some "." removal.
202
+ asserts .false (env , paths .is_normalized ("foo/./bar" ))
203
+ asserts .false (env , paths .is_normalized ("./foo/bar" ))
204
+ asserts .false (env , paths .is_normalized ("foo/bar/." ))
205
+ asserts .false (env , paths .is_normalized ("/." ))
206
+
207
+ # Try some ".." removal.
208
+ asserts .false (env , paths .is_normalized ("foo/../bar" ))
209
+ asserts .false (env , paths .is_normalized ("foo/bar/.." ))
210
+ asserts .false (env , paths .is_normalized ("foo/.." ))
211
+ asserts .false (env , paths .is_normalized ("foo/bar/../.." ))
212
+ asserts .false (env , paths .is_normalized ("foo/../.." ))
213
+ asserts .false (env , paths .is_normalized ("/foo/../.." ))
214
+ asserts .false (env , paths .is_normalized ("a/b/../../../../c/d/.." ))
215
+
216
+ # Make sure one or two initial slashes are preserved, but three or more are
217
+ # collapsed to a single slash.
218
+ asserts .true (env , paths .is_normalized ("/foo" ))
219
+ asserts .true (env , paths .is_normalized ("//foo" ))
220
+ asserts .true (env , paths .is_normalized ("///foo" ))
221
+
222
+ # Trailing slashes should be removed unless the entire path is a trailing
223
+ # slash.
224
+ asserts .true (env , paths .is_normalized ("/" ))
225
+ asserts .true (env , paths .is_normalized ("foo/" ))
226
+ asserts .true (env , paths .is_normalized ("foo/bar/" ))
227
+
228
+ return unittest .end (env )
229
+
230
+ is_normalized_test = unittest .make (_is_normalized_test )
231
+
183
232
def _relativize_test (ctx ):
184
233
"""Unit tests for paths.relativize."""
185
234
env = unittest .begin (ctx )
@@ -276,6 +325,31 @@ def _split_extension_test(ctx):
276
325
277
326
split_extension_test = unittest .make (_split_extension_test )
278
327
328
+ def _starts_with_test (ctx ):
329
+ """Unit tests for paths.starts_with."""
330
+ env = unittest .begin (ctx )
331
+
332
+ # Make sure that relative-to-current-directory works in all forms.
333
+ asserts .true (env , paths .starts_with ("foo" , "" ))
334
+ asserts .false (env , paths .starts_with ("foo" , "." ))
335
+
336
+ # Try some regular cases.
337
+ asserts .true (env , paths .starts_with ("foo/bar" , "foo" ))
338
+ asserts .false (env , paths .starts_with ("foo/bar" , "fo" ))
339
+ asserts .true (env , paths .starts_with ("foo/bar/baz" , "foo/bar" ))
340
+ asserts .true (env , paths .starts_with ("foo/bar/baz" , "foo" ))
341
+
342
+ # Try a case where a parent directory is normalized away.
343
+ asserts .true (env , paths .starts_with ("foo/bar/../baz" , "foo" ))
344
+
345
+ # Relative paths work, as long as they share a common start.
346
+ asserts .true (env , paths .starts_with ("../foo/bar/baz/file" , "../foo/bar/baz" ))
347
+ asserts .true (env , paths .starts_with ("../foo/bar/baz/file" , "../foo/bar" ))
348
+
349
+ return unittest .end (env )
350
+
351
+ starts_with_test = unittest .make (_starts_with_test )
352
+
279
353
def paths_test_suite ():
280
354
"""Creates the test targets and test suite for paths.bzl tests."""
281
355
unittest .suite (
@@ -285,7 +359,9 @@ def paths_test_suite():
285
359
is_absolute_test ,
286
360
join_test ,
287
361
normalize_test ,
362
+ is_normalized_test ,
288
363
relativize_test ,
289
364
replace_extension_test ,
290
365
split_extension_test ,
366
+ starts_with_test ,
291
367
)
0 commit comments