Skip to content

Commit

Permalink
[Test] Add basic API tests for BitAbstractArchiveCreator
Browse files Browse the repository at this point in the history
  • Loading branch information
rikyoz committed Oct 15, 2023
1 parent cfe1687 commit 2cba761
Show file tree
Hide file tree
Showing 3 changed files with 221 additions and 190 deletions.
1 change: 1 addition & 0 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ set( SOURCE_FILES
# public API test sources
set( PUBLIC_API_SOURCE_FILES
src/test_bit7zlibrary.cpp
src/test_bitabstractarchivecreator.cpp
src/test_bitarchiveeditor.cpp
src/test_bitarchivereader.cpp
src/test_bitarchivewriter.cpp
Expand Down
219 changes: 219 additions & 0 deletions tests/src/test_bitabstractarchivecreator.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,219 @@
// This is an open source non-commercial project. Dear PVS-Studio, please check it.
// PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com

/*
* bit7z - A C++ static library to interface with the 7-zip shared libraries.
* Copyright (c) 2014-2023 Riccardo Ostani - All Rights Reserved.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
#include <catch2/catch.hpp>

#include <bit7z/bitfilecompressor.hpp>
#include <bit7z/bitmemcompressor.hpp>
#include <bit7z/bitstreamcompressor.hpp>

#include "utils/shared_lib.hpp"

using namespace bit7z;
using bit7z::Bit7zLibrary;
using bit7z::BitFileCompressor;
using bit7z::BitMemCompressor;
using bit7z::BitStreamCompressor;
using bit7z::BitInOutFormat;

struct TestOutputFormat {
const char* name;
const BitInOutFormat& format; // NOLINT(cppcoreguidelines-avoid-const-or-ref-data-members)
};

TEMPLATE_TEST_CASE( "BitAbstractArchiveCreator: Basic API tests",
"[bitabstractarchivecreator]", BitFileCompressor, BitMemCompressor, BitStreamCompressor ) {
const Bit7zLibrary lib{ test::sevenzip_lib_path() };

SECTION( "setPassword(...) / password() / cryptHeaders()" ) {
TestType compressor( lib, BitFormat::SevenZip );
REQUIRE( compressor.password().empty() );
REQUIRE( !compressor.cryptHeaders() );

compressor.setPassword( BIT7Z_STRING( "ciao" ) );
REQUIRE( compressor.password() == BIT7Z_STRING( "ciao" ) );
REQUIRE( !compressor.cryptHeaders() );

compressor.setPassword( BIT7Z_STRING( "mondo" ), true );
REQUIRE( compressor.password() == BIT7Z_STRING( "mondo" ) );
REQUIRE( compressor.cryptHeaders() );

compressor.setPassword( BIT7Z_STRING( "hello" ) );
REQUIRE( compressor.password() == BIT7Z_STRING( "hello" ) );
REQUIRE( compressor.cryptHeaders() );

compressor.setPassword( BIT7Z_STRING( "" ) );
REQUIRE( compressor.password().empty() );
REQUIRE( !compressor.cryptHeaders() );

BitAbstractArchiveHandler& handler = compressor;
handler.setPassword( BIT7Z_STRING( "world!" ) );
REQUIRE( compressor.password() == BIT7Z_STRING( "world!" ) );
REQUIRE( !compressor.cryptHeaders() );

compressor.setPassword( BIT7Z_STRING( "foo" ), true );
handler.setPassword( BIT7Z_STRING( "" ) );
REQUIRE( compressor.password().empty() );
REQUIRE( !compressor.cryptHeaders() );
}

SECTION( "compressionFormat()" ) {
const auto testFormat = GENERATE( as< TestOutputFormat >(),
TestOutputFormat{ "ZIP", BitFormat::Zip },
TestOutputFormat{ "BZIP2", BitFormat::BZip2 },
TestOutputFormat{ "7Z", BitFormat::SevenZip },
TestOutputFormat{ "XZ", BitFormat::Xz },
TestOutputFormat{ "WIM", BitFormat::Wim },
TestOutputFormat{ "TAR", BitFormat::Tar },
TestOutputFormat{ "GZIP", BitFormat::GZip } );
DYNAMIC_SECTION( "Format: " << testFormat.name ) {
const TestType compressor{ lib, testFormat.format };
REQUIRE( compressor.compressionFormat() == testFormat.format );
}
}

SECTION( "setCompressionLevel(...) / compressionLevel()" ) {
TestType compressor( lib, BitFormat::SevenZip );
REQUIRE( compressor.compressionLevel() == BitCompressionLevel::Normal );
compressor.setCompressionLevel( BitCompressionLevel::None );
REQUIRE( compressor.compressionLevel() == BitCompressionLevel::None );
compressor.setCompressionLevel( BitCompressionLevel::Fastest );
REQUIRE( compressor.compressionLevel() == BitCompressionLevel::Fastest );
compressor.setCompressionLevel( BitCompressionLevel::Fast );
REQUIRE( compressor.compressionLevel() == BitCompressionLevel::Fast );
compressor.setCompressionLevel( BitCompressionLevel::Normal );
REQUIRE( compressor.compressionLevel() == BitCompressionLevel::Normal );
compressor.setCompressionLevel( BitCompressionLevel::Max );
REQUIRE( compressor.compressionLevel() == BitCompressionLevel::Max );
compressor.setCompressionLevel( BitCompressionLevel::Ultra );
REQUIRE( compressor.compressionLevel() == BitCompressionLevel::Ultra );
}

SECTION( "setCompressionMethod(...) / compressionMethod()" ) {
SECTION( "7Z Compression Methods" ) {
TestType compressor( lib, BitFormat::SevenZip );
REQUIRE( compressor.compressionMethod() == BitCompressionMethod::Lzma2 );
compressor.setCompressionMethod( BitCompressionMethod::Copy );
REQUIRE( compressor.compressionMethod() == BitCompressionMethod::Copy );
compressor.setCompressionMethod( BitCompressionMethod::Lzma );
REQUIRE( compressor.compressionMethod() == BitCompressionMethod::Lzma );
compressor.setCompressionMethod( BitCompressionMethod::Lzma2 );
REQUIRE( compressor.compressionMethod() == BitCompressionMethod::Lzma2 );
compressor.setCompressionMethod( BitCompressionMethod::Ppmd );
REQUIRE( compressor.compressionMethod() == BitCompressionMethod::Ppmd );
compressor.setCompressionMethod( BitCompressionMethod::BZip2 );
REQUIRE( compressor.compressionMethod() == BitCompressionMethod::BZip2 );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::Deflate ) );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::Deflate64 ) );
}

SECTION( "ZIP Compression Methods" ) {
TestType compressor( lib, BitFormat::Zip );
REQUIRE( compressor.compressionMethod() == BitCompressionMethod::Deflate );
compressor.setCompressionMethod( BitCompressionMethod::Copy );
REQUIRE( compressor.compressionMethod() == BitCompressionMethod::Copy );
compressor.setCompressionMethod( BitCompressionMethod::Deflate );
REQUIRE( compressor.compressionMethod() == BitCompressionMethod::Deflate );
compressor.setCompressionMethod( BitCompressionMethod::Deflate64 );
REQUIRE( compressor.compressionMethod() == BitCompressionMethod::Deflate64 );
compressor.setCompressionMethod( BitCompressionMethod::BZip2 );
REQUIRE( compressor.compressionMethod() == BitCompressionMethod::BZip2 );
compressor.setCompressionMethod( BitCompressionMethod::Lzma );
REQUIRE( compressor.compressionMethod() == BitCompressionMethod::Lzma );
compressor.setCompressionMethod( BitCompressionMethod::Ppmd );
REQUIRE( compressor.compressionMethod() == BitCompressionMethod::Ppmd );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::Lzma2 ) );
}

SECTION( "BZIP2 Compression Methods" ) {
TestType compressor( lib, BitFormat::BZip2 );
REQUIRE( compressor.compressionMethod() == BitCompressionMethod::BZip2 );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::Copy ) );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::Lzma ) );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::Lzma2 ) );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::Ppmd ) );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::Deflate ) );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::Deflate64 ) );
REQUIRE_NOTHROW( compressor.setCompressionMethod( BitCompressionMethod::BZip2 ) );
REQUIRE( compressor.compressionMethod() == BitCompressionMethod::BZip2 );
}

SECTION( "GZIP Compression Methods" ) {
TestType compressor( lib, BitFormat::GZip );
REQUIRE( compressor.compressionMethod() == BitCompressionMethod::Deflate );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::Copy ) );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::Lzma ) );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::Lzma2 ) );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::Ppmd ) );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::BZip2 ) );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::Deflate64 ) );
REQUIRE_NOTHROW( compressor.setCompressionMethod( BitCompressionMethod::Deflate ) );
REQUIRE( compressor.compressionMethod() == BitCompressionMethod::Deflate );
}

SECTION( "TAR Compression Methods" ) {
TestType compressor( lib, BitFormat::Tar );
REQUIRE( compressor.compressionMethod() == BitCompressionMethod::Copy );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::Lzma ) );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::Lzma2 ) );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::Ppmd ) );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::BZip2 ) );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::Deflate ) );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::Deflate64 ) );
REQUIRE_NOTHROW( compressor.setCompressionMethod( BitCompressionMethod::Copy ) );
REQUIRE( compressor.compressionMethod() == BitCompressionMethod::Copy );
}

SECTION( "WIM Compression Methods" ) {
TestType compressor( lib, BitFormat::Wim );
REQUIRE( compressor.compressionMethod() == BitCompressionMethod::Copy );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::Lzma ) );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::Lzma2 ) );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::Ppmd ) );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::BZip2 ) );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::Deflate ) );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::Deflate64 ) );
REQUIRE_NOTHROW( compressor.setCompressionMethod( BitCompressionMethod::Copy ) );
REQUIRE( compressor.compressionMethod() == BitCompressionMethod::Copy );
}

SECTION( "XZ Compression Methods" ) {
TestType compressor( lib, BitFormat::Xz );
REQUIRE( compressor.compressionMethod() == BitCompressionMethod::Lzma2 );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::Copy ) );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::Lzma ) );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::Ppmd ) );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::BZip2 ) );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::Deflate ) );
REQUIRE_THROWS( compressor.setCompressionMethod( BitCompressionMethod::Deflate64 ) );
REQUIRE_NOTHROW( compressor.setCompressionMethod( BitCompressionMethod::Lzma2 ) );
REQUIRE( compressor.compressionMethod() == BitCompressionMethod::Lzma2 );
}
}

SECTION( "setSolidMode(...) / solidMode()" ) {
TestType compressor( lib, BitFormat::SevenZip );
REQUIRE( !compressor.solidMode() );

compressor.setSolidMode( true );
REQUIRE( compressor.solidMode() );

compressor.setSolidMode( false );
REQUIRE( !compressor.solidMode() );
}

SECTION( "setVolumeSize(...) / volumeSize()" ) {
TestType compressor( lib, BitFormat::SevenZip );
REQUIRE( compressor.volumeSize() == 0u );
compressor.setVolumeSize( 1024u );
REQUIRE( compressor.volumeSize() == 1024u );
}
}
Loading

0 comments on commit 2cba761

Please sign in to comment.