github.com/lolorenzo777/zazzy@v0.4.3/zazzy_test.go (about) 1 package main 2 3 import ( 4 "io/ioutil" 5 "os" 6 "path/filepath" 7 "testing" 8 ) 9 10 func TestRenameExt(t *testing.T) { 11 if s := renameExt("foo.md", ".md", ".html"); s != "foo.html" { 12 t.Error(s) 13 } 14 if s := renameExt("foo.md", "", ".html"); s != "foo.html" { 15 t.Error(s) 16 } 17 if s := renameExt("foo.txt", ".md", ".html"); s != "foo.txt" { 18 t.Error(s) 19 } 20 if s := renameExt("foo", ".md", ".html"); s != "foo" { 21 t.Error(s) 22 } 23 if s := renameExt("foo", "", ".html"); s != "foo.html" { 24 t.Error(s) 25 } 26 } 27 28 func TestRun(t *testing.T) { 29 // external command 30 if s, err := run(Vars{}, "echo", "hello"); err != nil || s != "hello\n" { 31 t.Error(s, err) 32 } 33 // passing variables to plugins 34 if s, err := run(Vars{"foo": "bar"}, "sh", "-c", "echo $ZS_FOO"); err != nil || s != "bar\n" { 35 t.Error(s, err) 36 } 37 38 // custom plugin overriding external command 39 os.Mkdir(ZSDIR, 0755) 40 script := `#!/bin/sh 41 echo foo 42 ` 43 ioutil.WriteFile(filepath.Join(ZSDIR, "echo"), []byte(script), 0755) 44 if s, err := run(Vars{}, "echo", "hello"); err != nil || s != "foo\n" { 45 t.Error(s, err) 46 } 47 os.Remove(filepath.Join(ZSDIR, "echo")) 48 os.Remove(ZSDIR) 49 } 50 51 func TestVars(t *testing.T) { 52 tests := map[string]Vars{ 53 ` 54 foo: bar 55 title: Hello, world! 56 --- 57 Some content in markdown 58 `: { 59 "foo": "bar", 60 "title": "Hello, world!", 61 "url": "test.html", 62 "file": "test.md", 63 "output": filepath.Join(PUBDIR, "test.html"), 64 "__content": "Some content in markdown\n", 65 }, 66 ` 67 url: "example.com/foo.html" 68 --- 69 Hello 70 `: { 71 "url": "example.com/foo.html", 72 "__content": "Hello\n", 73 }, 74 } 75 76 for script, vars := range tests { 77 ioutil.WriteFile("test.md", []byte(script), 0644) 78 if v, s, err := getVars("test.md", Vars{"baz": "123"}); err != nil { 79 t.Error(err) 80 } else if s != vars["__content"] { 81 t.Error(s, vars["__content"]) 82 } else { 83 for key, value := range vars { 84 if key != "__content" && v[key] != value { 85 t.Error(key, v[key], value) 86 } 87 } 88 } 89 } 90 } 91 92 func TestRender(t *testing.T) { 93 vars := map[string]string{"foo": "bar"} 94 95 if s, _ := render("foo bar", vars, 1); s != "foo bar" { 96 t.Error(s) 97 } 98 if s, _ := render("a {{printf short}} text", vars, 1); s != "a short text" { 99 t.Error(s) 100 } 101 if s, _ := render("{{printf Hello}} x{{foo}}z", vars, 1); s != "Hello xbarz" { 102 t.Error(s) 103 } 104 // Test error case 105 if _, err := render("a {{greet text ", vars, 1); err == nil { 106 t.Error("error expected") 107 } 108 } 109 110 func TestRenderFavicon(t *testing.T) { 111 vars := map[string]string{"foo": "bar"} 112 113 // 1st time = download and cache 114 if s, _ := render("{{favicon https://lolorenzo777.github.io/website4tests-2/}}", vars, 1); s != "<img src=\"/img/favicons/lolorenzo777-github-iowebsite4tests-2+test-32x32.png\" alt=\"icon\" class=\"favicon\" role=\"img\">" { 115 t.Error(s) 116 } else { 117 // 2nd time = render from cache 118 if s, _ := render("{{favicon https://lolorenzo777.github.io/website4tests-2/}}", vars, 1); s != "<img src=\"/img/favicons/lolorenzo777-github-iowebsite4tests-2+test-32x32.png\" alt=\"icon\" class=\"favicon\" role=\"img\">" { 119 t.Error(s) 120 } else { 121 os.RemoveAll(PUBDIR) 122 } 123 } 124 }