Skip to content

Commit f1671f0

Browse files
authored
Merge pull request #11 from arduino/gzip
Added GUnzip function
2 parents 3d2c600 + e27cc55 commit f1671f0

File tree

5 files changed

+160
-4
lines changed

5 files changed

+160
-4
lines changed

_testdata/test.txt

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
2+
3+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
4+
5+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
6+
7+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
8+
9+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
10+
11+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
12+
13+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
14+
15+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
16+
17+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
18+
19+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
20+

_testdata/test.txt.gz

411 Bytes
Binary file not shown.

gzip.go

+70
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
/*
2+
* This file is part of PathsHelper library.
3+
*
4+
* Copyright 2021 Arduino AG (http://www.arduino.cc/)
5+
*
6+
* PathsHelper library is free software; you can redistribute it and/or modify
7+
* it under the terms of the GNU General Public License as published by
8+
* the Free Software Foundation; either version 2 of the License, or
9+
* (at your option) any later version.
10+
*
11+
* This program is distributed in the hope that it will be useful,
12+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+
* GNU General Public License for more details.
15+
*
16+
* You should have received a copy of the GNU General Public License
17+
* along with this program; if not, write to the Free Software
18+
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19+
*
20+
* As a special exception, you may use this file as part of a free software
21+
* library without restriction. Specifically, if other files instantiate
22+
* templates or use macros or inline functions from this file, or you compile
23+
* this file and link it with other files to produce an executable, this
24+
* file does not by itself cause the resulting executable to be covered by
25+
* the GNU General Public License. This exception does not however
26+
* invalidate any other reasons why the executable file might be covered by
27+
* the GNU General Public License.
28+
*/
29+
30+
package paths
31+
32+
import (
33+
"compress/gzip"
34+
"io"
35+
36+
"github.com/pkg/errors"
37+
)
38+
39+
// GZip compress src with gzip and writes the compressed file on dst
40+
//func GZip(src, dst *Path) error {
41+
// return errors.New("gzip unimplemented")
42+
//}
43+
44+
// GUnzip decompress src with gzip and writes the uncompressed file on dst
45+
func GUnzip(src, dest *Path) error {
46+
gzIn, err := src.Open()
47+
if err != nil {
48+
return errors.Wrap(err, "opening "+src.String())
49+
}
50+
defer gzIn.Close()
51+
52+
in, err := gzip.NewReader(gzIn)
53+
if err != nil {
54+
return errors.Wrap(err, "decoding "+src.String())
55+
}
56+
defer in.Close()
57+
58+
out, err := dest.Create()
59+
if err != nil {
60+
return errors.Wrap(err, "creating "+dest.String())
61+
}
62+
defer out.Close()
63+
64+
_, err = io.Copy(out, in)
65+
if err != nil {
66+
return errors.Wrap(err, "uncompressing "+dest.String())
67+
}
68+
69+
return nil
70+
}

gzip_test.go

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/*
2+
* This file is part of PathsHelper library.
3+
*
4+
* Copyright 2021 Arduino AG (http://www.arduino.cc/)
5+
*
6+
* PathsHelper library is free software; you can redistribute it and/or modify
7+
* it under the terms of the GNU General Public License as published by
8+
* the Free Software Foundation; either version 2 of the License, or
9+
* (at your option) any later version.
10+
*
11+
* This program is distributed in the hope that it will be useful,
12+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+
* GNU General Public License for more details.
15+
*
16+
* You should have received a copy of the GNU General Public License
17+
* along with this program; if not, write to the Free Software
18+
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19+
*
20+
* As a special exception, you may use this file as part of a free software
21+
* library without restriction. Specifically, if other files instantiate
22+
* templates or use macros or inline functions from this file, or you compile
23+
* this file and link it with other files to produce an executable, this
24+
* file does not by itself cause the resulting executable to be covered by
25+
* the GNU General Public License. This exception does not however
26+
* invalidate any other reasons why the executable file might be covered by
27+
* the GNU General Public License.
28+
*/
29+
30+
package paths
31+
32+
import (
33+
"testing"
34+
35+
"github.com/stretchr/testify/require"
36+
)
37+
38+
func TestGzipGunzip(t *testing.T) {
39+
zipped := New("_testdata", "test.txt.gz")
40+
unzipped := New("_testdata", "test.txt")
41+
42+
tmp, err := MkTempDir("", "")
43+
require.NoError(t, err)
44+
defer tmp.RemoveAll()
45+
46+
// Test decoding
47+
decoded := tmp.Join("test")
48+
err = GUnzip(zipped, decoded)
49+
require.NoError(t, err)
50+
d, err := decoded.ReadFile()
51+
require.NoError(t, err)
52+
u, err := unzipped.ReadFile()
53+
require.NoError(t, err)
54+
require.Equal(t, u, d)
55+
56+
// Test encoding
57+
// TODO
58+
}

