util_test.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package xml // import "github.com/tdewolff/parse/xml"
  2. import (
  3. "testing"
  4. "github.com/tdewolff/test"
  5. )
  6. func TestEscapeAttrVal(t *testing.T) {
  7. var attrValTests = []struct {
  8. attrVal string
  9. expected string
  10. }{
  11. {"xyz", "\"xyz\""},
  12. {"", "\"\""},
  13. {"x&z", "\"x&z\""},
  14. {"x'z", "\"x'z\""},
  15. {"x\"z", "'x\"z'"},
  16. {"a'b=\"\"", "'a'b=\"\"'"},
  17. {"'x'\"'z'", "\"x'"'z\""},
  18. {"\"x"'"z\"", "'x\"'\"z'"},
  19. {"a'b=\"\"", "'a'b=\"\"'"},
  20. }
  21. var buf []byte
  22. for _, tt := range attrValTests {
  23. t.Run(tt.attrVal, func(t *testing.T) {
  24. b := []byte(tt.attrVal)
  25. if len(b) > 1 && (b[0] == '"' || b[0] == '\'') && b[0] == b[len(b)-1] {
  26. b = b[1 : len(b)-1]
  27. }
  28. val := EscapeAttrVal(&buf, []byte(b))
  29. test.String(t, string(val), tt.expected)
  30. })
  31. }
  32. }
  33. func TestEscapeCDATAVal(t *testing.T) {
  34. var CDATAValTests = []struct {
  35. CDATAVal string
  36. expected string
  37. }{
  38. {"<![CDATA[<b>]]>", "&lt;b>"},
  39. {"<![CDATA[abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz]]>", "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"},
  40. {"<![CDATA[ <b> ]]>", " &lt;b> "},
  41. {"<![CDATA[<<<<<]]>", "<![CDATA[<<<<<]]>"},
  42. {"<![CDATA[&]]>", "&amp;"},
  43. {"<![CDATA[&&&&]]>", "<![CDATA[&&&&]]>"},
  44. {"<![CDATA[ a ]]>", " a "},
  45. {"<![CDATA[]]>", ""},
  46. }
  47. var buf []byte
  48. for _, tt := range CDATAValTests {
  49. t.Run(tt.CDATAVal, func(t *testing.T) {
  50. b := []byte(tt.CDATAVal[len("<![CDATA[") : len(tt.CDATAVal)-len("]]>")])
  51. data, useText := EscapeCDATAVal(&buf, b)
  52. text := string(data)
  53. if !useText {
  54. text = "<![CDATA[" + text + "]]>"
  55. }
  56. test.String(t, text, tt.expected)
  57. })
  58. }
  59. }