`
bishen
  • 浏览: 11905 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

iconv_test.go

阅读更多
package iconv

import (
	"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, EINVAL,
	},
	iconvTest{
		"invalid destination encoding causes EINVAL",
		"", "utf-8",
		"", "doesnotexist",
		0, 0, EINVAL,
	},
	iconvTest{
		"invalid input sequence causes EILSEQ",
		"\xFF", "utf-8",
		"", "latin1",
		0, 0, EILSEQ,
	},
	iconvTest{
		"invalid input causes partial output and EILSEQ",
		"Hello\xFF", "utf-8",
		"Hello", "latin1",
		5, 5, 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)
			}
		}
	}
}
分享到:
评论

相关推荐

    iconv_test.rar

    `iconv_test.rar`提供了一个在Windows环境下利用Visual Studio 2008编译`iconv`库的例子,通过编译生成的`iconvlib.lib`库文件,开发者可以在自己的应用程序中集成`iconv`功能,方便地进行各种字符编码的转换,从而...

    LIBXML_ICONV_Zlib库

    LIBXML_ICONV_Zlib库是用于在C++环境中解析XML文件的一个重要工具集,它结合了libxml2、iconv和zlib这三个组件,为开发者提供了高效且功能强大的XML处理能力。下面将详细介绍这三个组件以及如何在Visual Studio 2010...

    iconv_open出错.txt

    iconv_open("utf-8", "gb2312") 调用失败

    win编码转换_iconv.h

    在Linux下有个iconv.h头文件,里面是对编码转换处理的封装。但在windows下是没有这个头文件的。这里有三个文件,高手编写,用在windows下:iconv.h,iconv.dll和iconv.lib,导出库,就可以用iconv.h了。用法与Linux下...

    本人编译的iconv.so 与其头文件

    我在做一个加密芯片项目...1.如要iconv_open、iconv_close这样的名字,需在iconv.h中加入#define LIBICONV_PLUG即可。 2.如要libiconv_open、libiconv_close这样的名字,需在iconv.h中移除#define LIBICONV_PLUG即可。

    apr-iconv-1.2.1.tar.gz

    而apr-iconv是APR中的一个子项目,专门用于处理字符编码转换,对于开发需要处理多种语言和编码的软件至关重要。本文将深入探讨apr-iconv-1.2.1版本的具体内容和应用。 首先,让我们理解什么是apr-iconv。apr-iconv...

    apr-iconv-1.2.2.tar.gz

    要测APR给tomcat带来的好处最好的方法是在慢速网络上(模拟Internet),将Tomcat线程数开到300以上的水平,然后模拟一大堆并发请求。如果不配APR,基本上300个线程狠快就会用满,以后的请求就只好等待。...

    iconv.h iconv.lib charset.lib

    标题中的"iconv.h iconv.lib charset.lib"指的是在编程过程中使用iconv库时所需的头文件和库...了解并熟练使用`iconv.h`和对应的库文件,可以提升程序处理多语言环境下的文本能力,同时避免因为编码不匹配导致的问题。

    mod_encoding-2.2.0-1.i386.tar.gz

    2、直接解压,看到2个安装包,先安装iconv_hook-1.0.0-1.i386.rpm 3、#rpm -ivh iconv_hook-1.0.0-1.i386.rpm 4、#rpm -ivh mod_encoding-2.2.0-1.i386.rpm 5、检查配置文件httpd.conf,加入以下内容 LoadModule ...

    iconv封装后的cpp接口,含iconv的lib、dll、h文件

    Iconv是一个广泛使用的字符编码转换库,主要用于在不同的字符编码之间进行转换,如从GBK转换到UTF-8。在这个压缩包中,包含了经过封装后的C++接口,使得开发者能够更方便地在C++项目中使用iconv功能。下面将详细介绍...

    Linux CentOS离线环境下安装Apache所需要的完整包

    1. **apr-iconv-1.2.2.tar.gz**:这是一个用于字符集转换的库,Apache HTTP服务器使用它来处理不同编码之间的转换。 APR (Apache Portable Runtime) 的一部分,它提供了跨平台的接口,确保Apache在不同操作系统上的...

    PHP编码转换函数mb_convert_encoding与iconv用法__1.docx

    总的来说,`mb_convert_encoding`提供了更全面的多字节字符支持,而`iconv`则在性能上可能有优势。选择哪个函数取决于具体的应用场景和需求。在处理编码问题时,理解并正确使用这两个函数是确保数据完整性和避免乱码...

    op_xml_out.rar_out

    在C语言中,处理不同的字符集和编码可能需要特定的库支持,例如iconv或 WideCharToMultiByte API。 3. **XML命名规则**:元素和属性的名称必须遵循一定的规则,如不能以数字开头,不能包含某些特殊字符等。`op_xml_...

    TestZxing.rar_ZXing _c# 2d barcode_iconv.c_zxing c_zxing c++

    总的来说,"TestZxing.rar"为C#和C++开发者提供了一个便捷的条码识别解决方案,简化了在这些语言中实现条码扫描功能的过程。通过理解和运用这个移植版本的ZXing库,开发者可以在各种类型的项目中快速集成条码读取...

    iconv.dll 及其 lua 测试文件

    在这个场景下,luaiconv_test可能是用于验证iconv功能是否正常工作,包括读取不同编码的文本文件,转换编码,然后检查转换结果是否正确。 在Windows环境下,执行Lua脚本通常需要一个Lua解释器,比如luajit或lua5.x...

    windows下的iconv静态库

    **iconv库在Windows下的应用** `iconv`是一个用于字符编码转换的库,它在各种操作系统中广泛使用,包括Unix、Linux以及Windows。在Windows环境下,开发人员有时需要处理不同编码之间的转换问题,这时`iconv`库就...

    编码转换支持库2.0#0版(静态版)

    易语言iconv_static.lib支持库中文名为易语言编码转换支持库,本易语言支持库在转换编码时使用 GNU libiconv 1.9.1版,支持现有绝大多数编码和字符集。易语言iconv_static.lib支持库为易语言静态支持库,需要易语言...

    libiconv_1.15.rar

    主要函数如`iconv_open()`用于创建转换描述符,`iconv()`用于实际的编码转换,`iconv_close()`用于关闭转换描述符。 3. **跨平台**:由于libiconv是开源的,它已经被移植到多种操作系统上,如Linux、Unix、Windows...

    Windows_Airsnort.zip_Airsnort windo_Windows_Airsnort.zip_airsnor

    例如,libgtk-0.dll、iconv.dll、libglib-2.0-0.dll等都是Airsnort运行所依赖的基础库,它们提供了图形用户界面和数据处理功能。wlancap.dll则是用于捕获和解析无线网络数据包的关键模块,而Airsnort.exe是主应用...

Global site tag (gtag.js) - Google Analytics