paths_test.go

+12-4
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ func TestReadDirRecursive(t *testing.T) {
259259

260260
list, err := testPath.ReadDirRecursive()
261261
require.NoError(t, err)
262-
require.Len(t, list, 14)
262+
require.Len(t, list, 16)
263263

264264
pathEqualsTo(t, "_testdata/anotherFile", list[0])
265265
pathEqualsTo(t, "_testdata/file", list[1])
@@ -275,19 +275,23 @@ func TestReadDirRecursive(t *testing.T) {
275275
pathEqualsTo(t, "_testdata/symlinktofolder/file3", list[11])
276276
pathEqualsTo(t, "_testdata/symlinktofolder/subfolder", list[12])
277277
pathEqualsTo(t, "_testdata/symlinktofolder/subfolder/file4", list[13])
278+
pathEqualsTo(t, "_testdata/test.txt", list[14])
279+
pathEqualsTo(t, "_testdata/test.txt.gz", list[15])
278280
}
279281

280282
func TestFilterDirs(t *testing.T) {
281283
testPath := New("_testdata")
282284

283285
list, err := testPath.ReadDir()
284286
require.NoError(t, err)
285-
require.Len(t, list, 4)
287+
require.Len(t, list, 6)
286288

287289
pathEqualsTo(t, "_testdata/anotherFile", list[0])
288290
pathEqualsTo(t, "_testdata/file", list[1])
289291
pathEqualsTo(t, "_testdata/folder", list[2])
290292
pathEqualsTo(t, "_testdata/symlinktofolder", list[3])
293+
pathEqualsTo(t, "_testdata/test.txt", list[4])
294+
pathEqualsTo(t, "_testdata/test.txt.gz", list[5])
291295

292296
list.FilterDirs()
293297
require.Len(t, list, 2)
@@ -300,17 +304,21 @@ func TestFilterOutDirs(t *testing.T) {
300304

301305
list, err := testPath.ReadDir()
302306
require.NoError(t, err)
303-
require.Len(t, list, 4)
307+
require.Len(t, list, 6)
304308

305309
pathEqualsTo(t, "_testdata/anotherFile", list[0])
306310
pathEqualsTo(t, "_testdata/file", list[1])
307311
pathEqualsTo(t, "_testdata/folder", list[2])
308312
pathEqualsTo(t, "_testdata/symlinktofolder", list[3])
313+
pathEqualsTo(t, "_testdata/test.txt", list[4])
314+
pathEqualsTo(t, "_testdata/test.txt.gz", list[5])
309315

310316
list.FilterOutDirs()
311-
require.Len(t, list, 2)
317+
require.Len(t, list, 4)
312318
pathEqualsTo(t, "_testdata/anotherFile", list[0])
313319
pathEqualsTo(t, "_testdata/file", list[1])
320+
pathEqualsTo(t, "_testdata/test.txt", list[2])
321+
pathEqualsTo(t, "_testdata/test.txt.gz", list[3])
314322
}
315323

316324
func TestEquivalentPaths(t *testing.T) {

0 commit comments

Comments
 (0)