diff --git a/internal/reader/encoding/encoding_test.go b/internal/reader/encoding/encoding_test.go new file mode 100644 index 00000000..10d326ba --- /dev/null +++ b/internal/reader/encoding/encoding_test.go @@ -0,0 +1,149 @@ +// SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +package encoding // import "miniflux.app/v2/internal/reader/encoding" + +import ( + "io" + "os" + "testing" + "unicode/utf8" +) + +func TestCharsetReaderWithUTF8(t *testing.T) { + file := "testdata/utf8.xml" + + f, err := os.Open(file) + if err != nil { + t.Fatalf("Unable to open file: %v", err) + } + + reader, err := CharsetReader("UTF-8", f) + if err != nil { + t.Fatalf("Unable to create reader: %v", err) + } + + data, err := io.ReadAll(reader) + if err != nil { + t.Fatalf("Unable to read data: %v", err) + } + + if !utf8.Valid(data) { + t.Fatalf("Data is not valid UTF-8") + } +} + +func TestCharsetReaderWithISO88591(t *testing.T) { + file := "testdata/iso-8859-1.xml" + + f, err := os.Open(file) + if err != nil { + t.Fatalf("Unable to open file: %v", err) + } + + reader, err := CharsetReader("ISO-8859-1", f) + if err != nil { + t.Fatalf("Unable to create reader: %v", err) + } + + data, err := io.ReadAll(reader) + if err != nil { + t.Fatalf("Unable to read data: %v", err) + } + + if !utf8.Valid(data) { + t.Fatalf("Data is not valid UTF-8") + } +} + +func TestCharsetReaderWithWindows1252(t *testing.T) { + file := "testdata/windows-1252.xml" + + f, err := os.Open(file) + if err != nil { + t.Fatalf("Unable to open file: %v", err) + } + + reader, err := CharsetReader("windows-1252", f) + if err != nil { + t.Fatalf("Unable to create reader: %v", err) + } + + data, err := io.ReadAll(reader) + if err != nil { + t.Fatalf("Unable to read data: %v", err) + } + + if !utf8.Valid(data) { + t.Fatalf("Data is not valid UTF-8") + } +} + +func TestCharsetReaderWithInvalidProlog(t *testing.T) { + file := "testdata/invalid-prolog.xml" + + f, err := os.Open(file) + if err != nil { + t.Fatalf("Unable to open file: %v", err) + } + + reader, err := CharsetReader("invalid", f) + if err != nil { + t.Fatalf("Unable to create reader: %v", err) + } + + data, err := io.ReadAll(reader) + if err != nil { + t.Fatalf("Unable to read data: %v", err) + } + + if !utf8.Valid(data) { + t.Fatalf("Data is not valid UTF-8") + } +} + +func TestCharsetReaderWithUTF8DocumentWithIncorrectProlog(t *testing.T) { + file := "testdata/utf8-incorrect-prolog.xml" + + f, err := os.Open(file) + if err != nil { + t.Fatalf("Unable to open file: %v", err) + } + + reader, err := CharsetReader("ISO-8859-1", f) + if err != nil { + t.Fatalf("Unable to create reader: %v", err) + } + + data, err := io.ReadAll(reader) + if err != nil { + t.Fatalf("Unable to read data: %v", err) + } + + if !utf8.Valid(data) { + t.Fatalf("Data is not valid UTF-8") + } +} + +func TestCharsetReaderWithWindows1252DocumentWithIncorrectProlog(t *testing.T) { + file := "testdata/windows-1252-incorrect-prolog.xml" + + f, err := os.Open(file) + if err != nil { + t.Fatalf("Unable to open file: %v", err) + } + + reader, err := CharsetReader("windows-1252", f) + if err != nil { + t.Fatalf("Unable to create reader: %v", err) + } + + data, err := io.ReadAll(reader) + if err != nil { + t.Fatalf("Unable to read data: %v", err) + } + + if !utf8.Valid(data) { + t.Fatalf("Data is not valid UTF-8") + } +} diff --git a/internal/reader/encoding/testdata/invalid-prolog.xml b/internal/reader/encoding/testdata/invalid-prolog.xml new file mode 100644 index 00000000..7c8b1283 --- /dev/null +++ b/internal/reader/encoding/testdata/invalid-prolog.xml @@ -0,0 +1,7 @@ + + + 테스트 피드 + + こんにちは世界 + + \ No newline at end of file diff --git a/internal/reader/encoding/testdata/iso-8859-1.xml b/internal/reader/encoding/testdata/iso-8859-1.xml new file mode 100644 index 00000000..a3d84f97 --- /dev/null +++ b/internal/reader/encoding/testdata/iso-8859-1.xml @@ -0,0 +1,7 @@ + + + + Caf + Prsentation + + \ No newline at end of file diff --git a/internal/reader/encoding/testdata/utf8-incorrect-prolog.xml b/internal/reader/encoding/testdata/utf8-incorrect-prolog.xml new file mode 100644 index 00000000..96590162 --- /dev/null +++ b/internal/reader/encoding/testdata/utf8-incorrect-prolog.xml @@ -0,0 +1,7 @@ + + + 테스트 피드 + + こんにちは世界 + + \ No newline at end of file diff --git a/internal/reader/encoding/testdata/utf8.xml b/internal/reader/encoding/testdata/utf8.xml new file mode 100644 index 00000000..11f10a5a --- /dev/null +++ b/internal/reader/encoding/testdata/utf8.xml @@ -0,0 +1,7 @@ + + + 테스트 피드 + + こんにちは世界 + + \ No newline at end of file diff --git a/internal/reader/encoding/testdata/windows-1252-incorrect-prolog.xml b/internal/reader/encoding/testdata/windows-1252-incorrect-prolog.xml new file mode 100644 index 00000000..6e2eda5f --- /dev/null +++ b/internal/reader/encoding/testdata/windows-1252-incorrect-prolog.xml @@ -0,0 +1,6 @@ + + + + Euro € + + \ No newline at end of file diff --git a/internal/reader/encoding/testdata/windows-1252.xml b/internal/reader/encoding/testdata/windows-1252.xml new file mode 100644 index 00000000..8e1e6c75 --- /dev/null +++ b/internal/reader/encoding/testdata/windows-1252.xml @@ -0,0 +1,6 @@ + + + + Euro + + \ No newline at end of file