Skip to content

Commit

Permalink
Improve tests of BitArchiveReader
Browse files Browse the repository at this point in the history
  • Loading branch information
rikyoz committed Nov 2, 2023
1 parent 4dff555 commit 8018cdc
Showing 1 changed file with 35 additions and 27 deletions.
62 changes: 35 additions & 27 deletions tests/src/test_bitarchivereader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ static_assert( std::is_move_assignable< BitArchiveItemInfo >::value,
"BitArchiveItemInfo is not move-assignable." );

void require_archive_tests( const BitArchiveReader& info, const source_location& location ) {
INFO( "Failed while testing the archive ");
INFO( " from " << location.file_name() << ":" << location.line() );
#ifdef BIT7Z_BUILD_FOR_P7ZIP
const auto& detectedFormat = (info).detectedFormat();
if ( detectedFormat == BitFormat::Rar || detectedFormat == BitFormat::Rar5 ) {
Expand All @@ -85,6 +87,9 @@ void require_archive_tests( const BitArchiveReader& info, const source_location&
REQUIRE_THROWS_AS( ( info ).testItem( ( info ).itemsCount() ), BitException );
}

#define REQUIRE_ARCHIVE_TESTS( info ) \
require_archive_tests( info, BIT7Z_CURRENT_LOCATION )

void require_archive_item( const BitInFormat& format,
const BitArchiveItem& item,
const ArchivedItem& expectedItem,
Expand Down Expand Up @@ -115,6 +120,9 @@ void require_archive_item( const BitInFormat& format,
}
}

#define REQUIRE_ARCHIVE_ITEM( format, item, expectedItem ) \
require_archive_item( format, item, expectedItem, BIT7Z_CURRENT_LOCATION )

inline void require_archive_content( const BitArchiveReader& info,
const TestInputArchive& input,
const source_location& location ) {
Expand Down Expand Up @@ -162,6 +170,9 @@ inline void require_archive_content( const BitArchiveReader& info,
REQUIRE( items.size() == found_items );
}

#define REQUIRE_ARCHIVE_CONTENT( info, input ) \
require_archive_content( info, input, BIT7Z_CURRENT_LOCATION )

struct SingleFileArchive : public TestInputArchive {
SingleFileArchive( std::string extension, const BitInFormat& format, std::size_t packedSize )
: TestInputArchive{ std::move( extension ), format, packedSize, single_file_content() } {}
Expand Down Expand Up @@ -216,8 +227,8 @@ TEMPLATE_TEST_CASE( "BitArchiveReader: Reading archives containing only a single
}
REQUIRE_FALSE( info.hasEncryptedItems() );
REQUIRE_FALSE( info.isEncrypted() );
require_archive_content( info, testArchive, BIT7Z_CURRENT_LOCATION );
require_archive_tests( info, BIT7Z_CURRENT_LOCATION );
REQUIRE_ARCHIVE_CONTENT( info, testArchive );
REQUIRE_ARCHIVE_TESTS( info );
}
}

Expand Down Expand Up @@ -251,8 +262,8 @@ TEMPLATE_TEST_CASE( "BitArchiveReader: Reading archives containing multiple file
}
REQUIRE_FALSE( info.hasEncryptedItems() );
REQUIRE_FALSE( info.isEncrypted() );
require_archive_content( info, testArchive, BIT7Z_CURRENT_LOCATION );
require_archive_tests( info, BIT7Z_CURRENT_LOCATION );
REQUIRE_ARCHIVE_CONTENT( info, testArchive );
REQUIRE_ARCHIVE_TESTS( info );
}
}

Expand Down Expand Up @@ -287,8 +298,8 @@ TEMPLATE_TEST_CASE( "BitArchiveReader: Reading archives containing multiple item
}
REQUIRE_FALSE( info.hasEncryptedItems() );
REQUIRE_FALSE( info.isEncrypted() );
require_archive_content( info, testArchive, BIT7Z_CURRENT_LOCATION );
require_archive_tests( info, BIT7Z_CURRENT_LOCATION );
REQUIRE_ARCHIVE_CONTENT( info, testArchive );
REQUIRE_ARCHIVE_TESTS( info );
}
}

Expand Down Expand Up @@ -330,16 +341,16 @@ TEMPLATE_TEST_CASE( "BitArchiveReader: Reading archives containing encrypted ite
const BitArchiveReader info( test::sevenzip_lib(), inputArchive, testArchive.format() );
REQUIRE( info.hasEncryptedItems() );
REQUIRE( info.isEncrypted() );
require_archive_content( info, testArchive, BIT7Z_CURRENT_LOCATION );
REQUIRE_ARCHIVE_CONTENT( info, testArchive );
REQUIRE_THROWS( info.test() );
}

SECTION( "Opening the archive with the correct password should pass all the checks" ) {
const BitArchiveReader info( test::sevenzip_lib(), inputArchive, testArchive.format(), password );
REQUIRE( info.hasEncryptedItems() );
REQUIRE( info.isEncrypted() );
require_archive_content( info, testArchive, BIT7Z_CURRENT_LOCATION );
require_archive_tests( info, BIT7Z_CURRENT_LOCATION );
REQUIRE_ARCHIVE_CONTENT( info, testArchive );
REQUIRE_ARCHIVE_TESTS( info );
}
}
}
Expand Down Expand Up @@ -385,8 +396,8 @@ TEMPLATE_TEST_CASE( "BitArchiveReader: Reading header-encrypted archives",
const BitArchiveReader info( test::sevenzip_lib(), inputArchive, testArchive.format(), password );
REQUIRE( info.hasEncryptedItems() );
REQUIRE( info.isEncrypted() );
require_archive_content( info, testArchive, BIT7Z_CURRENT_LOCATION );
require_archive_tests( info, BIT7Z_CURRENT_LOCATION );
REQUIRE_ARCHIVE_CONTENT( info, testArchive );
REQUIRE_ARCHIVE_TESTS( info );
}
}
}
Expand Down Expand Up @@ -415,7 +426,7 @@ TEST_CASE( "BitArchiveReader: Reading metadata of multi-volume archives", "[bita
REQUIRE( info.volumesCount() == 3 );
REQUIRE( info.itemsCount() == 1 );
REQUIRE( info.items()[ 0 ].name() == arcFileName.stem().string< tchar >() );
require_archive_tests( info, BIT7Z_CURRENT_LOCATION );
REQUIRE_ARCHIVE_TESTS( info );
}

