util_test.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package html // import "github.com/tdewolff/parse/html"
  2. import (
  3. "testing"
  4. "github.com/tdewolff/test"
  5. )
  6. func TestEscapeAttrVal(t *testing.T) {
  7. var escapeAttrValTests = []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. {"x\"z", "'x\"z'"},
  17. {"'x\"z'", "'x\"z'"},
  18. {"'x'\"'z'", "\"x'"'z\""},
  19. {"\"x"'"z\"", "'x\"'\"z'"},
  20. {"\"x'z\"", "\"x'z\""},
  21. {"'x"z'", "'x\"z'"},
  22. {"'x\">'", "'x\">'"},
  23. {"You're encouraged to log in; however, it's not mandatory. [o]", "\"You're encouraged to log in; however, it's not mandatory. [o]\""},
  24. {"a'b=\"\"", "'a'b=\"\"'"},
  25. {"x<z", "\"x<z\""},
  26. {"'x\"&#39;\"z'", "'x\"&#39;\"z'"},
  27. }
  28. var buf []byte
  29. for _, tt := range escapeAttrValTests {
  30. t.Run(tt.attrVal, func(t *testing.T) {
  31. b := []byte(tt.attrVal)
  32. orig := b
  33. if len(b) > 1 && (b[0] == '"' || b[0] == '\'') && b[0] == b[len(b)-1] {
  34. b = b[1 : len(b)-1]
  35. }
  36. val := EscapeAttrVal(&buf, orig, []byte(b))
  37. test.String(t, string(val), tt.expected)
  38. })
  39. }
  40. }