github.com/tooploox/oya@v0.0.21-0.20230524103240-1cda1861aad6/pkg/template/template_test.go (about) 1 package template_test 2 3 import ( 4 "bytes" 5 "io/ioutil" 6 "os" 7 "path/filepath" 8 "testing" 9 10 "github.com/tooploox/oya/pkg/template" 11 tu "github.com/tooploox/oya/testutil" 12 ) 13 14 func TestLoad(t *testing.T) { 15 delimiters := template.Delimiters{"<%", "%>"} 16 _, err := template.Load("./fixtures/good.txt.plush", delimiters) 17 tu.AssertNoErr(t, err, "Expected template to load") 18 } 19 20 func TestParse(t *testing.T) { 21 delimiters := template.Delimiters{"<%", "%>"} 22 _, err := template.Parse("$foo", delimiters) 23 tu.AssertNoErr(t, err, "Expected template to parse") 24 } 25 26 func TestTemplate_Render_Loaded(t *testing.T) { 27 delimiters := template.Delimiters{"<%", "%>"} 28 tpl, err := template.Load("./fixtures/good.txt.plush", delimiters) 29 tu.AssertNoErr(t, err, "Expected template to load") 30 output := new(bytes.Buffer) 31 err = tpl.Render(output, template.Scope{"foo": "bar"}) 32 tu.AssertNoErr(t, err, "Expected template to render") 33 tu.AssertEqual(t, "bar\n", output.String()) 34 } 35 36 func TestTemplate_Render_Parsed(t *testing.T) { 37 delimiters := template.Delimiters{"<%", "%>"} 38 tpl, err := template.Parse("<%= foo %>", delimiters) 39 tu.AssertNoErr(t, err, "Expected template to parse") 40 output := new(bytes.Buffer) 41 err = tpl.Render(output, template.Scope{"foo": "bar"}) 42 tu.AssertNoErr(t, err, "Expected template to render") 43 tu.AssertEqual(t, "bar", output.String()) 44 } 45 46 func TestTemplate_Render_MissingVariables(t *testing.T) { 47 delimiters := template.Delimiters{"<%", "%>"} 48 tpl, err := template.Parse("<%= noSuchVar %>", delimiters) 49 tu.AssertNoErr(t, err, "Expected template to parse") 50 err = tpl.Render(ioutil.Discard, template.Scope{"foo": "bar"}) 51 tu.AssertErr(t, err, "Expected template not to render") 52 } 53 54 func TestRenderAll_Directory(t *testing.T) { 55 delimiters := template.Delimiters{"<%", "%>"} 56 outputDir, err := ioutil.TempDir("", "oya") 57 tu.AssertNoErr(t, err, "Error creating temporary output dir") 58 defer os.RemoveAll(outputDir) 59 60 err = template.RenderAll("./fixtures/", nil, outputDir, 61 template.Scope{"foo": "bar", "baz": map[string]interface{}{"qux": "abc"}}, delimiters) 62 tu.AssertNoErr(t, err, "Expected templates to render") 63 64 tu.AssertFileContains(t, filepath.Join(outputDir, "good.txt.plush"), "bar\n") 65 tu.AssertFileContains(t, filepath.Join(outputDir, "subdir/nested.txt.plush"), "barabc\n") 66 } 67 68 func TestRenderAll_SingleFile(t *testing.T) { 69 delimiters := template.Delimiters{"<%", "%>"} 70 outputDir, err := ioutil.TempDir("", "oya") 71 tu.AssertNoErr(t, err, "Error creating temporary output dir") 72 defer os.RemoveAll(outputDir) 73 74 err = template.RenderAll("./fixtures/good.txt.plush", nil, outputDir, template.Scope{"foo": "bar"}, delimiters) 75 tu.AssertNoErr(t, err, "Expected templates to render") 76 77 tu.AssertFileContains(t, filepath.Join(outputDir, "good.txt.plush"), "bar\n") 78 } 79 80 func TestRenderAll_ExcludedPaths(t *testing.T) { 81 delimiters := template.Delimiters{"<%", "%>"} 82 outputDir, err := ioutil.TempDir("", "oya") 83 tu.AssertNoErr(t, err, "Error creating temporary output dir") 84 defer os.RemoveAll(outputDir) 85 86 excludedPaths := []string{"good.txt.plush"} 87 err = template.RenderAll("./fixtures/", excludedPaths, outputDir, 88 template.Scope{"foo": "bar", "baz": map[string]interface{}{"qux": "abc"}}, delimiters) 89 tu.AssertNoErr(t, err, "Expected templates to render") 90 91 tu.AssertPathNotExists(t, filepath.Join(outputDir, "good.txt.plush")) 92 tu.AssertFileContains(t, filepath.Join(outputDir, "subdir/nested.txt.plush"), "barabc\n") 93 } 94 95 func TestRenderAll_ExcludedPatterns(t *testing.T) { 96 delimiters := template.Delimiters{"<%", "%>"} 97 outputDir, err := ioutil.TempDir("", "oya") 98 tu.AssertNoErr(t, err, "Error creating temporary output dir") 99 defer os.RemoveAll(outputDir) 100 101 excludedPaths := []string{"**.txt.plush"} 102 err = template.RenderAll("./fixtures/", excludedPaths, outputDir, template.Scope{"foo": "bar"}, delimiters) 103 tu.AssertNoErr(t, err, "Expected templates to render") 104 105 tu.AssertPathNotExists(t, filepath.Join(outputDir, "good.txt.plush")) 106 tu.AssertPathNotExists(t, filepath.Join(outputDir, "subdir/nested.txt.plush")) 107 } 108 109 func TestTemplate_Render_CustomDelimiters(t *testing.T) { 110 delimiters := template.Delimiters{"{{", "}}"} 111 tpl, err := template.Parse("{{= foo }}", delimiters) 112 tu.AssertNoErr(t, err, "Expected template to parse") 113 output := new(bytes.Buffer) 114 err = tpl.Render(output, template.Scope{"foo": "bar"}) 115 tu.AssertNoErr(t, err, "Expected template to render") 116 tu.AssertEqual(t, "bar", output.String()) 117 }