소스 검색

test(encoding): add more tests regarding CharsetReader

Frédéric Guillot 4 달 전
부모
커밋
8898c42f24
1개의 변경된 파일83개의 추가작업 그리고 0개의 파일을 삭제
  1. 83 0
      internal/reader/encoding/encoding_test.go

+ 83 - 0
internal/reader/encoding/encoding_test.go

@@ -9,6 +9,8 @@ import (
 	"os"
 	"testing"
 	"unicode/utf8"
+
+	"golang.org/x/text/encoding/charmap"
 )
 
 func TestCharsetReaderWithUTF8(t *testing.T) {
@@ -346,3 +348,84 @@ func TestNewReaderWithUTF8DocumentWithMetaAfter1024Bytes(t *testing.T) {
 		t.Fatalf("Data does not contain expected unicode string: %s", expectedUnicodeString)
 	}
 }
+
+func TestCharsetReaderWithKOI8RLabel(t *testing.T) {
+	expectedUnicodeString := "Привет мир"
+
+	input, err := charmap.KOI8R.NewEncoder().Bytes([]byte(expectedUnicodeString))
+	if err != nil {
+		t.Fatalf("Unable to build KOI8-R input: %v", err)
+	}
+
+	reader, err := CharsetReader("koi8-r", bytes.NewReader(input))
+	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")
+	}
+
+	if string(data) != expectedUnicodeString {
+		t.Fatalf("Data does not match expected unicode string, got %q expected %q", string(data), expectedUnicodeString)
+	}
+}
+
+func TestCharsetReaderWithUppercaseKOI8RLabel(t *testing.T) {
+	expectedUnicodeString := "Привет мир"
+
+	input, err := charmap.KOI8R.NewEncoder().Bytes([]byte(expectedUnicodeString))
+	if err != nil {
+		t.Fatalf("Unable to build KOI8-R input: %v", err)
+	}
+
+	reader, err := CharsetReader("KOI8-R", bytes.NewReader(input))
+	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")
+	}
+
+	if string(data) != expectedUnicodeString {
+		t.Fatalf("Data does not match expected unicode string, got %q expected %q", string(data), expectedUnicodeString)
+	}
+}
+
+func TestNewCharsetReaderWithKOI8RContentType(t *testing.T) {
+	expectedUnicodeString := "Привет мир"
+
+	input, err := charmap.KOI8R.NewEncoder().Bytes([]byte(expectedUnicodeString))
+	if err != nil {
+		t.Fatalf("Unable to build KOI8-R input: %v", err)
+	}
+
+	reader, err := NewCharsetReader(bytes.NewReader(input), "text/xml; charset=koi8-r")
+	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")
+	}
+
+	if string(data) != expectedUnicodeString {
+		t.Fatalf("Data does not match expected unicode string, got %q expected %q", string(data), expectedUnicodeString)
+	}
+}