File: format_test.go

package info (click to toggle)
miniflux 2.2.16-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 6,188 kB
  • sloc: xml: 4,853; javascript: 1,158; sh: 257; makefile: 161
file content (132 lines) | stat: -rw-r--r-- 4,016 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

package parser // import "miniflux.app/v2/internal/reader/parser"

import (
	"strings"
	"testing"
)

func TestDetectRDF(t *testing.T) {
	data := `<?xml version="1.0"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://my.netscape.com/rdf/simple/0.9/"></rdf:RDF>`
	format, _ := DetectFeedFormat(strings.NewReader(data))

	if format != FormatRDF {
		t.Errorf(`Wrong format detected: %q instead of %q`, format, FormatRDF)
	}
}

func TestDetectRSS(t *testing.T) {
	data := `<?xml version="1.0"?><rss version="2.0"><channel></channel></rss>`
	format, _ := DetectFeedFormat(strings.NewReader(data))

	if format != FormatRSS {
		t.Errorf(`Wrong format detected: %q instead of %q`, format, FormatRSS)
	}
}

func TestDetectAtom10(t *testing.T) {
	data := `<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"></feed>`
	format, _ := DetectFeedFormat(strings.NewReader(data))

	if format != FormatAtom {
		t.Errorf(`Wrong format detected: %q instead of %q`, format, FormatAtom)
	}
}

func TestDetectAtom03(t *testing.T) {
	data := `<?xml version="1.0" encoding="utf-8"?><feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en"></feed>`
	format, _ := DetectFeedFormat(strings.NewReader(data))

	if format != FormatAtom {
		t.Errorf(`Wrong format detected: %q instead of %q`, format, FormatAtom)
	}
}

func TestDetectAtomWithISOCharset(t *testing.T) {
	data := `<?xml version="1.0" encoding="ISO-8859-15"?><feed xmlns="http://www.w3.org/2005/Atom"></feed>`
	format, _ := DetectFeedFormat(strings.NewReader(data))

	if format != FormatAtom {
		t.Errorf(`Wrong format detected: %q instead of %q`, format, FormatAtom)
	}
}

func TestDetectJSON(t *testing.T) {
	data := `
	{
		"version" : "https://jsonfeed.org/version/1",
		"title" : "Example"
	}
	`
	format, _ := DetectFeedFormat(strings.NewReader(data))

	if format != FormatJSON {
		t.Errorf(`Wrong format detected: %q instead of %q`, format, FormatJSON)
	}
}

func TestDetectUnknown(t *testing.T) {
	data := `
	<!DOCTYPE html> <html> </html>
	`
	format, _ := DetectFeedFormat(strings.NewReader(data))

	if format != FormatUnknown {
		t.Errorf(`Wrong format detected: %q instead of %q`, format, FormatUnknown)
	}
}

func TestDetectJSONWithLargeLeadingWhitespace(t *testing.T) {
	leadingWhitespace := strings.Repeat(" ", 10000)
	data := leadingWhitespace + `{
		"version" : "https://jsonfeed.org/version/1",
		"title" : "Example with lots of leading whitespace"
	}`
	format, _ := DetectFeedFormat(strings.NewReader(data))

	if format != FormatJSON {
		t.Errorf(`Wrong format detected: %q instead of %q`, format, FormatJSON)
	}
}

func TestDetectJSONWithMixedWhitespace(t *testing.T) {
	leadingWhitespace := strings.Repeat("\n\t  ", 10000)
	data := leadingWhitespace + `{
		"version" : "https://jsonfeed.org/version/1",
		"title" : "Example with mixed whitespace"
	}`
	format, _ := DetectFeedFormat(strings.NewReader(data))

	if format != FormatJSON {
		t.Errorf(`Wrong format detected: %q instead of %q`, format, FormatJSON)
	}
}

func TestDetectOnlyWhitespace(t *testing.T) {
	data := strings.Repeat(" \t\n\r", 10000)
	format, _ := DetectFeedFormat(strings.NewReader(data))

	if format != FormatUnknown {
		t.Errorf(`Wrong format detected: %q instead of %q`, format, FormatUnknown)
	}
}

func TestDetectJSONSmallerThanBuffer(t *testing.T) {
	data := `{"version":"1"}` // This is only 15 bytes, well below the 32-byte buffer
	format, _ := DetectFeedFormat(strings.NewReader(data))

	if format != FormatJSON {
		t.Errorf(`Wrong format detected: %q instead of %q`, format, FormatJSON)
	}
}

func TestDetectJSONWithWhitespaceSmallerThanBuffer(t *testing.T) {
	data := `  {"title":"test"}  `
	format, _ := DetectFeedFormat(strings.NewReader(data))

	if format != FormatJSON {
		t.Errorf(`Wrong format detected: %q instead of %q`, format, FormatJSON)
	}
}