tpls

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

builtin_for_test.go (1432B)


      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_TagFor(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 			`<for />`,
     21 			false,
     22 			"for {\n}\n",
     23 		},
     24 		{
     25 			"empty tag",
     26 			`<for></for>`,
     27 			false,
     28 			"for {\n}\n",
     29 		},
     30 		{
     31 			"infinity loop",
     32 			`<for>Hello, World!</for>`,
     33 			false,
     34 			"for {\nw.WriteRaw(`Hello, World!`)\n}\n",
     35 		},
     36 		{
     37 			"for range",
     38 			`<for class="a := range []int{1, 2, 3}"><integer>a</integer></for>`,
     39 			false,
     40 			"for a := range []int{1, 2, 3} {\nw.WriteInteger(a)\n}\n",
     41 		},
     42 		{
     43 			"incomplete for",
     44 			`<for class="true">for`,
     45 			true,
     46 			"",
     47 		},
     48 	}
     49 	for _, tt := range tests {
     50 		t.Run(tt.name, func(t *testing.T) {
     51 			var (
     52 				writer    = NewTestWriter()
     53 				tokenizer = htmlx.NewTokenizer(strings.NewReader(tt.src))
     54 			)
     55 			if kind := tokenizer.Next(); kind != htmlx.SelfClosingTagToken && kind != htmlx.StartTagToken {
     56 				t.Errorf("invalid test: unexpected token: %s", kind.String())
     57 				return
     58 			}
     59 			err := TagFor(writer.builder, writer, tokenizer)
     60 			if (err != nil) != tt.wantErr {
     61 				t.Errorf("TagIf() error = %v, wantErr %v", err, tt.wantErr)
     62 				return
     63 			}
     64 			if err != nil {
     65 				return
     66 			}
     67 			if got := writer.String(); got != tt.want {
     68 				t.Errorf("renderTag() got = %s, want = %s", strconv.Quote(got), strconv.Quote(tt.want))
     69 			}
     70 		})
     71 	}
     72 }