Add name_locate regression test, and adapt open.c for test.zip change. --HG-- branch : HEAD
diff --git a/regress/Makefile.am b/regress/Makefile.am index e1f1b8d..d37c5be 100644 --- a/regress/Makefile.am +++ b/regress/Makefile.am
@@ -1,4 +1,4 @@ -noinst_PROGRAMS=buffadd open +noinst_PROGRAMS=buffadd open name_locate EXTRA_PROGRAMS=ziptest deltest EXTRA_DIST=test.zip @@ -7,7 +7,7 @@ buffadd_SOURCES=buffadd.c ziptest_SOURCES=ziptest.c -TESTS=buffadd open +TESTS=buffadd open name_locate AM_CPPFLAGS=-I${top_srcdir}/lib LDADD=../lib/libzip.la
diff --git a/regress/name_locate.c b/regress/name_locate.c new file mode 100644 index 0000000..74c4319 --- /dev/null +++ b/regress/name_locate.c
@@ -0,0 +1,118 @@ +/* + $NiH$ + + name_locate.c -- test cases for finding files in zip archives + Copyright (C) 2005 Dieter Baron and Thomas Klausner + + This file is part of libzip, a library to manipulate ZIP archives. + The authors can be contacted at <nih@giga.or.at> + + 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 names of the authors may not be used to endorse or promote + products derived from this software without specific prior + written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS + 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 AUTHORS 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. +*/ + + + +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> + +#include "zip.h" + +#define TEST_ZIP "test.zip" + +int find_fail(struct zip *, const char *, int, int); +int find_success(struct zip *, const char *, int); + + + +int +main(int argc, char *argv[]) +{ + int fail, ze; + struct zip *z; + + fail = 0; + + if ((z=zip_open(TEST_ZIP, 0, &ze)) == NULL) { + printf("fail: opening zip archive ``%s'' failed (%d)\n", + TEST_ZIP, ze); + return 1; + } + + fail += find_fail(z, "nosuchfile", 0, ZIP_ER_NOENT); + fail += find_success(z, "test", 0); + fail += find_fail(z, "TeSt", 0, ZIP_ER_NOENT); + fail += find_success(z, "TeSt", ZIP_FL_NOCASE); + fail += find_success(z, "testdir/test2", 0); + fail += find_success(z, "tesTdir/tESt2", ZIP_FL_NOCASE); + fail += find_fail(z, "testdir/test2", ZIP_FL_NODIR, ZIP_ER_NOENT); + fail += find_fail(z, "tesTdir/tESt2", ZIP_FL_NOCASE|ZIP_FL_NODIR, + ZIP_ER_NOENT); + fail += find_fail(z, "test2", 0, ZIP_ER_NOENT); + fail += find_success(z, "test2", ZIP_FL_NODIR); + fail += find_success(z, "TeST2", ZIP_FL_NODIR|ZIP_FL_NOCASE); + + exit(fail ? 1 : 0); +} + + + +int +find_fail(struct zip *z, const char *name, int flags, int zerr) +{ + int ret, ze, se; + char expected[80]; + + if ((ret=zip_name_locate(z, name, flags)) < 0) { + zip_error_get(z, &ze, &se); + if (ze != zerr) { + zip_error_to_str(expected, sizeof(expected), zerr, 0); + printf("unexpected error while looking for ``%s'': " + "got ``%s'', expected ``%s''\n", name, zip_strerror(z), + expected); + return 1; + } + + return 0; + } + + return 1; +} + + + +int +find_success(struct zip *z, const char *name, int flags) +{ + + if (zip_name_locate(z, name, flags) < 0) { + printf("unexpected error while looking for ``%s'': %s\n", + name, zip_strerror(z)); + return 1; + } + + return 0; +}
diff --git a/regress/open.c b/regress/open.c index db364de..750e773 100644 --- a/regress/open.c +++ b/regress/open.c
@@ -1,5 +1,5 @@ /* - $NiH: open.c,v 1.2 2004/04/14 14:01:30 dillo Exp $ + $NiH: open.c,v 1.3 2004/11/17 21:55:17 wiz Exp $ open.c -- test cases for opening zip archives Copyright (C) 1999, 2003 Dieter Baron and Thomas Klausner @@ -62,7 +62,7 @@ /* ZIP_ER_SEEK */ /* ZIP_ER_INCONS */ - fail += open_success("test.zip", 0, "existing", 1); + fail += open_success("test.zip", 0, "existing", 3); fail += open_success("nosuchfile", ZIP_CREATE, "new", 0); exit(fail ? 1 : 0);
diff --git a/regress/test.zip b/regress/test.zip index 69ff08a..e4efd71 100644 --- a/regress/test.zip +++ b/regress/test.zip Binary files differ