annotate zs_test.go @ 19:802b96e67bae draft

added global variables, added default date for markdown
author zaitsev.serge
date Sat, 29 Aug 2015 17:54:55 +0000
parents ae3116ea938b
children 40f55059fbfa
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
1 package main
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
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
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 6
diff changeset
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
e0ee0721d34f added tests for eval command runner
zaitsev.serge
parents: 4
diff changeset
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
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
12 "text/template"
4
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
13 )
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
14
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
15 func TestSplit2(t *testing.T) {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
16 if a, b := split2("a:b", ":"); a != "a" || b != "b" {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
17 t.Fail()
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
18 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
19 if a, b := split2(":b", ":"); a != "" || b != "b" {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
20 t.Fail()
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
21 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
22 if a, b := split2("a:", ":"); a != "a" || b != "" {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
23 t.Fail()
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
24 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
25 if a, b := split2(":", ":"); a != "" || b != "" {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
26 t.Fail()
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
27 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
28 if a, b := split2("a", ":"); a != "a" || b != "" {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
29 t.Fail()
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
30 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
31 if a, b := split2("", ":"); a != "" || b != "" {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
32 t.Fail()
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
33 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
34 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
35
17
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 6
diff changeset
36 func tmpfile(path, s string) string {
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 6
diff changeset
37 ioutil.WriteFile(path, []byte(s), 0644)
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 6
diff changeset
38 return path
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 6
diff changeset
39 }
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 6
diff changeset
40
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
41 func TestMD(t *testing.T) {
17
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 6
diff changeset
42 defer os.Remove("foo.md")
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 6
diff changeset
43 v, body, _ := md(tmpfile("foo.md", `
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
44 title: Hello, world!
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
45 keywords: foo, bar, baz
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
46 empty:
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
47 bayan: [:|||:]
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
48
19
802b96e67bae added global variables, added default date for markdown
zaitsev.serge
parents: 18
diff changeset
49 this: is a content`), Vars{})
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
50 if v["title"] != "Hello, world!" {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
51 t.Error()
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
52 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
53 if v["keywords"] != "foo, bar, baz" {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
54 t.Error()
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
55 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
56 if s, ok := v["empty"]; !ok || len(s) != 0 {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
57 t.Error()
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
58 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
59 if v["bayan"] != "[:|||:]" {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
60 t.Error()
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
61 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
62 if body != "this: is a content" {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
63 t.Error(body)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
64 }
2
fd79b3a90bef fixed empty header in markdown
zaitsev.serge
parents: 1
diff changeset
65
fd79b3a90bef fixed empty header in markdown
zaitsev.serge
parents: 1
diff changeset
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
fd79b3a90bef fixed empty header in markdown
zaitsev.serge
parents: 1
diff changeset
69 t.Error(v, body)
fd79b3a90bef fixed empty header in markdown
zaitsev.serge
parents: 1
diff changeset
70 }
fd79b3a90bef fixed empty header in markdown
zaitsev.serge
parents: 1
diff changeset
71
fd79b3a90bef fixed empty header in markdown
zaitsev.serge
parents: 1
diff changeset
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
fd79b3a90bef fixed empty header in markdown
zaitsev.serge
parents: 1
diff changeset
75 t.Error(v, body)
fd79b3a90bef fixed empty header in markdown
zaitsev.serge
parents: 1
diff changeset
76 }
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
77 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
78
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
79 func TestRender(t *testing.T) {
18
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
80 vars := map[string]string{"foo": "bar"}
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
81 funcs := template.FuncMap{
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
82 "greet": func(s ...string) string {
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
83 if len(s) == 0 {
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
84 return "hello"
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
85 } else {
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
86 return "hello " + strings.Join(s, " ")
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
87 }
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
88 },
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
89 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
90
18
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
91 if s, err := render("plain text", funcs, vars); err != nil || s != "plain text" {
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
92 t.Error(s, err)
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
93 }
18
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
94 if s, err := render("a {{greet}} text", funcs, vars); err != nil || s != "a hello text" {
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
95 t.Error(s, err)
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
96 }
18
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
97 if s, err := render("{{greet}} x{{foo}}z", funcs, vars); err != nil || s != "hello xbarz" {
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
98 t.Error(s, err)
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
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
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
101 if s, err := render("a {{greet text ", funcs, vars); err == nil || len(s) != 0 {
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
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
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
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
e0ee0721d34f added tests for eval command runner
zaitsev.serge
parents: 4
diff changeset
141 func TestEvalCommand(t *testing.T) {
e0ee0721d34f added tests for eval command runner
zaitsev.serge
parents: 4
diff changeset
142 s, err := eval([]string{"echo", "hello"}, map[string]string{})
e0ee0721d34f added tests for eval command runner
zaitsev.serge
parents: 4
diff changeset
143 if err != nil {
e0ee0721d34f added tests for eval command runner
zaitsev.serge
parents: 4
diff changeset
144 t.Error(err)
e0ee0721d34f added tests for eval command runner
zaitsev.serge
parents: 4
diff changeset
145 }
e0ee0721d34f added tests for eval command runner
zaitsev.serge
parents: 4
diff changeset
146 if s != "hello\n" {
e0ee0721d34f added tests for eval command runner
zaitsev.serge
parents: 4
diff changeset
147 t.Error(s)
e0ee0721d34f added tests for eval command runner
zaitsev.serge
parents: 4
diff changeset
148 }
e0ee0721d34f added tests for eval command runner
zaitsev.serge
parents: 4
diff changeset
149 _, err = eval([]string{"cat", "bogus/file"}, map[string]string{})
e0ee0721d34f added tests for eval command runner
zaitsev.serge
parents: 4
diff changeset
150 if _, ok := err.(*exec.ExitError); !ok {
e0ee0721d34f added tests for eval command runner
zaitsev.serge
parents: 4
diff changeset
151 t.Error("expected ExitError")
e0ee0721d34f added tests for eval command runner
zaitsev.serge
parents: 4
diff changeset
152 }
e0ee0721d34f added tests for eval command runner
zaitsev.serge
parents: 4
diff changeset
153 _, err = eval([]string{"missing command"}, map[string]string{})
e0ee0721d34f added tests for eval command runner
zaitsev.serge
parents: 4
diff changeset
154 if err != nil {
e0ee0721d34f added tests for eval command runner
zaitsev.serge
parents: 4
diff changeset
155 t.Error("missing command should be ignored")
e0ee0721d34f added tests for eval command runner
zaitsev.serge
parents: 4
diff changeset
156 }
e0ee0721d34f added tests for eval command runner
zaitsev.serge
parents: 4
diff changeset
157 }
e0ee0721d34f added tests for eval command runner
zaitsev.serge
parents: 4
diff changeset
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 }