Mercurial > code
diff C++/Tests/Zip/main.cpp @ 281:88f9d8b406c6
Add Zip, safe wrapper around libzip
author | David Demelier <markand@malikania.fr> |
---|---|
date | Tue, 11 Nov 2014 14:03:42 +0100 |
parents | |
children | 2ff6559c5f1d |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/C++/Tests/Zip/main.cpp Tue Nov 11 14:03:42 2014 +0100 @@ -0,0 +1,85 @@ +/* + * main.cpp -- test the zip wrapper functions + * + * Copyright (c) 2013, 2014 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <gtest/gtest.h> + +#include <ZipArchive.h> + +using namespace source; + +TEST(Basic, stat) +{ + try { + ZipArchive archive{SOURCE "/data/stats.zip"}; + ZipStat stats = archive.stat("README"); + + ASSERT_EQ(static_cast<decltype(stats.size)>(15), stats.size); + ASSERT_STREQ("README", stats.name); + } catch (const std::exception &ex) { + std::cerr << ex.what() << std::endl; + } +} + +TEST(Basic, read) +{ + try { + ZipArchive archive{SOURCE "/data/stats.zip"}; + + auto file = archive.open("README"); + auto stats = archive.stat("README"); + auto text = file.read(stats.size); + + ASSERT_EQ("This is a test\n", text); + } catch (const std::exception &ex) { + std::cerr << "warning: " << ex.what() << std::endl; + } +} + +TEST(Basic, write) +{ + remove(BINARY "/output.zip"); + + // Open first and save some data + try { + ZipArchive archive{BINARY "/output.zip", ZIP_CREATE}; + + archive.add(Buffer{"hello world!"}, "DATA"); + } catch (const std::exception &ex) { + std::cerr << "warning: " << ex.what() << std::endl; + } + + try { + ZipArchive archive{BINARY "/output.zip"}; + + auto stats = archive.stat("DATA"); + auto file = archive.open("DATA"); + auto content = file.read(stats.size); + + ASSERT_EQ(static_cast<decltype(stats.size)>(12), stats.size); + ASSERT_EQ("hello world!", content); + } catch (const std::exception &ex) { + std::cerr << "warning: " << ex.what() << std::endl; + } +} + +int main(int argc, char **argv) +{ + testing::InitGoogleTest(&argc, argv); + + return RUN_ALL_TESTS(); +}