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 }