# HG changeset patch # User zaitsev.serge # Date 1440854895 0 # Node ID be58ace6edae6e90763f45d43c30a8952472919a # Parent a9c42bd52f64de9b0607c7e62f7a1092ab90dd3a added integration test for build procedure diff -r a9c42bd52f64 -r be58ace6edae .gitignore --- a/.gitignore Sat Aug 29 13:17:13 2015 +0000 +++ b/.gitignore Sat Aug 29 13:28:15 2015 +0000 @@ -1,1 +1,2 @@ zs +.pub diff -r a9c42bd52f64 -r be58ace6edae testdata/empty/.empty diff -r a9c42bd52f64 -r be58ace6edae testdata/page/.test/index.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/testdata/page/.test/index.html Sat Aug 29 13:28:15 2015 +0000 @@ -0,0 +1,6 @@ + + +

Hello +

+ + diff -r a9c42bd52f64 -r be58ace6edae testdata/page/index.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/testdata/page/index.html Sat Aug 29 13:28:15 2015 +0000 @@ -0,0 +1,5 @@ + + +

{{ echo Hello }}

+ + diff -r a9c42bd52f64 -r be58ace6edae zs_build_test.go --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/zs_build_test.go Sat Aug 29 13:28:15 2015 +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 +}