diff --git a/tests/ziptests.nim b/tests/ziptests.nim index b599a5f..f80ff9a 100644 --- a/tests/ziptests.nim +++ b/tests/ziptests.nim @@ -8,6 +8,8 @@ test "can compile zipfiles": test "zipfiles extractAll": var filename = "files/тест.xlsx" + if not fileExists(filename): + filename = "tests/files/тест.xlsx" var z: ZipArchive if not z.open(filename): echo "Opening zip failed" @@ -35,6 +37,11 @@ test "zipfiles read and write using Stream": check: outStream.data == "content" +test "non-zip file raises exception": + expect IOError: + var z: ZipArchive + check (not z.open("zzzzzzzz")) + test "zipfiles read and write archive comment": let filename = getTempDir() / "zipfiles_test_archive.zip" defer: filename.removeFile diff --git a/zip/zipfiles.nim b/zip/zipfiles.nim index 0009ede..d025dc4 100644 --- a/zip/zipfiles.nim +++ b/zip/zipfiles.nim @@ -39,6 +39,14 @@ proc open*(z: var ZipArchive, filename: string, mode: FileMode = fmRead): bool = z.w = zip_open(filename, flags, addr(err)) z.mode = mode result = z.w != nil + if err != 0: + var e: ref IOError + new(e) + var buf = newString(256) + var l = zip_error_to_str(buf.cstring, 256.csize, err.cint, 0) + buf.setLen(l) + e.msg = buf + raise e proc close*(z: var ZipArchive) = ## Closes a zip file.