From ed867e0062bebea8b95ce7ef6d2e06f0d1e28bff Mon Sep 17 00:00:00 2001 From: Arvid Norberg Date: Thu, 28 Feb 2019 17:23:11 +0100 Subject: [PATCH] improve test_torrent_info to make it easier to add more test cases for duplicate files --- test/test_torrent_info.cpp | 114 ++++++++++++++++--------------------- 1 file changed, 49 insertions(+), 65 deletions(-) diff --git a/test/test_torrent_info.cpp b/test/test_torrent_info.cpp index a435e02a5..48e6debe0 100644 --- a/test/test_torrent_info.cpp +++ b/test/test_torrent_info.cpp @@ -872,37 +872,53 @@ TORRENT_TEST(parse_torrents) namespace { -void test_resolve_duplicates(int test_case) +struct file_t +{ + std::string filename; + int size; + file_flags_t flags; + string_view expected_filename; +}; + +std::vector> const test_cases +{ + { + {"test/temporary.txt", 0x4000, {}, "test/temporary.txt"}, + {"test/Temporary.txt", 0x4000, {}, "test/Temporary.1.txt"}, + {"test/TeMPorArY.txT", 0x4000, {}, "test/TeMPorArY.2.txT"}, + // a file with the same name in a seprate directory is fine + {"test/test/TEMPORARY.TXT", 0x4000, {}, "test/test/TEMPORARY.TXT"}, + }, + { + {"test/b.exe", 0x4000, {}, "test/b.exe"}, + // duplicate of b.exe + {"test/B.ExE", 0x4000, {}, "test/B.1.ExE"}, + // duplicate of b.exe + {"test/B.exe", 0x4000, {}, "test/B.2.exe"}, + {"test/filler", 0x4000, {}, "test/filler"}, + }, + { + {"test/A/tmp", 0x4000, {}, "test/A/tmp"}, + // a file may not have the same name as a directory + {"test/a", 0x4000, {}, "test/a.1"}, + // duplicate of directory a + {"test/A", 0x4000, {}, "test/A.2"}, + {"test/filler", 0x4000, {}, "test/filler"}, + }, + { + // a subset of this path collides with the next filename + {"test/long/path/name/that/collides", 0x4000, {}, "test/long/path/name/that/collides"}, + // so this file needs to be renamed, to not collide with the path name + {"test/long/path", 0x4000, {}, "test/long/path.1"}, + {"test/filler-1", 0x4000, {}, "test/filler-1"}, + {"test/filler-2", 0x4000, {}, "test/filler-2"}, + }, +}; + +void test_resolve_duplicates(aux::vector const& test) { file_storage fs; - - switch (test_case) - { - case 0: - fs.add_file("test/temporary.txt", 0x4000); - fs.add_file("test/Temporary.txt", 0x4000); - fs.add_file("test/TeMPorArY.txT", 0x4000); - fs.add_file("test/test/TEMPORARY.TXT", 0x4000); - break; - case 1: - fs.add_file("test/b.exe", 0x4000); - fs.add_file("test/B.ExE", 0x4000); - fs.add_file("test/B.exe", 0x4000); - fs.add_file("test/filler", 0x4000); - break; - case 2: - fs.add_file("test/A/tmp", 0x4000); - fs.add_file("test/a", 0x4000); - fs.add_file("test/A", 0x4000); - fs.add_file("test/filler", 0x4000); - break; - case 3: - fs.add_file("test/long/path/name/that/collides", 0x4000); - fs.add_file("test/long/path", 0x4000); - fs.add_file("test/filler-1", 0x4000); - fs.add_file("test/filler-2", 0x4000); - break; - } + for (auto const& f : test) fs.add_file(f.filename, f.size, f.flags); lt::create_torrent t(fs, 0x4000); @@ -918,45 +934,13 @@ void test_resolve_duplicates(int test_case) bencode(out, tor); torrent_info ti(tmp, from_span); - - aux::vector> const filenames - { - { // case 0 - "test/temporary.txt", - "test/Temporary.1.txt", // duplicate of temporary.txt - "test/TeMPorArY.2.txT", // duplicate of temporary.txt - // a file with the same name in a seprate directory is fine - "test/test/TEMPORARY.TXT", - }, - { // case 1 - "test/b.exe", - "test/B.1.ExE", // duplicate of b.exe - "test/B.2.exe", // duplicate of b.exe - "test/filler", - }, - { // case 2 - "test/A/tmp", - "test/a.1", // a file may not have the same name as a directory - "test/A.2", // duplicate of directory a - "test/filler", - }, - { // case 3 - // a subset of this path collides with the next filename - "test/long/path/name/that/collides", - // so this file needs to be renamed, to not collide with the path name - "test/long/path.1", - "test/filler-1", - "test/filler-2", - } - }; - for (auto const i : fs.file_range()) { std::string p = ti.files().file_path(i); convert_path_to_posix(p); - std::printf("%s == %s\n", p.c_str(), filenames[test_case][i]); + std::printf("%s == %s\n", p.c_str(), test[i].expected_filename.to_string().c_str()); - TEST_EQUAL(p, filenames[test_case][i]); + TEST_EQUAL(p, test[i].expected_filename); } } @@ -964,8 +948,8 @@ void test_resolve_duplicates(int test_case) TORRENT_TEST(resolve_duplicates) { - for (int i = 0; i < 4; ++i) - test_resolve_duplicates(i); + for (auto const& t : test_cases) + test_resolve_duplicates(t); } TORRENT_TEST(empty_file)