decoder_test.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. // SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
  2. // SPDX-License-Identifier: Apache-2.0
  3. package xml // import "miniflux.app/v2/internal/reader/xml"
  4. import (
  5. "encoding/xml"
  6. "fmt"
  7. "strings"
  8. "testing"
  9. )
  10. func TestXMLDocumentWithIllegalUnicodeCharacters(t *testing.T) {
  11. type myxml struct {
  12. XMLName xml.Name `xml:"rss"`
  13. Version string `xml:"version,attr"`
  14. Title string `xml:"title"`
  15. }
  16. expected := "Title & 中文标题"
  17. data := fmt.Sprintf(`<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><title>Title & 中文%s标题</title></rss>`, "\x10")
  18. reader := strings.NewReader(data)
  19. var x myxml
  20. decoder := NewXMLDecoder(reader)
  21. err := decoder.Decode(&x)
  22. if err != nil {
  23. t.Error(err)
  24. return
  25. }
  26. if x.Title != expected {
  27. t.Errorf("Incorrect entry title, expected: %s, got: %s", expected, x.Title)
  28. }
  29. }
  30. func TestXMLDocumentWindows251EncodedWithIllegalCharacters(t *testing.T) {
  31. type myxml struct {
  32. XMLName xml.Name `xml:"rss"`
  33. Version string `xml:"version,attr"`
  34. Title string `xml:"title"`
  35. }
  36. expected := "Title & 中文标题"
  37. data := fmt.Sprintf(`<?xml version="1.0" encoding="windows-1251"?><rss version="2.0"><title>Title & 中文%s标题</title></rss>`, "\x10")
  38. reader := strings.NewReader(data)
  39. var x myxml
  40. decoder := NewXMLDecoder(reader)
  41. err := decoder.Decode(&x)
  42. if err != nil {
  43. t.Error(err)
  44. return
  45. }
  46. if x.Title != expected {
  47. t.Errorf("Incorrect entry title, expected: %s, got: %s", expected, x.Title)
  48. }
  49. }
  50. func TestXMLDocumentWithIncorrectEncodingField(t *testing.T) {
  51. type myxml struct {
  52. XMLName xml.Name `xml:"rss"`
  53. Version string `xml:"version,attr"`
  54. Title string `xml:"title"`
  55. }
  56. expected := "Title & 中文标题"
  57. data := fmt.Sprintf(`<?xml version="1.0" encoding="invalid"?><rss version="2.0"><title>Title & 中文%s标题</title></rss>`, "\x10")
  58. reader := strings.NewReader(data)
  59. var x myxml
  60. decoder := NewXMLDecoder(reader)
  61. err := decoder.Decode(&x)
  62. if err != nil {
  63. t.Error(err)
  64. return
  65. }
  66. if x.Title != expected {
  67. t.Errorf("Incorrect entry title, expected: %s, got: %s", expected, x.Title)
  68. }
  69. }