kythe.io@v0.0.68-0.20240422202219-7225dbc01741/kythe/go/languageserver/pathmap/mapper_test.go (about) 1 /* 2 * Copyright 2017 The Kythe Authors. All rights reserved. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package pathmap 18 19 import ( 20 "reflect" 21 "testing" 22 ) 23 24 type values map[string]string 25 type failures []string 26 type successes []struct { 27 string 28 values 29 } 30 31 type testcase struct { 32 successes 33 failures 34 } 35 36 var cases = map[string]testcase{ 37 "": { 38 successes{ 39 {"", values{}}, 40 }, 41 failures{"fail"}, 42 }, 43 "hello": { 44 successes{ 45 {"hello", values{}}, 46 }, 47 failures{"", "notHello"}, 48 }, 49 ":file": { 50 successes{ 51 {"hello", values{"file": "hello"}}, 52 }, 53 failures{"dir/file"}, 54 }, 55 "/dir/:file": { 56 successes{ 57 {"/dir/test", values{"file": "test"}}, 58 }, 59 failures{"", "dir/", "dir/test", "/dir/trailing/", "/dir/too/long"}, 60 }, 61 "/dir/:files*": { 62 successes{ 63 {"/dir/test", values{"files": "test"}}, 64 {"/dir/test/nested", values{"files": "test/nested"}}, 65 }, 66 failures{"/dir/test/", "/dir/"}, 67 }, 68 "/dir/:splat*/sep/:file": { 69 successes{ 70 {"/dir/deeply/nested/sep/img.png", values{"splat": "deeply/nested", "file": "img.png"}}, 71 }, 72 failures{"/dir//sep/hi"}, 73 }, 74 } 75 76 func TestNewMapper(t *testing.T) { 77 for p := range cases { 78 _, err := NewMapper(p) 79 if err != nil { 80 t.Errorf("unexpected error parsing pattern (%s):\n%v", p, err) 81 } 82 } 83 84 _, err := NewMapper("not a path") 85 if err == nil { 86 t.Error("expected error parsing non-path pattern") 87 } 88 } 89 90 func TestMapperParseGenerate(t *testing.T) { 91 for pat, c := range cases { 92 m, err := NewMapper(pat) 93 if err != nil { 94 t.Errorf("unexpected error parsing pattern (%s):\n%v", pat, err) 95 continue 96 } 97 98 for _, p := range c.successes { 99 v, err := m.Parse(p.string) 100 if err != nil { 101 t.Errorf("unexpected error parsing path (%s) with pattern (%v):\n%v", p.string, m.re, err) 102 } 103 if !reflect.DeepEqual(values(v), p.values) { 104 t.Errorf("incorrect values parsing path (%s) with pattern (%s):\nExpected: %v\nFound: %v", p.string, pat, p.values, v) 105 } 106 107 g, err := m.Generate(p.values) 108 if err != nil { 109 t.Errorf("unexpected error generating path with pattern (%s) and values (%v)", pat, p.values) 110 } 111 if g != p.string { 112 t.Errorf("incorrect generated path with pattern (%s) and values (%v):\nExpected: %s\nFound: %s", pat, p.values, p.string, g) 113 } 114 } 115 116 for _, p := range c.failures { 117 _, err := m.Parse(p) 118 if err == nil { 119 t.Errorf("expected error parsing path (%s) with pattern (%s)", p, pat) 120 } 121 } 122 } 123 }