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  }