File: archivex_test.go

package info (click to toggle)
golang-github-jhoonb-archivex 0.0%2B20170409-1
  • links: PTS
  • area: main
  • in suites: buster
  • size: 84 kB
  • sloc: makefile: 6
file content (101 lines) | stat: -rw-r--r-- 3,201 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
//////////////////////////////////////////
// archivex_test.go
// Jhonathan Paulo Banczek - 2014
// jpbanczek@gmail.com - jhoonb.com
//////////////////////////////////////////

package archivex

import (
	"fmt"
	"os"
	"path"
	"reflect"
	"testing"
)

type archTest struct {
	addPath     string
	include     bool
	name        string
	filePath    string
	addString   string
	addFileName string
}

type archTypeTest struct {
	tests []archTest
	arch  Archivex
}

func Test_archivex(t *testing.T) {
	dir, _ := os.Getwd()

	// let's clean up the previous results, to be sure that we're not reading from an old result.
	if err := os.RemoveAll(path.Join(dir, "/testresults")); err != nil && !os.IsNotExist(err) {
		t.Fatalf("cannot clean up test results directory: %v", err)
	}

	if err := os.Mkdir(path.Join(dir, "/testresults"), 0777); err != nil && !os.IsExist(err) {
		t.Fatalf("cannot make test results directory: %v", err)
	}

	// All the different tests we want to run with different combinations of input paths and the includeCurrentFolder flag
	tests := []archTest{
		// absolute path
		archTest{dir + "/testfolder/", true, "absTrailInclude", dir + "/LICENSE", "string", "filename"},
		archTest{dir + "/testfolder/", false, "absTrailExclude", dir + "/LICENSE", "string", "filename"},

		// relative path
		archTest{"testfolder/", true, "relTrailInclude", "LICENSE", "string", "filename"},
		archTest{"testfolder/", false, "relTrailExclude", "LICENSE", "string", "filename"},

		// without trailing slashes
		archTest{dir + "/testfolder", true, "absInclude", dir + "/LICENSE", "string", "filename"},
		archTest{dir + "/testfolder", false, "absExclude", dir + "/LICENSE", "string", "filename"},
		archTest{"testfolder", true, "relInclude", "LICENSE", "string", "filename"},
		archTest{"testfolder", false, "relExclude", "LICENSE", "string", "filename"},
	}

	// We want to execute the batch of tests on both Zip and Tar
	typeTests := []archTypeTest{
		archTypeTest{tests, &ZipFile{}},
		archTypeTest{tests, &TarFile{}},
	}

	// Run all tests
	for _, typeTest := range typeTests {
		currentType := reflect.TypeOf(typeTest.arch)
		t.Logf("Running tests for archive type: %s", currentType.Elem())

		for i, test := range typeTest.tests {
			t.Logf("Running %s...", test.name)

			// Create the archive
			filename := fmt.Sprintf("%d_%s_test", i+1, test.name)
			arch := reflect.ValueOf(typeTest.arch).Interface().(Archivex)
			if err := arch.Create(path.Join("testresults", filename)); err != nil {
				t.Fatalf("Error creating '%s': %v", filename, err)
			}

			// Add the files to the archive
			if err := arch.AddAll(test.addPath, test.include); err != nil {
				t.Fatalf("Error doing AddAll with '%s' and includeCurrentFolder = %v: %v", test.addPath, test.include, err)
			}

			// Add a file to the archive
			if err := arch.AddFile(test.filePath); err != nil {
				t.Fatalf("Error doing AddFile with '%s': %v", test.filePath, err)
			}
			//}

			// Add a file to the archive
			if err := arch.Add(test.addFileName, []byte(test.addString)); err != nil {
				t.Fatalf("Error doing Add with '%s', '%s': %v", test.addString, test.addFileName, err)
			}

			// Close the archive
			arch.Close()
		}
	}
}