fork of go-git with some jj specific features
at main 237 lines 6.6 kB view raw
1package gitattributes 2 3import ( 4 "testing" 5 6 "github.com/stretchr/testify/suite" 7) 8 9type PatternSuite struct { 10 suite.Suite 11} 12 13func TestPatternSuite(t *testing.T) { 14 suite.Run(t, new(PatternSuite)) 15} 16 17func (s *PatternSuite) TestMatch_domainLonger_mismatch() { 18 p := ParsePattern("value", []string{"head", "middle", "tail"}) 19 r := p.Match([]string{"head", "middle"}) 20 s.False(r) 21} 22 23func (s *PatternSuite) TestMatch_domainSameLength_mismatch() { 24 p := ParsePattern("value", []string{"head", "middle", "tail"}) 25 r := p.Match([]string{"head", "middle", "tail"}) 26 s.False(r) 27} 28 29func (s *PatternSuite) TestMatch_domainMismatch_mismatch() { 30 p := ParsePattern("value", []string{"head", "middle", "tail"}) 31 r := p.Match([]string{"head", "middle", "_tail_", "value"}) 32 s.False(r) 33} 34 35func (s *PatternSuite) TestSimpleMatch_match() { 36 p := ParsePattern("vul?ano", nil) 37 r := p.Match([]string{"value", "vulkano"}) 38 s.True(r) 39} 40 41func (s *PatternSuite) TestSimpleMatch_withDomain() { 42 p := ParsePattern("middle/tail", []string{"value", "volcano"}) 43 r := p.Match([]string{"value", "volcano", "middle", "tail"}) 44 s.True(r) 45} 46 47func (s *PatternSuite) TestSimpleMatch_onlyMatchInDomain_mismatch() { 48 p := ParsePattern("value/volcano", []string{"value", "volcano"}) 49 r := p.Match([]string{"value", "volcano", "tail"}) 50 s.False(r) 51} 52 53func (s *PatternSuite) TestSimpleMatch_atStart() { 54 p := ParsePattern("value", nil) 55 r := p.Match([]string{"value", "tail"}) 56 s.False(r) 57} 58 59func (s *PatternSuite) TestSimpleMatch_inTheMiddle() { 60 p := ParsePattern("value", nil) 61 r := p.Match([]string{"head", "value", "tail"}) 62 s.False(r) 63} 64 65func (s *PatternSuite) TestSimpleMatch_atEnd() { 66 p := ParsePattern("value", nil) 67 r := p.Match([]string{"head", "value"}) 68 s.True(r) 69} 70 71func (s *PatternSuite) TestSimpleMatch_mismatch() { 72 p := ParsePattern("value", nil) 73 r := p.Match([]string{"head", "val", "tail"}) 74 s.False(r) 75} 76 77func (s *PatternSuite) TestSimpleMatch_valueLonger_mismatch() { 78 p := ParsePattern("tai", nil) 79 r := p.Match([]string{"head", "value", "tail"}) 80 s.False(r) 81} 82 83func (s *PatternSuite) TestSimpleMatch_withAsterisk() { 84 p := ParsePattern("t*l", nil) 85 r := p.Match([]string{"value", "vulkano", "tail"}) 86 s.True(r) 87} 88 89func (s *PatternSuite) TestSimpleMatch_withQuestionMark() { 90 p := ParsePattern("ta?l", nil) 91 r := p.Match([]string{"value", "vulkano", "tail"}) 92 s.True(r) 93} 94 95func (s *PatternSuite) TestSimpleMatch_magicChars() { 96 p := ParsePattern("v[ou]l[kc]ano", nil) 97 r := p.Match([]string{"value", "volcano"}) 98 s.True(r) 99} 100 101func (s *PatternSuite) TestSimpleMatch_wrongPattern_mismatch() { 102 p := ParsePattern("v[ou]l[", nil) 103 r := p.Match([]string{"value", "vol["}) 104 s.False(r) 105} 106 107func (s *PatternSuite) TestGlobMatch_fromRootWithSlash() { 108 p := ParsePattern("/value/vul?ano/tail", nil) 109 r := p.Match([]string{"value", "vulkano", "tail"}) 110 s.True(r) 111} 112 113func (s *PatternSuite) TestGlobMatch_withDomain() { 114 p := ParsePattern("middle/tail", []string{"value", "volcano"}) 115 r := p.Match([]string{"value", "volcano", "middle", "tail"}) 116 s.True(r) 117} 118 119func (s *PatternSuite) TestGlobMatch_onlyMatchInDomain_mismatch() { 120 p := ParsePattern("volcano/tail", []string{"value", "volcano"}) 121 r := p.Match([]string{"value", "volcano", "tail"}) 122 s.False(r) 123} 124 125func (s *PatternSuite) TestGlobMatch_fromRootWithoutSlash() { 126 p := ParsePattern("value/vul?ano/tail", nil) 127 r := p.Match([]string{"value", "vulkano", "tail"}) 128 s.True(r) 129} 130 131func (s *PatternSuite) TestGlobMatch_fromRoot_mismatch() { 132 p := ParsePattern("value/vulkano", nil) 133 r := p.Match([]string{"value", "volcano"}) 134 s.False(r) 135} 136 137func (s *PatternSuite) TestGlobMatch_fromRoot_tooShort_mismatch() { 138 p := ParsePattern("value/vul?ano", nil) 139 r := p.Match([]string{"value"}) 140 s.False(r) 141} 142 143func (s *PatternSuite) TestGlobMatch_fromRoot_notAtRoot_mismatch() { 144 p := ParsePattern("/value/volcano", nil) 145 r := p.Match([]string{"value", "value", "volcano"}) 146 s.False(r) 147} 148 149func (s *PatternSuite) TestGlobMatch_leadingAsterisks_atStart() { 150 p := ParsePattern("**/*lue/vol?ano/ta?l", nil) 151 r := p.Match([]string{"value", "volcano", "tail"}) 152 s.True(r) 153} 154 155func (s *PatternSuite) TestGlobMatch_leadingAsterisks_notAtStart() { 156 p := ParsePattern("**/*lue/vol?ano/tail", nil) 157 r := p.Match([]string{"head", "value", "volcano", "tail"}) 158 s.True(r) 159} 160 161func (s *PatternSuite) TestGlobMatch_leadingAsterisks_mismatch() { 162 p := ParsePattern("**/*lue/vol?ano/tail", nil) 163 r := p.Match([]string{"head", "value", "Volcano", "tail"}) 164 s.False(r) 165} 166 167func (s *PatternSuite) TestGlobMatch_tailingAsterisks() { 168 p := ParsePattern("/*lue/vol?ano/**", nil) 169 r := p.Match([]string{"value", "volcano", "tail", "moretail"}) 170 s.True(r) 171} 172 173func (s *PatternSuite) TestGlobMatch_tailingAsterisks_single() { 174 p := ParsePattern("/*lue/**", nil) 175 r := p.Match([]string{"value", "volcano"}) 176 s.True(r) 177} 178 179func (s *PatternSuite) TestGlobMatch_tailingAsterisk_single() { 180 p := ParsePattern("/*lue/*", nil) 181 r := p.Match([]string{"value", "volcano", "tail"}) 182 s.False(r) 183} 184 185func (s *PatternSuite) TestGlobMatch_tailingAsterisks_exactMatch() { 186 p := ParsePattern("/*lue/vol?ano/**", nil) 187 r := p.Match([]string{"value", "volcano"}) 188 s.False(r) 189} 190 191func (s *PatternSuite) TestGlobMatch_middleAsterisks_emptyMatch() { 192 p := ParsePattern("/*lue/**/vol?ano", nil) 193 r := p.Match([]string{"value", "volcano"}) 194 s.True(r) 195} 196 197func (s *PatternSuite) TestGlobMatch_middleAsterisks_oneMatch() { 198 p := ParsePattern("/*lue/**/vol?ano", nil) 199 r := p.Match([]string{"value", "middle", "volcano"}) 200 s.True(r) 201} 202 203func (s *PatternSuite) TestGlobMatch_middleAsterisks_multiMatch() { 204 p := ParsePattern("/*lue/**/vol?ano", nil) 205 r := p.Match([]string{"value", "middle1", "middle2", "volcano"}) 206 s.True(r) 207} 208 209func (s *PatternSuite) TestGlobMatch_wrongDoubleAsterisk_mismatch() { 210 p := ParsePattern("/*lue/**foo/vol?ano/tail", nil) 211 r := p.Match([]string{"value", "foo", "volcano", "tail"}) 212 s.False(r) 213} 214 215func (s *PatternSuite) TestGlobMatch_magicChars() { 216 p := ParsePattern("**/head/v[ou]l[kc]ano", nil) 217 r := p.Match([]string{"value", "head", "volcano"}) 218 s.True(r) 219} 220 221func (s *PatternSuite) TestGlobMatch_wrongPattern_noTraversal_mismatch() { 222 p := ParsePattern("**/head/v[ou]l[", nil) 223 r := p.Match([]string{"value", "head", "vol["}) 224 s.False(r) 225} 226 227func (s *PatternSuite) TestGlobMatch_wrongPattern_onTraversal_mismatch() { 228 p := ParsePattern("/value/**/v[ou]l[", nil) 229 r := p.Match([]string{"value", "head", "vol["}) 230 s.False(r) 231} 232 233func (s *PatternSuite) TestGlobMatch_issue_923() { 234 p := ParsePattern("**/android/**/GeneratedPluginRegistrant.java", nil) 235 r := p.Match([]string{"packages", "flutter_tools", "lib", "src", "android", "gradle.dart"}) 236 s.False(r) 237}