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 }