[48] | 1 | package main
|
---|
| 2 |
|
---|
| 3 | import (
|
---|
| 4 | "crypto/md5"
|
---|
| 5 | "encoding/hex"
|
---|
| 6 | "io"
|
---|
| 7 | "io/ioutil"
|
---|
| 8 | "os"
|
---|
| 9 | "path/filepath"
|
---|
| 10 | "strings"
|
---|
| 11 | "testing"
|
---|
| 12 | )
|
---|
| 13 |
|
---|
| 14 | const TESTDIR = ".test"
|
---|
| 15 |
|
---|
| 16 | func TestBuild(t *testing.T) {
|
---|
| 17 | files, _ := ioutil.ReadDir("testdata")
|
---|
| 18 | for _, f := range files {
|
---|
| 19 | if f.IsDir() {
|
---|
| 20 | testBuild(filepath.Join("testdata", f.Name()), t)
|
---|
| 21 | }
|
---|
| 22 | }
|
---|
| 23 | }
|
---|
| 24 |
|
---|
| 25 | func testBuild(path string, t *testing.T) {
|
---|
| 26 | wd, _ := os.Getwd()
|
---|
| 27 | os.Chdir(path)
|
---|
| 28 | args := os.Args[:]
|
---|
| 29 | os.Args = []string{"zs", "build"}
|
---|
| 30 | t.Log("--- BUILD", path)
|
---|
| 31 | main()
|
---|
| 32 |
|
---|
| 33 | compare(PUBDIR, TESTDIR, t)
|
---|
| 34 |
|
---|
| 35 | os.Chdir(wd)
|
---|
| 36 | os.Args = args
|
---|
| 37 | }
|
---|
| 38 |
|
---|
| 39 | func compare(pub, test string, t *testing.T) {
|
---|
| 40 | a := md5dir(pub)
|
---|
| 41 | b := md5dir(test)
|
---|
| 42 | for k, v := range a {
|
---|
| 43 | if s, ok := b[k]; !ok {
|
---|
| 44 | t.Error("Unexpected file:", k, v)
|
---|
| 45 | } else if s != v {
|
---|
| 46 | t.Error("Different file:", k, v, s)
|
---|
| 47 | } else {
|
---|
| 48 | t.Log("Matching file", k, v)
|
---|
| 49 | }
|
---|
| 50 | }
|
---|
| 51 | for k, v := range b {
|
---|
| 52 | if _, ok := a[k]; !ok {
|
---|
| 53 | t.Error("Missing file:", k, v)
|
---|
| 54 | }
|
---|
| 55 | }
|
---|
| 56 | }
|
---|
| 57 |
|
---|
| 58 | func md5dir(path string) map[string]string {
|
---|
| 59 | files := map[string]string{}
|
---|
| 60 | filepath.Walk(path, func(s string, info os.FileInfo, err error) error {
|
---|
| 61 | if err == nil && !info.IsDir() {
|
---|
| 62 | if f, err := os.Open(s); err == nil {
|
---|
| 63 | defer f.Close()
|
---|
| 64 | hash := md5.New()
|
---|
| 65 | io.Copy(hash, f)
|
---|
| 66 | files[strings.TrimPrefix(s, path)] = hex.EncodeToString(hash.Sum(nil))
|
---|
| 67 | }
|
---|
| 68 | }
|
---|
| 69 | return nil
|
---|
| 70 | })
|
---|
| 71 | return files
|
---|
| 72 | }
|
---|