github.com/matthewmueller/go-archive@v1.0.3-0.20180913190615-0f8ce9f192c4/archive_filter_test.go (about)

     1  package archive_test
     2  
     3  import (
     4  	"bytes"
     5  	"os"
     6  	"strings"
     7  	"testing"
     8  
     9  	"github.com/apex/log"
    10  	"github.com/matthewmueller/go-archive"
    11  	"github.com/tj/assert"
    12  )
    13  
    14  func init() {
    15  	log.SetLevel(log.DebugLevel)
    16  }
    17  
    18  func TestFilterDotfiles(t *testing.T) {
    19  	os.Chdir("testdata/node")
    20  	defer os.Chdir("../..")
    21  
    22  	var buf bytes.Buffer
    23  	a := archive.NewZip(&buf).WithFilter(archive.FilterDotfiles)
    24  	assert.NoError(t, a.Open(), "open")
    25  	assert.NoError(t, a.AddDir("."), "add dir")
    26  	assert.NoError(t, a.Close(), "close")
    27  
    28  	dir := unzip(t, &buf)
    29  	s, err := tree(dir)
    30  	assert.NoError(t, err, "tree")
    31  
    32  	expected := `Readme.md mode=-rw-r--r-- size=0
    33  app.js mode=-rw-r--r-- size=0
    34  package.json mode=-rw-r--r-- size=0
    35  src mode=drwxr-xr-x
    36  src/something mode=drwxr-xr-x
    37  src/something/index.js mode=-rw-r--r-- size=0
    38  up.json mode=-rw-r--r-- size=0
    39  `
    40  
    41  	assert.Equal(t, expected, s)
    42  }
    43  
    44  func TestFilterPatterns_dir(t *testing.T) {
    45  	os.Chdir("testdata/node")
    46  	defer os.Chdir("../..")
    47  
    48  	patterns := strings.NewReader(`
    49  *.md
    50  .something
    51  src
    52  `)
    53  
    54  	f, err := archive.FilterPatterns(patterns)
    55  	assert.NoError(t, err, "filter")
    56  
    57  	var buf bytes.Buffer
    58  	a := archive.NewZip(&buf).WithFilter(f)
    59  	assert.NoError(t, a.Open(), "open")
    60  	assert.NoError(t, a.AddDir("."), "add dir")
    61  	assert.NoError(t, a.Close(), "close")
    62  
    63  	dir := unzip(t, &buf)
    64  	s, err := tree(dir)
    65  	assert.NoError(t, err, "tree")
    66  
    67  	expected := `app.js mode=-rw-r--r-- size=0
    68  package.json mode=-rw-r--r-- size=0
    69  up.json mode=-rw-r--r-- size=0
    70  `
    71  
    72  	assert.Equal(t, expected, s)
    73  }
    74  
    75  func TestFilterPatterns_negated(t *testing.T) {
    76  	os.Chdir("testdata/node")
    77  	defer os.Chdir("../..")
    78  
    79  	patterns := strings.NewReader(`
    80  *
    81  !.something/**
    82  !src/**
    83  !up.json
    84  `)
    85  
    86  	f, err := archive.FilterPatterns(patterns)
    87  	assert.NoError(t, err, "filter")
    88  
    89  	var buf bytes.Buffer
    90  	a := archive.NewZip(&buf).WithFilter(f)
    91  	assert.NoError(t, a.Open(), "open")
    92  	assert.NoError(t, a.AddDir("."), "add dir")
    93  	assert.NoError(t, a.Close(), "close")
    94  
    95  	dir := unzip(t, &buf)
    96  	s, err := tree(dir)
    97  	assert.NoError(t, err, "tree")
    98  
    99  	expected := `.something mode=drwxr-xr-x
   100  .something/bar mode=drwxr-xr-x
   101  .something/bar/baz mode=drwxr-xr-x
   102  .something/bar/baz/something mode=-rw-r--r-- size=0
   103  .something/foo mode=-rw-r--r-- size=0
   104  src mode=drwxr-xr-x
   105  src/something mode=drwxr-xr-x
   106  src/something/index.js mode=-rw-r--r-- size=0
   107  up.json mode=-rw-r--r-- size=0
   108  `
   109  
   110  	assert.Equal(t, expected, s)
   111  }
   112  
   113  func TestFilterPatterns_nested(t *testing.T) {
   114  	os.Chdir("testdata/node")
   115  	defer os.Chdir("../..")
   116  
   117  	patterns := strings.NewReader(`
   118  *.md
   119  *.json
   120  !up.json
   121  .something/bar/**
   122  src/**
   123  `)
   124  
   125  	f, err := archive.FilterPatterns(patterns)
   126  	assert.NoError(t, err, "filter")
   127  
   128  	var buf bytes.Buffer
   129  	a := archive.NewZip(&buf).WithFilter(f)
   130  	assert.NoError(t, a.Open(), "open")
   131  	assert.NoError(t, a.AddDir("."), "add dir")
   132  	assert.NoError(t, a.Close(), "close")
   133  
   134  	dir := unzip(t, &buf)
   135  	s, err := tree(dir)
   136  	assert.NoError(t, err, "tree")
   137  
   138  	expected := `.something mode=drwxr-xr-x
   139  .something/foo mode=-rw-r--r-- size=0
   140  app.js mode=-rw-r--r-- size=0
   141  up.json mode=-rw-r--r-- size=0
   142  `
   143  
   144  	assert.Equal(t, expected, s)
   145  }
   146  
   147  func TestFilterPatterns_allNegated(t *testing.T) {
   148  	os.Chdir("testdata/node")
   149  	defer os.Chdir("../..")
   150  
   151  	patterns := strings.NewReader(`
   152  *
   153  !up.json
   154  !.something/**
   155  `)
   156  
   157  	f, err := archive.FilterPatterns(patterns)
   158  	assert.NoError(t, err, "filter")
   159  
   160  	var buf bytes.Buffer
   161  	a := archive.NewZip(&buf).WithFilter(f)
   162  	assert.NoError(t, a.Open(), "open")
   163  	assert.NoError(t, a.AddDir("."), "add dir")
   164  	assert.NoError(t, a.Close(), "close")
   165  
   166  	dir := unzip(t, &buf)
   167  	s, err := tree(dir)
   168  	assert.NoError(t, err, "tree")
   169  
   170  	expected := `.something mode=drwxr-xr-x
   171  .something/bar mode=drwxr-xr-x
   172  .something/bar/baz mode=drwxr-xr-x
   173  .something/bar/baz/something mode=-rw-r--r-- size=0
   174  .something/foo mode=-rw-r--r-- size=0
   175  up.json mode=-rw-r--r-- size=0
   176  `
   177  
   178  	assert.Equal(t, expected, s)
   179  }
   180  
   181  func TestFilterPatterns_precedence(t *testing.T) {
   182  	os.Chdir("testdata/node")
   183  	defer os.Chdir("../..")
   184  
   185  	patterns := strings.NewReader(`
   186  *
   187  !src/**
   188  src
   189  !up.json
   190  `)
   191  
   192  	f, err := archive.FilterPatterns(patterns)
   193  	assert.NoError(t, err, "filter")
   194  
   195  	var buf bytes.Buffer
   196  	a := archive.NewZip(&buf).WithFilter(f)
   197  	assert.NoError(t, a.Open(), "open")
   198  	assert.NoError(t, a.AddDir("."), "add dir")
   199  	assert.NoError(t, a.Close(), "close")
   200  
   201  	dir := unzip(t, &buf)
   202  	s, err := tree(dir)
   203  	assert.NoError(t, err, "tree")
   204  
   205  	expected := `up.json mode=-rw-r--r-- size=0
   206  `
   207  
   208  	assert.Equal(t, expected, s)
   209  }