|
@@ -0,0 +1,74 @@
|
|
|
+package pagebuilder
|
|
|
+
|
|
|
+import (
|
|
|
+ "path"
|
|
|
+ "testing"
|
|
|
+)
|
|
|
+
|
|
|
+func TestSlugReg(t *testing.T) {
|
|
|
+ cases := []string{
|
|
|
+ "/apple",
|
|
|
+ "/Apple",
|
|
|
+ "/fruit/Apple",
|
|
|
+ "/fruit/Apple/Red",
|
|
|
+ "/fruit/bAnAnA/yElLoW",
|
|
|
+ "/vegetable/Carrot/Orange",
|
|
|
+ "/animal/Dog/Brown",
|
|
|
+ "/animal/Cat/Gray",
|
|
|
+ "/vehicle/Car/Red",
|
|
|
+ "/City/New-York",
|
|
|
+ "/Country/United-States/New-York",
|
|
|
+ "/fruit/apple",
|
|
|
+ "/fruit/apple/red",
|
|
|
+ "/fruit/banana/yellow",
|
|
|
+ "/vegetable/carrot/orange",
|
|
|
+ "/animal/dog/brown",
|
|
|
+ "/animal/cat/gray",
|
|
|
+ "/vehicle/car/red",
|
|
|
+ "/city/new-york",
|
|
|
+ "/country/united-states/new-york",
|
|
|
+ "/user/john_doe",
|
|
|
+ "/product/12345",
|
|
|
+ "/page/home",
|
|
|
+ "/file/file-name",
|
|
|
+ "/images/image_01",
|
|
|
+ "/folder/sub_folder",
|
|
|
+ "/route/route-1",
|
|
|
+ "/data/data123",
|
|
|
+ "/user/user12345/profile",
|
|
|
+ }
|
|
|
+
|
|
|
+ casesNotMatch := []string{
|
|
|
+ "apple",
|
|
|
+ "*apple",
|
|
|
+ "$fruit/apple",
|
|
|
+ "/fruit/apple&banana",
|
|
|
+ "#vegetable/carrot",
|
|
|
+ "/animal/dog:",
|
|
|
+ "/animal/dog#cat",
|
|
|
+ "%20images/image01",
|
|
|
+ `/user\john`,
|
|
|
+ "/product?item=123",
|
|
|
+ `/my$folder`,
|
|
|
+ `/usr#bin`,
|
|
|
+ `/home/user&docs`,
|
|
|
+ `/var/www/my folder`,
|
|
|
+ `/home/user/documents/with space`,
|
|
|
+ `/home/user*docs`,
|
|
|
+ `/usr?bin`,
|
|
|
+ `/var/www/my\tfolder`,
|
|
|
+ `/home/user/documents\nwithnewline`,
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, c := range cases {
|
|
|
+ if !directoryRe.MatchString(path.Clean(c)) {
|
|
|
+ t.Errorf("directoryRe.MatchString(%q) = false, want true", c)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, c := range casesNotMatch {
|
|
|
+ if directoryRe.MatchString(path.Clean(c)) {
|
|
|
+ t.Errorf("directoryRe.MatchString(%q) = true, want false", c)
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|