diff main_test.go @ 47:0adadd497d23 draft

Forked project
author prologic
date Fri, 17 Sep 2021 23:32:14 +0000
parents
children befb74a09424
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main_test.go	Fri Sep 17 23:32:14 2021 +0000
@@ -0,0 +1,108 @@
+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
+`: Vars{
+			"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
+`: Vars{
+			"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")
+	}
+}