decoder_test.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. // Copyright 2019 Frédéric Guillot. All rights reserved.
  2. // Use of this source code is governed by the Apache 2.0
  3. // license that can be found in the LICENSE file.
  4. package xml // import "miniflux.app/reader/xml"
  5. import (
  6. "encoding/xml"
  7. "fmt"
  8. "strings"
  9. "testing"
  10. )
  11. func TestUTF8WithIllegalCharacters(t *testing.T) {
  12. type myxml struct {
  13. XMLName xml.Name `xml:"rss"`
  14. Version string `xml:"version,attr"`
  15. Title string `xml:"title"`
  16. }
  17. expected := "Title & 中文标题"
  18. data := fmt.Sprintf(`<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><title>Title & 中文%s标题</title></rss>`, "\x10")
  19. reader := strings.NewReader(data)
  20. var x myxml
  21. decoder := NewDecoder(reader)
  22. err := decoder.Decode(&x)
  23. if err != nil {
  24. t.Error(err)
  25. return
  26. }
  27. if x.Title != expected {
  28. t.Errorf("Incorrect entry title, expected: %s, got: %s", expected, x.Title)
  29. }
  30. }
  31. func TestWindows251WithIllegalCharacters(t *testing.T) {
  32. type myxml struct {
  33. XMLName xml.Name `xml:"rss"`
  34. Version string `xml:"version,attr"`
  35. Title string `xml:"title"`
  36. }
  37. expected := "Title & 中文标题"
  38. data := fmt.Sprintf(`<?xml version="1.0" encoding="windows-1251"?><rss version="2.0"><title>Title & 中文%s标题</title></rss>`, "\x10")
  39. reader := strings.NewReader(data)
  40. var x myxml
  41. decoder := NewDecoder(reader)
  42. err := decoder.Decode(&x)
  43. if err != nil {
  44. t.Error(err)
  45. return
  46. }
  47. if x.Title != expected {
  48. t.Errorf("Incorrect entry title, expected: %s, got: %s", expected, x.Title)
  49. }
  50. }
  51. func TestIllegalEncodingField(t *testing.T) {
  52. type myxml struct {
  53. XMLName xml.Name `xml:"rss"`
  54. Version string `xml:"version,attr"`
  55. Title string `xml:"title"`
  56. }
  57. expected := "Title & 中文标题"
  58. data := fmt.Sprintf(`<?xml version="1.0" encoding="invalid"?><rss version="2.0"><title>Title & 中文%s标题</title></rss>`, "\x10")
  59. reader := strings.NewReader(data)
  60. var x myxml
  61. decoder := NewDecoder(reader)
  62. err := decoder.Decode(&x)
  63. if err != nil {
  64. t.Error(err)
  65. return
  66. }
  67. if x.Title != expected {
  68. t.Errorf("Incorrect entry title, expected: %s, got: %s", expected, x.Title)
  69. }
  70. }