brane 2003/01/12 14:48:28
Added: test testxlate.c Makefile.win Log: Added some tests for the apr_xlate code, and a makefile that builds the test programs on Windows. Revision Changes Path 1.1 apr-util/test/testxlate.c Index: testxlate.c =================================================================== /* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2000-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */ #include <stdio.h> #include <stdlib.h> #include "apr.h" #include "apr_general.h" #include "apr_errno.h" #include "apr_xlate.h" static const char test_utf8[] = "Edelwei\xc3\x9f"; static const char test_utf7[] = "Edelwei+AN8-"; static const char test_latin1[] = "Edelwei\xdf"; static int check_status (apr_status_t status, const char *msg) { if (!status) { printf("PASS: %s\n", msg); return 0; } else { static char buf[1024]; printf("FAIL: %s\n %s\n", msg, apr_strerror(status, buf, sizeof(buf))); return 1; } } static int test_conversion (apr_xlate_t *convset, const char *inbuf, const char *expected) { static char buf[1024]; int retcode = 0; apr_size_t inbytes_left = strlen(inbuf) + 1; apr_size_t outbytes_left = sizeof(buf) - 1; apr_status_t status = apr_xlate_conv_buffer(convset, inbuf, &inbytes_left, buf, &outbytes_left); retcode |= check_status(status, "apr_xlate_conv_buffer"); if ((!status || APR_STATUS_IS_INCOMPLETE(status)) && strcmp(buf, expected)) { printf("FAIL: expected: '%s'\n actual: '%s'" "\n inbytes_left: %"APR_SIZE_T_FMT"\n", expected, buf, inbytes_left); retcode |= 1; } else { printf("PASS: Expected and actual output match\n"); } return retcode; } int main (int argc, char **argv) { apr_pool_t *pool; apr_xlate_t *convset; apr_status_t status; int retcode = 0; #ifndef APR_HAS_XLATE puts("SKIP: apr_xlate not implemented"); return 0; #endif apr_initialize(); atexit(apr_terminate); apr_pool_create(&pool, NULL); /* 1. Identity transformation: UTF-8 -> UTF-8 */ puts("START: identity transformation"); status = apr_xlate_open(&convset, "UTF-8", "UTF-8", pool); retcode |= check_status(status, "apr_xlate_open(UTF-8, UTF-8)"); if (!status) { retcode |= test_conversion(convset, test_utf8, test_utf8); retcode |= check_status(apr_xlate_close(convset), "apr_xlate_close"); } puts("END: identity transformation"); /* 2. UTF-8 -> ISO-8859-1 */ puts("START: UTF-8 -> ISO-8859-1"); status = apr_xlate_open(&convset, "ISO-8859-1", "UTF-8", pool); retcode |= check_status(status, "apr_xlate_open(ISO-8859-1, UTF-8)"); if (!status) { retcode |= test_conversion(convset, test_utf8, test_latin1); retcode |= check_status(apr_xlate_close(convset), "apr_xlate_close"); } puts("END: UTF-8 -> ISO-8859-1"); /* 3. Transformation using charset aliases */ puts("START: UTF-8 -> UTF-7 (alias)"); status = apr_xlate_open(&convset, "UTF-7", "UTF-8", pool); retcode |= check_status(status, "apr_xlate_open(UTF-7, UTF-8)"); if (!status) { retcode |= test_conversion(convset, test_utf8, test_utf7); retcode |= check_status(apr_xlate_close(convset), "apr_xlate_close"); } puts("END: UTF-8 -> UTF-7 (alias)"); puts("START: UTF-7 (alias) -> UTF-8"); status = apr_xlate_open(&convset, "UTF-8", "UTF-7", pool); retcode |= check_status(status, "apr_xlate_open(UTF-8, UTF-7)"); if (!status) { retcode |= test_conversion(convset, test_utf7, test_utf8); retcode |= check_status(apr_xlate_close(convset), "apr_xlate_close"); } puts("END: UTF-7 (alias) -> UTF-8"); return retcode; } 1.1 apr-util/test/Makefile.win Index: Makefile.win =================================================================== # -*- Makefile -*- !IF "$(OS)" == "Windows_NT" NULL= rmdir=rd /s /q !ELSE NULL=nul rmdir=deltree /y !ENDIF SILENT=@ # Default build and bind modes BUILD_MODE = release BIND_MODE = shared !IF "$(BUILD_MODE)" == "release" || "$(BUILD_MODE)" == "Release" !IF "$(BIND_MODE)" == "shared" # release shared APR_LIB_PFX = $(APR_SOURCE)\Release\lib APU_LIB_PFX = $(APU_SOURCE)\Release\lib API_LIB_PFX = $(API_SOURCE)\Release\lib CFG_CFLAGS = /MD /O2 CFG_DEFINES = /D "NDEBUG" CFG_OUTPUT = Release !ELSE !IF "$(BIND_MODE)" == "static" # release static APR_LIB_PFX = $(APR_SOURCE)\LibR\ # no line continuation APU_LIB_PFX = $(APU_SOURCE)\LibR\ # no line continuation API_LIB_PFX = $(API_SOURCE)\LibR\ # no line continuation CFG_CFLAGS = /MD /O2 CFG_DEFINES = /D "NDEBUG" /D "APR_DECLARE_STATIC" \ /D "APU_DECLARE_STATIC" /D "API_DECLARE_STATIC" CFG_API_LIB = $(API_LIB_PFX)apriconv.lib CFG_OUTPUT = LibR !ELSE !ERROR Unknown bind mode "$(BIND_MODE)" !ENDIF !ENDIF !ELSE !IF "$(BUILD_MODE)" == "debug" || "$(BUILD_MODE)" == "Debug" !IF "$(BIND_MODE)" == "shared" # debug shared APR_LIB_PFX = $(APR_SOURCE)\Debug\lib APU_LIB_PFX = $(APU_SOURCE)\Debug\lib API_LIB_PFX = $(API_SOURCE)\Debug\lib CFG_CFLAGS = /MDd /Zi /Od CFG_DEFINES = /D "_DEBUG" CFG_LDFLAGS = /DEBUG CFG_OUTPUT = Debug !ELSE !IF "$(BIND_MODE)" == "static" # debug static APR_LIB_PFX = $(APR_SOURCE)\LibD\ # no line continuation APU_LIB_PFX = $(APU_SOURCE)\LibD\ # no line continuation API_LIB_PFX = $(API_SOURCE)\LibD\ # no line continuation CFG_CFLAGS = /MDd /Zi /Od CFG_DEFINES = /D "_DEBUG" /D "APR_DECLARE_STATIC" \ /D "APU_DECLARE_STATIC" /D "API_DECLARE_STATIC" CFG_LDFLAGS = /DEBUG CFG_API_LIB = $(API_LIB_PFX)apriconv.lib CFG_OUTPUT = LibD !ELSE !ERROR Unknown bind mode "$(BIND_MODE)" !ENDIF !ENDIF !ELSE !ERROR Unknown build mode "$(BUILD_MODE)" !ENDIF !ENDIF APR_SOURCE = ..\..\apr APU_SOURCE = .. API_SOURCE = ..\..\apr-iconv OUTPUT_DIR = .\$(CFG_OUTPUT) INT_CFLAGS = /nologo $(CFG_CFLAGS) /Fp"$(OUTPUT_DIR)\iconv.pch" /YX"iconv.h" INT_INCLUDES = /I "$(APU_SOURCE)\include" /I "$(APR_SOURCE)\include" # /I "$(API_SOURCE)\include" INT_DEFINES = /D "WIN32" /D "_CONSOLE" /D "_MBCS" $(CFG_DEFINES) INT_LDFLAGS = /nologo /incremental:no /subsystem:console $(CFG_LDFLAGS) CFLAGS = /W3 ALL_CFLAGS = $(INT_CFLAGS) $(INT_INCLUDES) $(INT_DEFINES) $(CFLAGS) LDFLAGS = /WARN:0 ALL_LDFLAGS = $(INT_LDFLAGS) $(LDFLAGS) .c{$(OUTPUT_DIR)}.exe: -$(SILENT)if not exist "$(OUTPUT_DIR)\$(NULL)" mkdir "$(OUTPUT_DIR)" $(SILENT)echo Compiling and linking [EMAIL PROTECTED] $(SILENT)cl $(ALL_CFLAGS) /Fo"$*.obj" /Fd"$*" $< \ /link $(ALL_LDFLAGS) /out:$@ \ "$(APU_LIB_PFX)aprutil.lib" \ "$(APR_LIB_PFX)apr.lib" \ "$(CFG_API)" \ kernel32.lib advapi32.lib ws2_32.lib mswsock.lib ##!ALL_TARGETS = $(OUTPUT_DIR)\testdate.exe \ ##! $(OUTPUT_DIR)\testdbm.exe \ ##! $(OUTPUT_DIR)\testmd4.exe \ ##! $(OUTPUT_DIR)\testmd5.exe \ ##! $(OUTPUT_DIR)\testqueue.exe \ ##! $(OUTPUT_DIR)\testreslist.exe \ ##! $(OUTPUT_DIR)\testrmm.exe \ ##! $(OUTPUT_DIR)\teststrmatch.exe \ ##! $(OUTPUT_DIR)\testuri.exe \ ##! $(OUTPUT_DIR)\testuuid.exe \ ##! $(OUTPUT_DIR)\testxlate.exe \ ##! $(OUTPUT_DIR)\testxml.exe ALL_TARGETS = $(OUTPUT_DIR)\testxlate.exe all: $(ALL_TARGETS) clean: -$(SILENT)if exist "$(OUTPUT_DIR)/$(NULL)" $(rmdir) $(OUTPUT_DIR)
