git.sdf.org/kashifshah/zs@v0.0.0-20230523104322-2f8ff5be8c8a/build_test.go (about) 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 }