package tgutil import ( "testing" "github.com/gotd/td/tg" ) func TestEscapeHTMLTemplateDataDoesNotMutateInput(t *testing.T) { input := map[string]any{ "Text": `A&B`, "Count": 2, } escaped := EscapeHTMLTemplateData(input) if got, want := escaped["Text"], "<b>A&B</b>"; got != want { t.Fatalf("escaped text = %q, want %q", got, want) } if got := input["Text"]; got != `A&B` { t.Fatalf("input was mutated: %q", got) } if got := escaped["Count"]; got != 2 { t.Fatalf("non-string value = %v, want 2", got) } } func TestRenderHTMLUsesTemplateStylesAndDecodesValues(t *testing.T) { data := EscapeHTMLTemplateData(map[string]any{"Name": `A&B.bin`}) markup := `
Uploading ` + data["Name"].(string) + `
` text, entities, err := RenderHTML(markup) if err != nil { t.Fatalf("RenderHTML() failed: %v", err) } if want := "Uploading\nA&B.bin"; text != want { t.Fatalf("rendered text = %q, want %q", text, want) } var bold, code, blockquote int for _, messageEntity := range entities { switch messageEntity.(type) { case *tg.MessageEntityBold: bold++ case *tg.MessageEntityCode: code++ case *tg.MessageEntityBlockquote: blockquote++ } } if bold != 1 || code != 1 || blockquote != 1 { t.Fatalf("entity counts = bold:%d code:%d blockquote:%d", bold, code, blockquote) } }