SECTION( "Opening as a whole archive" ) {
Expand All @@ -424,11 +435,8 @@ TEST_CASE( "BitArchiveReader: Reading metadata of multi-volume archives", "[bita
testArchive.format() );
// REQUIRE( info.isMultiVolume() );
// REQUIRE( info.volumesCount() == 3 );
require_archive_item( testArchive.format(),
info.items()[ 0 ],
testArchive.content().items[ 0 ],
BIT7Z_CURRENT_LOCATION );
require_archive_tests( info, BIT7Z_CURRENT_LOCATION );
REQUIRE_ARCHIVE_ITEM( testArchive.format(), info.items()[ 0 ], testArchive.content().items[ 0 ] );
REQUIRE_ARCHIVE_TESTS( info );
}
}
}
Expand All @@ -441,10 +449,10 @@ TEST_CASE( "BitArchiveReader: Reading metadata of multi-volume archives", "[bita
REQUIRE( info.itemsCount() == 1 );

const ArchivedItem expectedItem{ clouds, clouds.name };
require_archive_item( BitFormat::Rar5, info.items()[ 0 ], expectedItem, BIT7Z_CURRENT_LOCATION );
REQUIRE_ARCHIVE_ITEM( BitFormat::Rar5, info.items()[ 0 ], expectedItem );

#ifndef BIT7Z_BUILD_FOR_P7ZIP
require_archive_tests( info, BIT7Z_CURRENT_LOCATION );
REQUIRE_ARCHIVE_TESTS( info );
#endif
}

Expand All @@ -456,10 +464,10 @@ TEST_CASE( "BitArchiveReader: Reading metadata of multi-volume archives", "[bita
REQUIRE( info.itemsCount() == 1 );

const ArchivedItem expectedItem{ clouds, clouds.name };
require_archive_item( BitFormat::Rar, info.items()[ 0 ], expectedItem, BIT7Z_CURRENT_LOCATION );
REQUIRE_ARCHIVE_ITEM( BitFormat::Rar, info.items()[ 0 ], expectedItem );

#ifndef BIT7Z_BUILD_FOR_P7ZIP
require_archive_tests( info, BIT7Z_CURRENT_LOCATION );
REQUIRE_ARCHIVE_TESTS( info );
#endif
}
}
Expand Down Expand Up @@ -491,8 +499,8 @@ TEMPLATE_TEST_CASE( "BitArchiveReader: Reading an empty archive",
REQUIRE( info.archivePath().empty() ); // No archive path for buffer/streamed archives
}
REQUIRE_FALSE( info.isEncrypted() );
require_archive_content( info, testArchive, BIT7Z_CURRENT_LOCATION );
require_archive_tests( info, BIT7Z_CURRENT_LOCATION );
REQUIRE_ARCHIVE_CONTENT( info, testArchive );
REQUIRE_ARCHIVE_TESTS( info );
}
}

Expand All @@ -502,30 +510,30 @@ TEST_CASE( "BitArchiveReader: Solid archive detection", "[bitarchivereader]" ) {
SECTION( "Solid 7z" ) {
const BitArchiveReader info( test::sevenzip_lib(), BIT7Z_STRING( "solid.7z" ), BitFormat::SevenZip );
REQUIRE( info.isSolid() );
require_archive_tests( info, BIT7Z_CURRENT_LOCATION );
REQUIRE_ARCHIVE_TESTS( info );
}

SECTION( "Solid RAR" ) {
const BitArchiveReader info( test::sevenzip_lib(), BIT7Z_STRING( "solid.rar" ), BitFormat::Rar5 );
REQUIRE( info.isSolid() );

#ifndef BIT7Z_BUILD_FOR_P7ZIP
require_archive_tests( info, BIT7Z_CURRENT_LOCATION );
REQUIRE_ARCHIVE_TESTS( info );
#endif
}

SECTION( "Non solid 7z" ) {
const BitArchiveReader info( test::sevenzip_lib(), BIT7Z_STRING( "non_solid.7z" ), BitFormat::SevenZip );
REQUIRE( !info.isSolid() );
require_archive_tests( info, BIT7Z_CURRENT_LOCATION );
REQUIRE_ARCHIVE_TESTS( info );
}

SECTION( "Non-solid RAR" ) {
const BitArchiveReader info( test::sevenzip_lib(), BIT7Z_STRING( "non_solid.rar" ), BitFormat::Rar5 );
REQUIRE( !info.isSolid() );

#ifndef BIT7Z_BUILD_FOR_P7ZIP
require_archive_tests( info, BIT7Z_CURRENT_LOCATION );
REQUIRE_ARCHIVE_TESTS( info );
#endif
}
}
Expand Down

0 comments on commit 8018cdc

Please sign in to comment.