tpls

Extendable, Fast Template Engine for Go
git clone git://git.lair.cx/tpls
Log | Files | Refs | README | LICENSE

builtin_if_test.go (2421B)


      1 package tplc
      2 
      3 import (
      4 	"strconv"
      5 	"strings"
      6 	"testing"
      7 
      8 	"go.lair.cx/go-core/net/htmlx"
      9 )
     10 
     11 func Test_TagIf(t *testing.T) {
     12 	tests := []struct {
     13 		name    string
     14 		src     string
     15 		wantErr bool
     16 		want    string
     17 	}{
     18 		{
     19 			"self-closing tag",
     20 			`<if class="true" />`,
     21 			false,
     22 			"if true {\n}\n",
     23 		},
     24 		{
     25 			"self-closing then",
     26 			`<if class="true"><then /></if>`,
     27 			false,
     28 			"if true {\n}\n",
     29 		},
     30 		{
     31 			"self-closing else",
     32 			`<if class="true"><then>Hello, World!</then><else /></if>`,
     33 			false,
     34 			"if true {\nw.WriteRaw(`Hello, World!`)\n} else {\n}\n",
     35 		},
     36 		{
     37 			"empty tag",
     38 			`<if class="true"></if>`,
     39 			false,
     40 			"if true {\n}\n",
     41 		},
     42 		{
     43 			"if then",
     44 			`<if class="true"><then>Hello, World!</then></if>`,
     45 			false,
     46 			"if true {\nw.WriteRaw(`Hello, World!`)\n}\n",
     47 		},
     48 		{
     49 			"if then else",
     50 			`<if class="true"><then>Hello, World!</then><else>true is !true</else></if>`,
     51 			false,
     52 			"if true {\nw.WriteRaw(`Hello, World!`)\n} else {\nw.WriteRaw(`true is !true`)\n}\n",
     53 		},
     54 		{
     55 			"if then else-if else",
     56 			`<if class="true"><then>Hello, World!</then><else class="1 == 1">true is !true but 1 == 1</else><else>1 != 1</else></if>`,
     57 			false,
     58 			"if true {\nw.WriteRaw(`Hello, World!`)\n} else if 1 == 1 {\nw.WriteRaw(`true is !true but 1 == 1`)\n} else {\nw.WriteRaw(`1 != 1`)\n}\n",
     59 		},
     60 		{
     61 			"incomplete if",
     62 			`<if class="true"><then>Hello, World!</then>`,
     63 			true,
     64 			"",
     65 		},
     66 		{
     67 			"incomplete then",
     68 			`<if class="true"><then>Hello, World!</if>`,
     69 			true,
     70 			"",
     71 		},
     72 		{
     73 			"incomplete else",
     74 			`<if class="true"><then>Hello, World!</then><else>Else</if>`,
     75 			true,
     76 			"",
     77 		},
     78 		{
     79 			"plain text in if",
     80 			`<if class="true">Hello, World!</if>`,
     81 			true,
     82 			"",
     83 		},
     84 	}
     85 	for _, tt := range tests {
     86 		t.Run(tt.name, func(t *testing.T) {
     87 			var (
     88 				writer    = NewTestWriter()
     89 				tokenizer = htmlx.NewTokenizer(strings.NewReader(tt.src))
     90 			)
     91 			if kind := tokenizer.Next(); kind != htmlx.SelfClosingTagToken && kind != htmlx.StartTagToken {
     92 				t.Errorf("invalid test: unexpected token: %s", kind.String())
     93 				return
     94 			}
     95 			err := TagIf(writer.builder, writer, tokenizer)
     96 			if (err != nil) != tt.wantErr {
     97 				t.Errorf("TagIf() error = %v, wantErr %v", err, tt.wantErr)
     98 				return
     99 			}
    100 			if err != nil {
    101 				return
    102 			}
    103 			if got := writer.String(); got != tt.want {
    104 				t.Errorf("renderTag() got = %s, want = %s", strconv.Quote(got), strconv.Quote(tt.want))
    105 			}
    106 		})
    107 	}
    108 }