74 lines
1.9 KiB
Go
74 lines
1.9 KiB
Go
package helpers
|
|
|
|
import (
|
|
"bytes"
|
|
"strings"
|
|
"testing"
|
|
"unicode/utf16"
|
|
)
|
|
|
|
func TestGenerateMetadata(t *testing.T) {
|
|
r := strings.NewReader("This is my test content")
|
|
m, err := GenerateMetadata(r)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
expectedSha256sum := "966152d20a77e739716a625373ee15af16e8f4aec631a329a27da41c204b0171"
|
|
if m.Sha256sum != expectedSha256sum {
|
|
t.Fatalf("Sha256sum was %q instead of expected value of %q", m.Sha256sum, expectedSha256sum)
|
|
}
|
|
|
|
expectedMimetype := "text/plain; charset=utf-8"
|
|
if m.Mimetype != expectedMimetype {
|
|
t.Fatalf("Mimetype was %q instead of expected value of %q", m.Mimetype, expectedMimetype)
|
|
}
|
|
|
|
expectedSize := int64(23)
|
|
if m.Size != expectedSize {
|
|
t.Fatalf("Size was %d instead of expected value of %d", m.Size, expectedSize)
|
|
}
|
|
}
|
|
|
|
func TestTextCharsets(t *testing.T) {
|
|
// verify that different text encodings are detected and passed through
|
|
orig := "This is a text string"
|
|
utf16 := utf16.Encode([]rune(orig))
|
|
utf16LE := make([]byte, len(utf16)*2+2)
|
|
utf16BE := make([]byte, len(utf16)*2+2)
|
|
utf8 := []byte(orig)
|
|
utf16LE[0] = 0xff
|
|
utf16LE[1] = 0xfe
|
|
utf16BE[0] = 0xfe
|
|
utf16BE[1] = 0xff
|
|
for i := 0; i < len(utf16); i++ {
|
|
lsb := utf16[i] & 0xff
|
|
msb := utf16[i] >> 8
|
|
utf16LE[i*2+2] = byte(lsb)
|
|
utf16LE[i*2+3] = byte(msb)
|
|
utf16BE[i*2+2] = byte(msb)
|
|
utf16BE[i*2+3] = byte(lsb)
|
|
}
|
|
|
|
testcases := []struct {
|
|
data []byte
|
|
extension string
|
|
mimetype string
|
|
}{
|
|
{mimetype: "text/plain; charset=utf-8", data: utf8},
|
|
{mimetype: "text/plain; charset=utf-16le", data: utf16LE},
|
|
{mimetype: "text/plain; charset=utf-16be", data: utf16BE},
|
|
}
|
|
|
|
for i, testcase := range testcases {
|
|
r := bytes.NewReader(testcase.data)
|
|
m, err := GenerateMetadata(r)
|
|
if err != nil {
|
|
t.Fatalf("[%d] unexpected error return %v\n", i, err)
|
|
}
|
|
if m.Mimetype != testcase.mimetype {
|
|
t.Errorf("[%d] Expected mimetype '%s', got mimetype '%s'\n", i, testcase.mimetype, m.Mimetype)
|
|
}
|
|
}
|
|
}
|