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  }