11package helpers
22
33import (
4+ "bytes"
45 "strings"
56 "testing"
7+ "unicode/utf16"
68)
79
810func TestGenerateMetadata (t * testing.T ) {
@@ -17,7 +19,7 @@ func TestGenerateMetadata(t *testing.T) {
1719 t .Fatalf ("Sha256sum was %q instead of expected value of %q" , m .Sha256sum , expectedSha256sum )
1820 }
1921
20- expectedMimetype := "text/plain"
22+ expectedMimetype := "text/plain; charset=utf-8 "
2123 if m .Mimetype != expectedMimetype {
2224 t .Fatalf ("Mimetype was %q instead of expected value of %q" , m .Mimetype , expectedMimetype )
2325 }
@@ -27,3 +29,45 @@ func TestGenerateMetadata(t *testing.T) {
2729 t .Fatalf ("Size was %d instead of expected value of %d" , m .Size , expectedSize )
2830 }
2931}
32+
33+ func TestTextCharsets (t * testing.T ) {
34+ // verify that different text encodings are detected and passed through
35+ orig := "This is a text string"
36+ utf16 := utf16 .Encode ([]rune (orig ))
37+ utf16LE := make ([]byte , len (utf16 )* 2 + 2 )
38+ utf16BE := make ([]byte , len (utf16 )* 2 + 2 )
39+ utf8 := []byte (orig )
40+ utf16LE [0 ] = 0xff
41+ utf16LE [1 ] = 0xfe
42+ utf16BE [0 ] = 0xfe
43+ utf16BE [1 ] = 0xff
44+ for i := 0 ; i < len (utf16 ); i ++ {
45+ lsb := utf16 [i ] & 0xff
46+ msb := utf16 [i ] >> 8
47+ utf16LE [i * 2 + 2 ] = byte (lsb )
48+ utf16LE [i * 2 + 3 ] = byte (msb )
49+ utf16BE [i * 2 + 2 ] = byte (msb )
50+ utf16BE [i * 2 + 3 ] = byte (lsb )
51+ }
52+
53+ testcases := []struct {
54+ data []byte
55+ extension string
56+ mimetype string
57+ }{
58+ {mimetype : "text/plain; charset=utf-8" , data : utf8 },
59+ {mimetype : "text/plain; charset=utf-16le" , data : utf16LE },
60+ {mimetype : "text/plain; charset=utf-16be" , data : utf16BE },
61+ }
62+
63+ for i , testcase := range testcases {
64+ r := bytes .NewReader (testcase .data )
65+ m , err := GenerateMetadata (r )
66+ if err != nil {
67+ t .Fatalf ("[%d] unexpected error return %v\n " , i , err )
68+ }
69+ if m .Mimetype != testcase .mimetype {
70+ t .Errorf ("[%d] Expected mimetype '%s', got mimetype '%s'\n " , i , testcase .mimetype , m .Mimetype )
71+ }
72+ }
73+ }
0 commit comments