Mercurial > yakumo_izuru > aya
annotate zs_test.go @ 17:0214b1b5f5eb draft
added amber and gcss compilers
author | zaitsev.serge |
---|---|
date | Sat, 29 Aug 2015 15:47:16 +0000 |
parents | cb66f5b86616 |
children | ae3116ea938b |
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" |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
12 ) |
0 | 13 |
14 func TestSplit2(t *testing.T) { | |
15 if a, b := split2("a:b", ":"); a != "a" || b != "b" { | |
16 t.Fail() | |
17 } | |
18 if a, b := split2(":b", ":"); a != "" || b != "b" { | |
19 t.Fail() | |
20 } | |
21 if a, b := split2("a:", ":"); a != "a" || b != "" { | |
22 t.Fail() | |
23 } | |
24 if a, b := split2(":", ":"); a != "" || b != "" { | |
25 t.Fail() | |
26 } | |
27 if a, b := split2("a", ":"); a != "a" || b != "" { | |
28 t.Fail() | |
29 } | |
30 if a, b := split2("", ":"); a != "" || b != "" { | |
31 t.Fail() | |
32 } | |
33 } | |
34 | |
17 | 35 func tmpfile(path, s string) string { |
36 ioutil.WriteFile(path, []byte(s), 0644) | |
37 return path | |
38 } | |
39 | |
0 | 40 func TestMD(t *testing.T) { |
17 | 41 defer os.Remove("foo.md") |
42 v, body, _ := md(tmpfile("foo.md", ` | |
0 | 43 title: Hello, world! |
44 keywords: foo, bar, baz | |
45 empty: | |
46 bayan: [:|||:] | |
47 | |
17 | 48 this: is a content`)) |
0 | 49 if v["title"] != "Hello, world!" { |
50 t.Error() | |
51 } | |
52 if v["keywords"] != "foo, bar, baz" { | |
53 t.Error() | |
54 } | |
55 if s, ok := v["empty"]; !ok || len(s) != 0 { | |
56 t.Error() | |
57 } | |
58 if v["bayan"] != "[:|||:]" { | |
59 t.Error() | |
60 } | |
61 if body != "this: is a content" { | |
62 t.Error(body) | |
63 } | |
2 | 64 |
65 // Test empty md | |
17 | 66 v, body, _ = md(tmpfile("foo.md", "")) |
2 | 67 if len(v) != 0 || len(body) != 0 { |
68 t.Error(v, body) | |
69 } | |
70 | |
71 // Test empty header | |
17 | 72 v, body, _ = md(tmpfile("foo.md", "Hello")) |
2 | 73 if len(v) != 0 || body != "Hello" { |
74 t.Error(v, body) | |
75 } | |
0 | 76 } |
77 | |
78 func TestRender(t *testing.T) { | |
17 | 79 eval := func(a []string, vars Vars) (string, error) { |
1 | 80 return "hello", nil |
0 | 81 } |
82 vars := map[string]string{"foo": "bar"} | |
83 | |
84 if s, err := render("plain text", vars, eval); err != nil || s != "plain text" { | |
85 t.Error() | |
86 } | |
87 if s, err := render("a {{greet}} text", vars, eval); err != nil || s != "a hello text" { | |
88 t.Error() | |
89 } | |
90 if s, err := render("{{greet}} x{{foo}}z", vars, eval); err != nil || s != "hello xbarz" { | |
91 t.Error() | |
92 } | |
4
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
93 // Test error case |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
94 if s, err := render("a {{greet text ", vars, eval); err == nil || len(s) != 0 { |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
95 t.Error() |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
96 } |
0 | 97 } |
4
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
98 |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
99 func TestEnv(t *testing.T) { |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
100 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
|
101 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
|
102 for _, s := range mustHave { |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
103 found := false |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
104 for _, v := range e { |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
105 if strings.HasPrefix(v, s) { |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
106 found = true |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
107 break |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
108 } |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
109 } |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
110 if !found { |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
111 t.Error("Missing", s) |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
112 } |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
113 } |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
114 } |
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 func TestRun(t *testing.T) { |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
117 out := bytes.NewBuffer(nil) |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
118 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
|
119 if err == nil { |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
120 t.Error() |
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 out = bytes.NewBuffer(nil) |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
124 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
|
125 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
|
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(err) |
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 if out.String() != "foo\n" { |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
130 t.Error(out.String()) |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
131 } |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
132 } |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
133 |
5 | 134 func TestEvalCommand(t *testing.T) { |
135 s, err := eval([]string{"echo", "hello"}, map[string]string{}) | |
136 if err != nil { | |
137 t.Error(err) | |
138 } | |
139 if s != "hello\n" { | |
140 t.Error(s) | |
141 } | |
142 _, err = eval([]string{"cat", "bogus/file"}, map[string]string{}) | |
143 if _, ok := err.(*exec.ExitError); !ok { | |
144 t.Error("expected ExitError") | |
145 } | |
146 _, err = eval([]string{"missing command"}, map[string]string{}) | |
147 if err != nil { | |
148 t.Error("missing command should be ignored") | |
149 } | |
150 } | |
151 | |
4
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
152 func TestHelperProcess(*testing.T) { |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
153 if os.Getenv("ZS_HELPER") != "1" { |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
154 return |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
155 } |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
2
diff
changeset
|
156 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
|
157 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
|
158 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
|
159 } |