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 }