Mercurial > yakumo_izuru > aya
diff build_test.go @ 47:0adadd497d23 draft
Forked project
author | prologic |
---|---|
date | Fri, 17 Sep 2021 23:32:14 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/build_test.go Fri Sep 17 23:32:14 2021 +0000 @@ -0,0 +1,72 @@ +package main + +import ( + "crypto/md5" + "encoding/hex" + "io" + "io/ioutil" + "os" + "path/filepath" + "strings" + "testing" +) + +const TESTDIR = ".test" + +func TestBuild(t *testing.T) { + files, _ := ioutil.ReadDir("testdata") + for _, f := range files { + if f.IsDir() { + testBuild(filepath.Join("testdata", f.Name()), t) + } + } +} + +func testBuild(path string, t *testing.T) { + wd, _ := os.Getwd() + os.Chdir(path) + args := os.Args[:] + os.Args = []string{"zs", "build"} + t.Log("--- BUILD", path) + main() + + compare(PUBDIR, TESTDIR, t) + + os.Chdir(wd) + os.Args = args +} + +func compare(pub, test string, t *testing.T) { + a := md5dir(pub) + b := md5dir(test) + for k, v := range a { + if s, ok := b[k]; !ok { + t.Error("Unexpected file:", k, v) + } else if s != v { + t.Error("Different file:", k, v, s) + } else { + t.Log("Matching file", k, v) + } + } + for k, v := range b { + if _, ok := a[k]; !ok { + t.Error("Missing file:", k, v) + } + } +} + +func md5dir(path string) map[string]string { + files := map[string]string{} + filepath.Walk(path, func(s string, info os.FileInfo, err error) error { + if err == nil && !info.IsDir() { + if f, err := os.Open(s); err == nil { + defer f.Close() + hash := md5.New() + io.Copy(hash, f) + files[strings.TrimPrefix(s, path)] = hex.EncodeToString(hash.Sum(nil)) + } + } + return nil + }) + return files +}