You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
2.4 KiB
108 lines
2.4 KiB
package main |
|
|
|
import ( |
|
"io/ioutil" |
|
"os" |
|
"path/filepath" |
|
"testing" |
|
) |
|
|
|
func TestRenameExt(t *testing.T) { |
|
if s := renameExt("foo.amber", ".amber", ".html"); s != "foo.html" { |
|
t.Error(s) |
|
} |
|
if s := renameExt("foo.amber", "", ".html"); s != "foo.html" { |
|
t.Error(s) |
|
} |
|
if s := renameExt("foo.amber", ".md", ".html"); s != "foo.amber" { |
|
t.Error(s) |
|
} |
|
if s := renameExt("foo", ".amber", ".html"); s != "foo" { |
|
t.Error(s) |
|
} |
|
if s := renameExt("foo", "", ".html"); s != "foo.html" { |
|
t.Error(s) |
|
} |
|
} |
|
|
|
func TestRun(t *testing.T) { |
|
// external command |
|
if s, err := run(Vars{}, "echo", "hello"); err != nil || s != "hello\n" { |
|
t.Error(s, err) |
|
} |
|
// passing variables to plugins |
|
if s, err := run(Vars{"foo": "bar"}, "sh", "-c", "echo $ZS_FOO"); err != nil || s != "bar\n" { |
|
t.Error(s, err) |
|
} |
|
|
|
// custom plugin overriding external command |
|
os.Mkdir(ZSDIR, 0755) |
|
script := `#!/bin/sh |
|
echo foo |
|
` |
|
ioutil.WriteFile(filepath.Join(ZSDIR, "echo"), []byte(script), 0755) |
|
if s, err := run(Vars{}, "echo", "hello"); err != nil || s != "foo\n" { |
|
t.Error(s, err) |
|
} |
|
os.Remove(filepath.Join(ZSDIR, "echo")) |
|
os.Remove(ZSDIR) |
|
} |
|
|
|
func TestVars(t *testing.T) { |
|
tests := map[string]Vars{ |
|
` |
|
foo: bar |
|
title: Hello, world! |
|
--- |
|
Some content in markdown |
|
`: { |
|
"foo": "bar", |
|
"title": "Hello, world!", |
|
"url": "test.html", |
|
"file": "test.md", |
|
"output": filepath.Join(PUBDIR, "test.html"), |
|
"__content": "Some content in markdown\n", |
|
}, |
|
` |
|
url: "example.com/foo.html" |
|
--- |
|
Hello |
|
`: { |
|
"url": "example.com/foo.html", |
|
"__content": "Hello\n", |
|
}, |
|
} |
|
|
|
for script, vars := range tests { |
|
ioutil.WriteFile("test.md", []byte(script), 0644) |
|
if v, s, err := getVars("test.md", Vars{"baz": "123"}); err != nil { |
|
t.Error(err) |
|
} else if s != vars["__content"] { |
|
t.Error(s, vars["__content"]) |
|
} else { |
|
for key, value := range vars { |
|
if key != "__content" && v[key] != value { |
|
t.Error(key, v[key], value) |
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
|
func TestRender(t *testing.T) { |
|
vars := map[string]string{"foo": "bar"} |
|
|
|
if s, _ := render("foo bar", vars); s != "foo bar" { |
|
t.Error(s) |
|
} |
|
if s, _ := render("a {{printf short}} text", vars); s != "a short text" { |
|
t.Error(s) |
|
} |
|
if s, _ := render("{{printf Hello}} x{{foo}}z", vars); s != "Hello xbarz" { |
|
t.Error(s) |
|
} |
|
// Test error case |
|
if _, err := render("a {{greet text ", vars); err == nil { |
|
t.Error("error expected") |
|
} |
|
}
|
|
|