Mercurial > yakumo_izuru > aya
annotate zs_test.go @ 22:f5627d4212a3 draft
restored the original amber since my issue has been fixed
author | zaitsev.serge |
---|---|
date | Sat, 29 Aug 2015 21:58:48 +0000 |
parents | 802b96e67bae |
children | 40f55059fbfa |
rev | line source |
---|---|
0 | 1 package main |
2 | |
4
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
3 import ( |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
4 "bytes" |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
5 "fmt" |
17 | 6 "io/ioutil" |
4
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
7 "log" |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
8 "os" |
5 | 9 "os/exec" |
4
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
10 "strings" |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
11 "testing" |
18 | 12 "text/template" |
4
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
13 ) |
0 | 14 |
15 func TestSplit2(t *testing.T) { | |
16 if a, b := split2("a:b", ":"); a != "a" || b != "b" { | |
17 t.Fail() | |
18 } | |
19 if a, b := split2(":b", ":"); a != "" || b != "b" { | |
20 t.Fail() | |
21 } | |
22 if a, b := split2("a:", ":"); a != "a" || b != "" { | |
23 t.Fail() | |
24 } | |
25 if a, b := split2(":", ":"); a != "" || b != "" { | |
26 t.Fail() | |
27 } | |
28 if a, b := split2("a", ":"); a != "a" || b != "" { | |
29 t.Fail() | |
30 } | |
31 if a, b := split2("", ":"); a != "" || b != "" { | |
32 t.Fail() | |
33 } | |
34 } | |
35 | |
17 | 36 func tmpfile(path, s string) string { |
37 ioutil.WriteFile(path, []byte(s), 0644) | |
38 return path | |
39 } | |
40 | |
0 | 41 func TestMD(t *testing.T) { |
17 | 42 defer os.Remove("foo.md") |
43 v, body, _ := md(tmpfile("foo.md", ` | |
0 | 44 title: Hello, world! |
45 keywords: foo, bar, baz | |
46 empty: | |
47 bayan: [:|||:] | |
48 | |
19
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
49 this: is a content`), Vars{}) |
0 | 50 if v["title"] != "Hello, world!" { |
51 t.Error() | |
52 } | |
53 if v["keywords"] != "foo, bar, baz" { | |
54 t.Error() | |
55 } | |
56 if s, ok := v["empty"]; !ok || len(s) != 0 { | |
57 t.Error() | |
58 } | |
59 if v["bayan"] != "[:|||:]" { | |
60 t.Error() | |
61 } | |
62 if body != "this: is a content" { | |
63 t.Error(body) | |
64 } | |
2 | 65 |
66 // Test empty md | |
19
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
67 v, body, _ = md(tmpfile("foo.md", ""), Vars{}) |
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
68 if v["url"] != "foo.html" || len(body) != 0 { |
2 | 69 t.Error(v, body) |
70 } | |
71 | |
72 // Test empty header | |
19
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
73 v, body, _ = md(tmpfile("foo.md", "Hello"), Vars{}) |
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
74 if v["url"] != "foo.html" || body != "Hello" { |
2 | 75 t.Error(v, body) |
76 } | |
0 | 77 } |
78 | |
79 func TestRender(t *testing.T) { | |
18 | 80 vars := map[string]string{"foo": "bar"} |
81 funcs := template.FuncMap{ | |
82 "greet": func(s ...string) string { | |
83 if len(s) == 0 { | |
84 return "hello" | |
85 } else { | |
86 return "hello " + strings.Join(s, " ") | |
87 } | |
88 }, | |
0 | 89 } |
90 | |
18 | 91 if s, err := render("plain text", funcs, vars); err != nil || s != "plain text" { |
92 t.Error(s, err) | |
0 | 93 } |
18 | 94 if s, err := render("a {{greet}} text", funcs, vars); err != nil || s != "a hello text" { |
95 t.Error(s, err) | |
0 | 96 } |
18 | 97 if s, err := render("{{greet}} x{{foo}}z", funcs, vars); err != nil || s != "hello xbarz" { |
98 t.Error(s, err) | |
0 | 99 } |
4
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
100 // Test error case |
18 | 101 if s, err := render("a {{greet text ", funcs, vars); err == nil || len(s) != 0 { |
102 t.Error(s, err) | |
4
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
103 } |
0 | 104 } |
4
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
105 |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
106 func TestEnv(t *testing.T) { |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
107 e := env(map[string]string{"foo": "bar", "baz": "hello world"}) |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
108 mustHave := []string{"ZS=" + os.Args[0], "ZS_FOO=bar", "ZS_BAZ=hello world", "PATH="} |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
109 for _, s := range mustHave { |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
110 found := false |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
111 for _, v := range e { |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
112 if strings.HasPrefix(v, s) { |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
113 found = true |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
114 break |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
115 } |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
116 } |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
117 if !found { |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
118 t.Error("Missing", s) |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
119 } |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
120 } |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
121 } |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
122 |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
123 func TestRun(t *testing.T) { |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
124 out := bytes.NewBuffer(nil) |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
125 err := run("some_unbelievable_command_name", []string{}, map[string]string{}, out) |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
126 if err == nil { |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
127 t.Error() |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
128 } |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
129 |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
130 out = bytes.NewBuffer(nil) |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
131 err = run(os.Args[0], []string{"-test.run=TestHelperProcess"}, |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
132 map[string]string{"helper": "1", "out": "foo", "err": "bar"}, out) |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
133 if err != nil { |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
134 t.Error(err) |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
135 } |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
136 if out.String() != "foo\n" { |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
137 t.Error(out.String()) |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
138 } |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
139 } |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
140 |
5 | 141 func TestEvalCommand(t *testing.T) { |
142 s, err := eval([]string{"echo", "hello"}, map[string]string{}) | |
143 if err != nil { | |
144 t.Error(err) | |
145 } | |
146 if s != "hello\n" { | |
147 t.Error(s) | |
148 } | |
149 _, err = eval([]string{"cat", "bogus/file"}, map[string]string{}) | |
150 if _, ok := err.(*exec.ExitError); !ok { | |
151 t.Error("expected ExitError") | |
152 } | |
153 _, err = eval([]string{"missing command"}, map[string]string{}) | |
154 if err != nil { | |
155 t.Error("missing command should be ignored") | |
156 } | |
157 } | |
158 | |
4
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
159 func TestHelperProcess(*testing.T) { |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
160 if os.Getenv("ZS_HELPER") != "1" { |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
161 return |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
162 } |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
163 defer os.Exit(0) // TODO check exit code |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
164 log.Println(os.Getenv("ZS_ERR")) // stderr |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
165 fmt.Println(os.Getenv("ZS_OUT")) // stdout |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
166 } |