|
- package iconv
-
- import (
- "syscall"
- "testing"
- )
-
- type iconvTest struct {
- description string
- input string
- inputEncoding string
- output string
- outputEncoding string
- bytesRead int
- bytesWritten int
- err error
- }
-
- var iconvTests = []iconvTest{
- iconvTest{
- "simple utf-8 to latin1 conversion success",
- "Hello World!", "utf-8",
- "Hello World!", "latin1",
- 12, 12, nil,
- },
- iconvTest{
- "invalid source encoding causes EINVAL",
- "", "doesnotexist",
- "", "utf-8",
- 0, 0, syscall.EINVAL,
- },
- iconvTest{
- "invalid destination encoding causes EINVAL",
- "", "utf-8",
- "", "doesnotexist",
- 0, 0, syscall.EINVAL,
- },
- iconvTest{
- "invalid input sequence causes EILSEQ",
- "\xFF", "utf-8",
- "", "latin1",
- 0, 0, syscall.EILSEQ,
- },
- iconvTest{
- "invalid input causes partial output and EILSEQ",
- "Hello\xFF", "utf-8",
- "Hello", "latin1",
- 5, 5, syscall.EILSEQ,
- },
- }
-
- func TestConvertString(t *testing.T) {
- for _, test := range iconvTests {
- // perform the conversion
- output, err := ConvertString(test.input, test.inputEncoding, test.outputEncoding)
-
- // check that output and err match
- if output != test.output {
- t.Errorf("test \"%s\" failed, output did not match expected", test.description)
- }
-
- // check that err is same as expected
- if err != test.err {
- if test.err != nil {
- if err != nil {
- t.Errorf("test \"%s\" failed, got %s when expecting %s", test.description, err, test.err)
- } else {
- t.Errorf("test \"%s\" failed, got nil when expecting %s", test.description, test.err)
- }
- } else {
- t.Errorf("test \"%s\" failed, got unexpected error: %s", test.description, err)
- }
- }
- }
- }
-
- func TestConvert(t *testing.T) {
- for _, test := range iconvTests {
- // setup input buffer
- input := []byte(test.input)
-
- // setup a buffer as large as the expected bytesWritten
- output := make([]byte, 50)
-
- // peform the conversion
- bytesRead, bytesWritten, err := Convert(input, output, test.inputEncoding, test.outputEncoding)
-
- // check that bytesRead is same as expected
- if bytesRead != test.bytesRead {
- t.Errorf("test \"%s\" failed, bytesRead did not match expected", test.description)
- }
-
- // check that bytesWritten is same as expected
- if bytesWritten != test.bytesWritten {
- t.Errorf("test \"%s\" failed, bytesWritten did not match expected", test.description)
- }
-
- // check output bytes against expected - simplest to convert output to
- // string and then do an equality check which is actually a byte wise operation
- if string(output[:bytesWritten]) != test.output {
- t.Errorf("test \"%s\" failed, output did not match expected", test.description)
- }
-
- // check that err is same as expected
- if err != test.err {
- if test.err != nil {
- if err != nil {
- t.Errorf("test \"%s\" failed, got %s when expecting %s", test.description, err, test.err)
- } else {
- t.Errorf("test \"%s\" failed, got nil when expecting %s", test.description, test.err)
- }
- } else {
- t.Errorf("test \"%s\" failed, got unexpected error: %s", test.description, err)
- }
- }
- }
- }
|