annotate zs_test.go @ 24:d052f3a44195 draft

fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
author zaitsev.serge
date Sun, 30 Aug 2015 12:22:00 +0000
parents 40f55059fbfa
children e3c902a7380d
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"
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
9 "strings"
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
10 "testing"
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
11 )
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
12
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
13 func TestSplit2(t *testing.T) {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
14 if a, b := split2("a:b", ":"); a != "a" || b != "b" {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
15 t.Fail()
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
16 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
17 if a, b := split2(":b", ":"); a != "" || b != "b" {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
18 t.Fail()
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
19 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
20 if a, b := split2("a:", ":"); a != "a" || b != "" {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
21 t.Fail()
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
22 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
23 if a, b := split2(":", ":"); a != "" || b != "" {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
24 t.Fail()
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
25 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
26 if a, b := split2("a", ":"); a != "a" || b != "" {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
27 t.Fail()
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
28 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
29 if a, b := split2("", ":"); a != "" || b != "" {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
30 t.Fail()
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
31 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
32 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
33
17
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 6
diff changeset
34 func tmpfile(path, s string) string {
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 6
diff changeset
35 ioutil.WriteFile(path, []byte(s), 0644)
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 6
diff changeset
36 return path
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 6
diff changeset
37 }
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 6
diff changeset
38
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
39 func TestMD(t *testing.T) {
17
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 6
diff changeset
40 defer os.Remove("foo.md")
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 6
diff changeset
41 v, body, _ := md(tmpfile("foo.md", `
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
42 title: Hello, world!
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
43 keywords: foo, bar, baz
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
44 empty:
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
45 bayan: [:|||:]
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
46
19
802b96e67bae added global variables, added default date for markdown
zaitsev.serge
parents: 18
diff changeset
47 this: is a content`), Vars{})
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
48 if v["title"] != "Hello, world!" {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
49 t.Error()
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
50 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
51 if v["keywords"] != "foo, bar, baz" {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
52 t.Error()
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
53 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
54 if s, ok := v["empty"]; !ok || len(s) != 0 {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
55 t.Error()
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
56 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
57 if v["bayan"] != "[:|||:]" {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
58 t.Error()
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
59 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
60 if body != "this: is a content" {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
61 t.Error(body)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
62 }
2
fd79b3a90bef fixed empty header in markdown
zaitsev.serge
parents: 1
diff changeset
63
fd79b3a90bef fixed empty header in markdown
zaitsev.serge
parents: 1
diff changeset
64 // Test empty md
19
802b96e67bae added global variables, added default date for markdown
zaitsev.serge
parents: 18
diff changeset
65 v, body, _ = md(tmpfile("foo.md", ""), Vars{})
802b96e67bae added global variables, added default date for markdown
zaitsev.serge
parents: 18
diff changeset
66 if v["url"] != "foo.html" || len(body) != 0 {
2
fd79b3a90bef fixed empty header in markdown
zaitsev.serge
parents: 1
diff changeset
67 t.Error(v, body)
fd79b3a90bef fixed empty header in markdown
zaitsev.serge
parents: 1
diff changeset
68 }
fd79b3a90bef fixed empty header in markdown
zaitsev.serge
parents: 1
diff changeset
69
fd79b3a90bef fixed empty header in markdown
zaitsev.serge
parents: 1
diff changeset
70 // Test empty header
19
802b96e67bae added global variables, added default date for markdown
zaitsev.serge
parents: 18
diff changeset
71 v, body, _ = md(tmpfile("foo.md", "Hello"), Vars{})
802b96e67bae added global variables, added default date for markdown
zaitsev.serge
parents: 18
diff changeset
72 if v["url"] != "foo.html" || body != "Hello" {
2
fd79b3a90bef fixed empty header in markdown
zaitsev.serge
parents: 1
diff changeset
73 t.Error(v, body)
fd79b3a90bef fixed empty header in markdown
zaitsev.serge
parents: 1
diff changeset
74 }
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
75 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
76
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
77 func TestRender(t *testing.T) {
18
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
78 vars := map[string]string{"foo": "bar"}
23
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents: 19
diff changeset
79 funcs := Funcs{
18
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
80 "greet": func(s ...string) string {
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
81 if len(s) == 0 {
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
82 return "hello"
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
83 } else {
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
84 return "hello " + strings.Join(s, " ")
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
85 }
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
86 },
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
87 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
88
18
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
89 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
90 t.Error(s, err)
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
91 }
18
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
92 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
93 t.Error(s, err)
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
94 }
18
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
95 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
96 t.Error(s, err)
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
97 }
4
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
98 // Test error case
18
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
99 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
100 t.Error(s, err)
4
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
101 }
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
102 }
4
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
103
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
104 func TestEnv(t *testing.T) {
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
105 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
106 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
107 for _, s := range mustHave {
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
108 found := false
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
109 for _, v := range e {
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
110 if strings.HasPrefix(v, s) {
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
111 found = true
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
112 break
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 if !found {
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
116 t.Error("Missing", s)
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
117 }
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
118 }
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 func TestRun(t *testing.T) {
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
122 out := bytes.NewBuffer(nil)
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
123 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
124 if err == nil {
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
125 t.Error()
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
126 }
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
127
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
128 out = bytes.NewBuffer(nil)
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
129 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
130 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
131 if err != nil {
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
132 t.Error(err)
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
133 }
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
134 if out.String() != "foo\n" {
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
135 t.Error(out.String())
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
136 }
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
137 }
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 func TestHelperProcess(*testing.T) {
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
140 if os.Getenv("ZS_HELPER") != "1" {
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
141 return
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
142 }
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 2
diff changeset
143 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
144 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
145 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
146 }