github.com/x-oss-byte/git-lfs@v2.5.2+incompatible/git/gitattr/attr_test.go (about) 1 package gitattr 2 3 import ( 4 "fmt" 5 "strings" 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9 ) 10 11 func TestParseLines(t *testing.T) { 12 lines, err := ParseLines(strings.NewReader("*.dat filter=lfs")) 13 14 assert.NoError(t, err) 15 assert.Len(t, lines, 1) 16 17 assert.Equal(t, lines[0].Pattern.String(), "*.dat") 18 assert.Equal(t, lines[0].Attrs[0], &Attr{ 19 K: "filter", V: "lfs", 20 }) 21 } 22 23 func TestParseLinesManyAttrs(t *testing.T) { 24 lines, err := ParseLines(strings.NewReader( 25 "*.dat filter=lfs diff=lfs merge=lfs -text")) 26 27 assert.NoError(t, err) 28 29 assert.Len(t, lines, 1) 30 assert.Equal(t, lines[0].Pattern.String(), "*.dat") 31 32 assert.Len(t, lines[0].Attrs, 4) 33 assert.Equal(t, lines[0].Attrs[0], &Attr{K: "filter", V: "lfs"}) 34 assert.Equal(t, lines[0].Attrs[1], &Attr{K: "diff", V: "lfs"}) 35 assert.Equal(t, lines[0].Attrs[2], &Attr{K: "merge", V: "lfs"}) 36 assert.Equal(t, lines[0].Attrs[3], &Attr{K: "text", V: "false"}) 37 } 38 39 func TestParseLinesManyLines(t *testing.T) { 40 lines, err := ParseLines(strings.NewReader(strings.Join([]string{ 41 "*.dat filter=lfs diff=lfs merge=lfs -text", 42 "*.jpg filter=lfs diff=lfs merge=lfs -text", 43 "# *.pdf filter=lfs diff=lfs merge=lfs -text", 44 "*.png filter=lfs diff=lfs merge=lfs -text"}, "\n"))) 45 46 assert.NoError(t, err) 47 48 assert.Len(t, lines, 3) 49 assert.Equal(t, lines[0].Pattern.String(), "*.dat") 50 assert.Equal(t, lines[1].Pattern.String(), "*.jpg") 51 assert.Equal(t, lines[2].Pattern.String(), "*.png") 52 53 assert.Len(t, lines[0].Attrs, 4) 54 assert.Equal(t, lines[0].Attrs[0], &Attr{K: "filter", V: "lfs"}) 55 assert.Equal(t, lines[0].Attrs[1], &Attr{K: "diff", V: "lfs"}) 56 assert.Equal(t, lines[0].Attrs[2], &Attr{K: "merge", V: "lfs"}) 57 assert.Equal(t, lines[0].Attrs[3], &Attr{K: "text", V: "false"}) 58 59 assert.Len(t, lines[1].Attrs, 4) 60 assert.Equal(t, lines[1].Attrs[0], &Attr{K: "filter", V: "lfs"}) 61 assert.Equal(t, lines[1].Attrs[1], &Attr{K: "diff", V: "lfs"}) 62 assert.Equal(t, lines[1].Attrs[2], &Attr{K: "merge", V: "lfs"}) 63 assert.Equal(t, lines[1].Attrs[3], &Attr{K: "text", V: "false"}) 64 65 assert.Len(t, lines[1].Attrs, 4) 66 assert.Equal(t, lines[1].Attrs[0], &Attr{K: "filter", V: "lfs"}) 67 assert.Equal(t, lines[1].Attrs[1], &Attr{K: "diff", V: "lfs"}) 68 assert.Equal(t, lines[1].Attrs[2], &Attr{K: "merge", V: "lfs"}) 69 assert.Equal(t, lines[1].Attrs[3], &Attr{K: "text", V: "false"}) 70 } 71 72 func TestParseLinesUnset(t *testing.T) { 73 lines, err := ParseLines(strings.NewReader("*.dat -filter")) 74 75 assert.NoError(t, err) 76 assert.Len(t, lines, 1) 77 78 assert.Equal(t, lines[0].Pattern.String(), "*.dat") 79 assert.Equal(t, lines[0].Attrs[0], &Attr{ 80 K: "filter", V: "false", 81 }) 82 } 83 84 func TestParseLinesUnspecified(t *testing.T) { 85 lines, err := ParseLines(strings.NewReader("*.dat !filter")) 86 87 assert.NoError(t, err) 88 assert.Len(t, lines, 1) 89 90 assert.Equal(t, lines[0].Pattern.String(), "*.dat") 91 assert.Equal(t, lines[0].Attrs[0], &Attr{ 92 K: "filter", Unspecified: true, 93 }) 94 } 95 96 func TestParseLinesQuotedPattern(t *testing.T) { 97 lines, err := ParseLines(strings.NewReader( 98 "\"space *.dat\" filter=lfs")) 99 100 assert.NoError(t, err) 101 assert.Len(t, lines, 1) 102 103 assert.Equal(t, lines[0].Pattern.String(), "space *.dat") 104 assert.Equal(t, lines[0].Attrs[0], &Attr{ 105 K: "filter", V: "lfs", 106 }) 107 } 108 109 func TestParseLinesCommented(t *testing.T) { 110 lines, err := ParseLines(strings.NewReader( 111 "# \"space *.dat\" filter=lfs")) 112 113 assert.NoError(t, err) 114 assert.Len(t, lines, 0) 115 } 116 117 func TestParseLinesUnbalancedQuotes(t *testing.T) { 118 const text = "\"space *.dat filter=lfs" 119 lines, err := ParseLines(strings.NewReader(text)) 120 121 assert.Empty(t, lines) 122 assert.EqualError(t, err, fmt.Sprintf( 123 "git/gitattr: unbalanced quote: %s", text)) 124 } 125 126 func TestParseLinesWithNoAttributes(t *testing.T) { 127 lines, err := ParseLines(strings.NewReader("*.dat")) 128 129 assert.Len(t, lines, 1) 130 assert.NoError(t, err) 131 132 assert.Equal(t, lines[0].Pattern.String(), "*.dat") 133 assert.Empty(t, lines[0].Attrs) 134 }