Index: src/libchengine/Tests/TestsTDestinationPathProvider.cpp =================================================================== diff -u -N -r2e4eacb299f21d06196fe13140b4b0d095abdca9 -rc0c9f340aa8fe7582d54b7cbb7935c6a33653b71 --- src/libchengine/Tests/TestsTDestinationPathProvider.cpp (.../TestsTDestinationPathProvider.cpp) (revision 2e4eacb299f21d06196fe13140b4b0d095abdca9) +++ src/libchengine/Tests/TestsTDestinationPathProvider.cpp (.../TestsTDestinationPathProvider.cpp) (revision c0c9f340aa8fe7582d54b7cbb7935c6a33653b71) @@ -32,18 +32,18 @@ MOCK_METHOD3(GetDynamicFreeSpace, void(const TSmartPath& path, unsigned long long& rullFree, unsigned long long& rullTotal)); }; -using TestTuple = std::tuple; +// base src path, full src path, is file, destination path, ignore folders, force directories, expected resulting path +using TestTuple = std::tuple; class TransformTest : public ::testing::TestWithParam { - // You can implement all the usual fixture class members here. - // To access the test parameter, call GetParam() from class - // TestWithParam. public: TSmartPath TransformPath( IFilesystemPtr spFilesystem, TSmartPath pathSrcBase, TSmartPath pathSrcRelativeToBase, + TSmartPath pathBaseDstOverride, + TSmartPath pathDstOverride, bool bSrcIsFile, TSmartPath pathDst, bool bIgnoreFolders, @@ -54,82 +54,250 @@ TString strNextAltName = L"Copy (%count) of %name"; TBasePathDataPtr spBasePath(new TBasePathData(0, pathSrcBase)); + spBasePath->SetDestinationPath(pathBaseDstOverride); TFileInfoPtr spFileInfo(new TFileInfo(spBasePath, pathSrcRelativeToBase, bSrcIsFile ? FILE_ATTRIBUTE_NORMAL : FILE_ATTRIBUTE_DIRECTORY, 0, TFileTime(), TFileTime(), TFileTime(), 0)); + spFileInfo->SetDstRelativePath(pathDstOverride); TDestinationPathProvider tDstPathProvider(spFilesystem, pathDst, bIgnoreFolders, bForceDirectories, strFirstAltName, strNextAltName); return tDstPathProvider.CalculateDestinationPath(spFileInfo); } }; // base src path, full src path, is file, destination path, ignore folders, force directories, expected resulting path -INSTANTIATE_TEST_CASE_P(BasicTransformTests, TransformTest, ::testing::Values( +INSTANTIATE_TEST_CASE_P(TransformTests_NoDstOverride, TransformTest, ::testing::Values( ///////////////////////////////////////// // full drive copy, std options, root - std::make_tuple(TString(L"c:"), TString(L"c:"), false, TString(L"x:\\"), false, false, TString(L"x:\\c")), // 0 - std::make_tuple(TString(L"c:\\"), TString(L"c:\\"), false, TString(L"x:\\"), false, false, TString(L"x:\\c")), // 1 + std::make_tuple(L"c:", L"c:", L"", L"", false, L"x:\\", false, false, L"x:\\c"), // 0 + std::make_tuple(L"c:\\", L"c:\\", L"", L"", false, L"x:\\", false, false, L"x:\\c"), // 1 // full drive copy, ignore folders, root - std::make_tuple(TString(L"c:"), TString(L"c:"), false, TString(L"x:\\"), true, false, TString(L"x:\\c")), // 2 - std::make_tuple(TString(L"c:\\"), TString(L"c:\\"), false, TString(L"x:\\"), true, false, TString(L"x:\\c")), // 3 + std::make_tuple(L"c:", L"c:", L"", L"", false, L"x:\\", true, false, L"x:\\c"), // 2 + std::make_tuple(L"c:\\", L"c:\\", L"", L"", false, L"x:\\", true, false, L"x:\\c"), // 3 // full drive copy, force directories, root - std::make_tuple(TString(L"c:"), TString(L"c:"), false, TString(L"x:\\"), false, true, TString(L"x:\\c")), // 4 - std::make_tuple(TString(L"c:\\"), TString(L"c:\\"), false, TString(L"x:\\"), false, true, TString(L"x:\\c")), // 5 + std::make_tuple(L"c:", L"c:", L"", L"", false, L"x:\\", false, true, L"x:\\c"), // 4 + std::make_tuple(L"c:\\", L"c:\\", L"", L"", false, L"x:\\", false, true, L"x:\\c"), // 5 ///////////////////////////////////////// // full drive copy, std options, non-root - std::make_tuple(TString(L"c:"), TString(L"c:\\folder\\file.txt"), true, TString(L"x:\\"), false, false, TString(L"x:\\c\\folder\\file.txt")), // 6 - std::make_tuple(TString(L"c:\\"), TString(L"c:\\folder\\file.txt"), true, TString(L"x:\\"), false, false, TString(L"x:\\c\\folder\\file.txt")), // 7 + std::make_tuple(L"c:", L"c:\\folder\\file.txt", L"", L"", true, L"x:\\", false, false, L"x:\\c\\folder\\file.txt"), // 6 + std::make_tuple(L"c:\\", L"c:\\folder\\file.txt", L"", L"", true, L"x:\\", false, false, L"x:\\c\\folder\\file.txt"), // 7 // full drive copy, ignore folders, non-root - std::make_tuple(TString(L"c:"), TString(L"c:\\folder\\file.txt"), true, TString(L"x:\\"), true, false, TString(L"x:\\file.txt")), // 8 - std::make_tuple(TString(L"c:\\"), TString(L"c:\\folder\\file.txt"), true, TString(L"x:\\"), true, false, TString(L"x:\\file.txt")), // 9 + std::make_tuple(L"c:", L"c:\\folder\\file.txt", L"", L"", true, L"x:\\", true, false, L"x:\\file.txt"), // 8 + std::make_tuple(L"c:\\", L"c:\\folder\\file.txt", L"", L"", true, L"x:\\", true, false, L"x:\\file.txt"), // 9 // full drive copy, force directories, non-root - std::make_tuple(TString(L"c:"), TString(L"c:\\folder\\file.txt"), true, TString(L"x:\\"), false, true, TString(L"x:\\c\\folder\\file.txt")), // 10 - std::make_tuple(TString(L"c:\\"), TString(L"c:\\folder\\file.txt"), true, TString(L"x:\\"), false, true, TString(L"x:\\c\\folder\\file.txt")), // 11 + std::make_tuple(L"c:", L"c:\\folder\\file.txt", L"", L"", true, L"x:\\", false, true, L"x:\\c\\folder\\file.txt"), // 10 + std::make_tuple(L"c:\\", L"c:\\folder\\file.txt", L"", L"", true, L"x:\\", false, true, L"x:\\c\\folder\\file.txt"), // 11 ///////////////////////////////////////// // folder copy, std options, folder root - std::make_tuple(TString(L"c:\\folder"), TString(L"c:\\folder"), false, TString(L"x:\\"), false, false, TString(L"x:\\folder")), // 12 - std::make_tuple(TString(L"c:\\folder\\"), TString(L"c:\\folder\\"), false, TString(L"x:\\"), false, false, TString(L"x:\\folder")), // 13 + std::make_tuple(L"c:\\folder", L"c:\\folder", L"", L"", false, L"x:\\", false, false, L"x:\\folder"), // 12 + std::make_tuple(L"c:\\folder\\", L"c:\\folder\\", L"", L"", false, L"x:\\", false, false, L"x:\\folder"), // 13 // folder copy, ignore folders, folder root - std::make_tuple(TString(L"c:\\folder"), TString(L"c:\\folder"), false, TString(L"x:\\"), true, false, TString(L"x:\\folder")), // 14 - std::make_tuple(TString(L"c:\\folder\\"), TString(L"c:\\folder\\"), false, TString(L"x:\\"), true, false, TString(L"x:\\folder")), // 15 + std::make_tuple(L"c:\\folder", L"c:\\folder", L"", L"", false, L"x:\\", true, false, L"x:\\folder"), // 14 + std::make_tuple(L"c:\\folder\\", L"c:\\folder\\", L"", L"", false, L"x:\\", true, false, L"x:\\folder"), // 15 // folder copy, force directories, folder root - std::make_tuple(TString(L"c:\\folder"), TString(L"c:\\folder"), false, TString(L"x:\\"), false, true, TString(L"x:\\c\\folder")), // 16 - std::make_tuple(TString(L"c:\\folder\\"), TString(L"c:\\folder\\"), false, TString(L"x:\\"), false, true, TString(L"x:\\c\\folder")), // 17 + std::make_tuple(L"c:\\folder", L"c:\\folder", L"", L"", false, L"x:\\", false, true, L"x:\\c\\folder"), // 16 + std::make_tuple(L"c:\\folder\\", L"c:\\folder\\", L"", L"", false, L"x:\\", false, true, L"x:\\c\\folder"), // 17 ///////////////////////////////////////// // folder copy, std options, non folder root - std::make_tuple(TString(L"c:\\folder"), TString(L"c:\\folder\\folder2\\file.txt"), true, TString(L"x:\\"), false, false, TString(L"x:\\folder\\folder2\\file.txt")), // 18 - std::make_tuple(TString(L"c:\\folder\\"), TString(L"c:\\folder\\folder2\\file.txt"), true, TString(L"x:\\"), false, false, TString(L"x:\\folder\\folder2\\file.txt")), // 19 + std::make_tuple(L"c:\\folder", L"c:\\folder\\folder2\\file.txt", L"", L"", true, L"x:\\", false, false, L"x:\\folder\\folder2\\file.txt"), // 18 + std::make_tuple(L"c:\\folder\\", L"c:\\folder\\folder2\\file.txt", L"", L"", true, L"x:\\", false, false, L"x:\\folder\\folder2\\file.txt"), // 19 // folder copy, ignore folders, non folder root - std::make_tuple(TString(L"c:\\folder"), TString(L"c:\\folder\\folder2\\file.txt"), true, TString(L"x:\\"), true, false, TString(L"x:\\file.txt")), // 20 - std::make_tuple(TString(L"c:\\folder\\"), TString(L"c:\\folder\\folder2\\file.txt"), true, TString(L"x:\\"), true, false, TString(L"x:\\file.txt")), // 21 + std::make_tuple(L"c:\\folder", L"c:\\folder\\folder2\\file.txt", L"", L"", true, L"x:\\", true, false, L"x:\\file.txt"), // 20 + std::make_tuple(L"c:\\folder\\", L"c:\\folder\\folder2\\file.txt", L"", L"", true, L"x:\\", true, false, L"x:\\file.txt"), // 21 // folder copy, force directories, non folder root - std::make_tuple(TString(L"c:\\folder"), TString(L"c:\\folder\\folder2\\file.txt"), true, TString(L"x:\\"), false, true, TString(L"x:\\c\\folder\\folder2\\file.txt")), // 22 - std::make_tuple(TString(L"c:\\folder\\"), TString(L"c:\\folder\\folder2\\file.txt"), true, TString(L"x:\\"), false, true, TString(L"x:\\c\\folder\\folder2\\file.txt")), // 23 + std::make_tuple(L"c:\\folder", L"c:\\folder\\folder2\\file.txt", L"", L"", true, L"x:\\", false, true, L"x:\\c\\folder\\folder2\\file.txt"), // 22 + std::make_tuple(L"c:\\folder\\", L"c:\\folder\\folder2\\file.txt", L"", L"", true, L"x:\\", false, true, L"x:\\c\\folder\\folder2\\file.txt"), // 23 ///////////////////////////////////////// // special cases // base path slightly differs from normal path (by a separator which should be ignored) - std::make_tuple(TString(L"c:\\folder\\"), TString(L"c:\\folder"), false, TString(L"x:\\"), false, false, TString(L"x:\\folder")), // 24 + std::make_tuple(L"c:\\folder\\", L"c:\\folder", L"", L"", false, L"x:\\", false, false, L"x:\\folder"), // 24 // case insensitivity - std::make_tuple(TString(L"c:\\Folder"), TString(L"c:\\folder"), false, TString(L"x:\\"), false, false, TString(L"x:\\Folder")) // 25 + std::make_tuple(L"c:\\Folder", L"c:\\folder", L"", L"", false, L"x:\\", false, false, L"x:\\Folder") // 25 )); + +// base src path, full src path, is file, destination path, ignore folders, force directories, expected resulting path +INSTANTIATE_TEST_CASE_P(TransformTests_TopLevelOverride, TransformTest, ::testing::Values( + ///////////////////////////////////////// + // full drive copy, std options, root + std::make_tuple(L"c:", L"c:", L"AltTL", L"", false, L"x:\\", false, false, L"x:\\AltTL"), // 0 + std::make_tuple(L"c:\\", L"c:\\", L"AltTL", L"", false, L"x:\\", false, false, L"x:\\AltTL"), // 1 + // full drive copy, ignore folders, root + std::make_tuple(L"c:", L"c:", L"AltTL", L"", false, L"x:\\", true, false, L"x:\\c"), // 2 + std::make_tuple(L"c:\\", L"c:\\", L"AltTL", L"", false, L"x:\\", true, false, L"x:\\c"), // 3 + // full drive copy, force directories, root + std::make_tuple(L"c:", L"c:", L"AltTL", L"", false, L"x:\\", false, true, L"x:\\c"), // 4 + std::make_tuple(L"c:\\", L"c:\\", L"AltTL", L"", false, L"x:\\", false, true, L"x:\\c"), // 5 + + ///////////////////////////////////////// + // full drive copy, std options, non-root + std::make_tuple(L"c:", L"c:\\folder\\file.txt", L"AltTL", L"", true, L"x:\\", false, false, L"x:\\AltTL\\folder\\file.txt"), // 6 + std::make_tuple(L"c:\\", L"c:\\folder\\file.txt", L"AltTL", L"", true, L"x:\\", false, false, L"x:\\AltTL\\folder\\file.txt"), // 7 + // full drive copy, ignore folders, non-root + std::make_tuple(L"c:", L"c:\\folder\\file.txt", L"AltTL", L"", true, L"x:\\", true, false, L"x:\\file.txt"), // 8 + std::make_tuple(L"c:\\", L"c:\\folder\\file.txt", L"AltTL", L"", true, L"x:\\", true, false, L"x:\\file.txt"), // 9 + // full drive copy, force directories, non-root + std::make_tuple(L"c:", L"c:\\folder\\file.txt", L"AltTL", L"", true, L"x:\\", false, true, L"x:\\c\\folder\\file.txt"), // 10 + std::make_tuple(L"c:\\", L"c:\\folder\\file.txt", L"AltTL", L"", true, L"x:\\", false, true, L"x:\\c\\folder\\file.txt"), // 11 + + ///////////////////////////////////////// + // folder copy, std options, folder root + std::make_tuple(L"c:\\folder", L"c:\\folder", L"AltTL", L"", false, L"x:\\", false, false, L"x:\\AltTL"), // 12 + std::make_tuple(L"c:\\folder\\", L"c:\\folder\\", L"AltTL", L"", false, L"x:\\", false, false, L"x:\\AltTL"), // 13 + // folder copy, ignore folders, folder root + std::make_tuple(L"c:\\folder", L"c:\\folder", L"AltTL", L"", false, L"x:\\", true, false, L"x:\\folder"), // 14 + std::make_tuple(L"c:\\folder\\", L"c:\\folder\\", L"AltTL", L"", false, L"x:\\", true, false, L"x:\\folder"), // 15 + // folder copy, force directories, folder root + std::make_tuple(L"c:\\folder", L"c:\\folder", L"AltTL", L"", false, L"x:\\", false, true, L"x:\\c\\folder"), // 16 + std::make_tuple(L"c:\\folder\\", L"c:\\folder\\", L"AltTL", L"", false, L"x:\\", false, true, L"x:\\c\\folder"), // 17 + + ///////////////////////////////////////// + // folder copy, std options, non folder root + std::make_tuple(L"c:\\folder", L"c:\\folder\\folder2\\file.txt", L"AltTL", L"", true, L"x:\\", false, false, L"x:\\AltTL\\folder2\\file.txt"), // 18 + std::make_tuple(L"c:\\folder\\", L"c:\\folder\\folder2\\file.txt", L"AltTL", L"", true, L"x:\\", false, false, L"x:\\AltTL\\folder2\\file.txt"), // 19 + // folder copy, ignore folders, non folder root + std::make_tuple(L"c:\\folder", L"c:\\folder\\folder2\\file.txt", L"AltTL", L"", true, L"x:\\", true, false, L"x:\\file.txt"), // 20 + std::make_tuple(L"c:\\folder\\", L"c:\\folder\\folder2\\file.txt", L"AltTL", L"", true, L"x:\\", true, false, L"x:\\file.txt"), // 21 + // folder copy, force directories, non folder root + std::make_tuple(L"c:\\folder", L"c:\\folder\\folder2\\file.txt", L"AltTL", L"", true, L"x:\\", false, true, L"x:\\c\\folder\\folder2\\file.txt"), // 22 + std::make_tuple(L"c:\\folder\\", L"c:\\folder\\folder2\\file.txt", L"AltTL", L"", true, L"x:\\", false, true, L"x:\\c\\folder\\folder2\\file.txt"), // 23 + + ///////////////////////////////////////// + // special cases + // base path slightly differs from normal path (by a separator which should be ignored) + std::make_tuple(L"c:\\folder\\", L"c:\\folder", L"AltTL", L"", false, L"x:\\", false, false, L"x:\\AltTL"), // 24 + + // case insensitivity + std::make_tuple(L"c:\\Folder", L"c:\\folder", L"AltTL", L"", false, L"x:\\", false, false, L"x:\\AltTL") // 25 +)); + +INSTANTIATE_TEST_CASE_P(TransformTests_DstOverride, TransformTest, ::testing::Values( + ///////////////////////////////////////// + // full drive copy, std options, root + std::make_tuple(L"c:", L"c:", L"", L"AltName", false, L"x:\\", false, false, L"x:\\AltName"), // 0 + std::make_tuple(L"c:\\", L"c:\\", L"", L"AltName", false, L"x:\\", false, false, L"x:\\AltName"), // 1 + // full drive copy, ignore folders, root + std::make_tuple(L"c:", L"c:", L"", L"AltName", false, L"x:\\", true, false, L"x:\\AltName"), // 2 + std::make_tuple(L"c:\\", L"c:\\", L"", L"AltName", false, L"x:\\", true, false, L"x:\\AltName"), // 3 + // full drive copy, force directories, root + std::make_tuple(L"c:", L"c:", L"", L"AltName", false, L"x:\\", false, true, L"x:\\AltName"), // 4 + std::make_tuple(L"c:\\", L"c:\\", L"", L"AltName", false, L"x:\\", false, true, L"x:\\AltName"), // 5 + + ///////////////////////////////////////// + // full drive copy, std options, non-root + std::make_tuple(L"c:", L"c:\\folder\\file.txt", L"", L"AltName", true, L"x:\\", false, false, L"x:\\c\\folder\\AltName"), // 6 + std::make_tuple(L"c:\\", L"c:\\folder\\file.txt", L"", L"AltName", true, L"x:\\", false, false, L"x:\\c\\folder\\AltName"), // 7 + // full drive copy, ignore folders, non-root + std::make_tuple(L"c:", L"c:\\folder\\file.txt", L"", L"AltName", true, L"x:\\", true, false, L"x:\\AltName"), // 8 + std::make_tuple(L"c:\\", L"c:\\folder\\file.txt", L"", L"AltName", true, L"x:\\", true, false, L"x:\\AltName"), // 9 + // full drive copy, force directories, non-root + std::make_tuple(L"c:", L"c:\\folder\\file.txt", L"", L"AltName", true, L"x:\\", false, true, L"x:\\c\\folder\\AltName"), // 10 + std::make_tuple(L"c:\\", L"c:\\folder\\file.txt", L"", L"AltName", true, L"x:\\", false, true, L"x:\\c\\folder\\AltName"), // 11 + + ///////////////////////////////////////// + // folder copy, std options, folder root + std::make_tuple(L"c:\\folder", L"c:\\folder", L"", L"AltName", false, L"x:\\", false, false, L"x:\\AltName"), // 12 + std::make_tuple(L"c:\\folder\\", L"c:\\folder\\", L"", L"AltName", false, L"x:\\", false, false, L"x:\\AltName"), // 13 + // folder copy, ignore folders, folder root + std::make_tuple(L"c:\\folder", L"c:\\folder", L"", L"AltName", false, L"x:\\", true, false, L"x:\\AltName"), // 14 + std::make_tuple(L"c:\\folder\\", L"c:\\folder\\", L"", L"AltName", false, L"x:\\", true, false, L"x:\\AltName"), // 15 + // folder copy, force directories, folder root + std::make_tuple(L"c:\\folder", L"c:\\folder", L"", L"AltName", false, L"x:\\", false, true, L"x:\\c\\AltName"), // 16 + std::make_tuple(L"c:\\folder\\", L"c:\\folder\\", L"", L"AltName", false, L"x:\\", false, true, L"x:\\c\\AltName"), // 17 + + ///////////////////////////////////////// + // folder copy, std options, non folder root + std::make_tuple(L"c:\\folder", L"c:\\folder\\folder2\\file.txt", L"", L"AltName", true, L"x:\\", false, false, L"x:\\folder\\folder2\\AltName"), // 18 + std::make_tuple(L"c:\\folder\\", L"c:\\folder\\folder2\\file.txt", L"", L"AltName", true, L"x:\\", false, false, L"x:\\folder\\folder2\\AltName"), // 19 + // folder copy, ignore folders, non folder root + std::make_tuple(L"c:\\folder", L"c:\\folder\\folder2\\file.txt", L"", L"AltName", true, L"x:\\", true, false, L"x:\\AltName"), // 20 + std::make_tuple(L"c:\\folder\\", L"c:\\folder\\folder2\\file.txt", L"", L"AltName", true, L"x:\\", true, false, L"x:\\AltName"), // 21 + // folder copy, force directories, non folder root + std::make_tuple(L"c:\\folder", L"c:\\folder\\folder2\\file.txt", L"", L"AltName", true, L"x:\\", false, true, L"x:\\c\\folder\\folder2\\AltName"), // 22 + std::make_tuple(L"c:\\folder\\", L"c:\\folder\\folder2\\file.txt", L"", L"AltName", true, L"x:\\", false, true, L"x:\\c\\folder\\folder2\\AltName"), // 23 + + ///////////////////////////////////////// + // special cases + // base path slightly differs from normal path (by a separator which should be ignored) + std::make_tuple(L"c:\\folder\\", L"c:\\folder", L"", L"AltName", false, L"x:\\", false, false, L"x:\\AltName"), // 24 + + // case insensitivity + std::make_tuple(L"c:\\Folder", L"c:\\folder", L"", L"AltName", false, L"x:\\", false, false, L"x:\\AltName") // 25 +)); + +INSTANTIATE_TEST_CASE_P(TransformTests_TopLevelOverrideAndDstOverride, TransformTest, ::testing::Values( + ///////////////////////////////////////// + // full drive copy, std options, root + std::make_tuple(L"c:", L"c:", L"AltTL", L"AltName", false, L"x:\\", false, false, L"x:\\AltName"), // 0 + std::make_tuple(L"c:\\", L"c:\\", L"AltTL", L"AltName", false, L"x:\\", false, false, L"x:\\AltName"), // 1 + // full drive copy, ignore folders, root + std::make_tuple(L"c:", L"c:", L"AltTL", L"AltName", false, L"x:\\", true, false, L"x:\\AltName"), // 2 + std::make_tuple(L"c:\\", L"c:\\", L"AltTL", L"AltName", false, L"x:\\", true, false, L"x:\\AltName"), // 3 + // full drive copy, force directories, root + std::make_tuple(L"c:", L"c:", L"AltTL", L"AltName", false, L"x:\\", false, true, L"x:\\AltName"), // 4 + std::make_tuple(L"c:\\", L"c:\\", L"AltTL", L"AltName", false, L"x:\\", false, true, L"x:\\AltName"), // 5 + + ///////////////////////////////////////// + // full drive copy, std options, non-root + std::make_tuple(L"c:", L"c:\\folder\\file.txt", L"AltTL", L"AltName", true, L"x:\\", false, false, L"x:\\AltTL\\folder\\AltName"), // 6 + std::make_tuple(L"c:\\", L"c:\\folder\\file.txt", L"AltTL", L"AltName", true, L"x:\\", false, false, L"x:\\AltTL\\folder\\AltName"), // 7 + // full drive copy, ignore folders, non-root + std::make_tuple(L"c:", L"c:\\folder\\file.txt", L"AltTL", L"AltName", true, L"x:\\", true, false, L"x:\\AltName"), // 8 + std::make_tuple(L"c:\\", L"c:\\folder\\file.txt", L"AltTL", L"AltName", true, L"x:\\", true, false, L"x:\\AltName"), // 9 + // full drive copy, force directories, non-root + std::make_tuple(L"c:", L"c:\\folder\\file.txt", L"AltTL", L"AltName", true, L"x:\\", false, true, L"x:\\c\\folder\\AltName"), // 10 + std::make_tuple(L"c:\\", L"c:\\folder\\file.txt", L"AltTL", L"AltName", true, L"x:\\", false, true, L"x:\\c\\folder\\AltName"), // 11 + + ///////////////////////////////////////// + // folder copy, std options, folder root + std::make_tuple(L"c:\\folder", L"c:\\folder", L"AltTL", L"AltName", false, L"x:\\", false, false, L"x:\\AltName"), // 12 + std::make_tuple(L"c:\\folder\\", L"c:\\folder\\", L"AltTL", L"AltName", false, L"x:\\", false, false, L"x:\\AltName"), // 13 + // folder copy, ignore folders, folder root + std::make_tuple(L"c:\\folder", L"c:\\folder", L"AltTL", L"AltName", false, L"x:\\", true, false, L"x:\\AltName"), // 14 + std::make_tuple(L"c:\\folder\\", L"c:\\folder\\", L"AltTL", L"AltName", false, L"x:\\", true, false, L"x:\\AltName"), // 15 + // folder copy, force directories, folder root + std::make_tuple(L"c:\\folder", L"c:\\folder", L"AltTL", L"AltName", false, L"x:\\", false, true, L"x:\\c\\AltName"), // 16 + std::make_tuple(L"c:\\folder\\", L"c:\\folder\\", L"AltTL", L"AltName", false, L"x:\\", false, true, L"x:\\c\\AltName"), // 17 + + ///////////////////////////////////////// + // folder copy, std options, non folder root + std::make_tuple(L"c:\\folder", L"c:\\folder\\folder2\\file.txt", L"AltTL", L"AltName", true, L"x:\\", false, false, L"x:\\AltTL\\folder2\\AltName"), // 18 + std::make_tuple(L"c:\\folder\\", L"c:\\folder\\folder2\\file.txt", L"AltTL", L"AltName", true, L"x:\\", false, false, L"x:\\AltTL\\folder2\\AltName"), // 19 + // folder copy, ignore folders, non folder root + std::make_tuple(L"c:\\folder", L"c:\\folder\\folder2\\file.txt", L"AltTL", L"AltName", true, L"x:\\", true, false, L"x:\\AltName"), // 20 + std::make_tuple(L"c:\\folder\\", L"c:\\folder\\folder2\\file.txt", L"AltTL", L"AltName", true, L"x:\\", true, false, L"x:\\AltName"), // 21 + // folder copy, force directories, non folder root + std::make_tuple(L"c:\\folder", L"c:\\folder\\folder2\\file.txt", L"AltTL", L"AltName", true, L"x:\\", false, true, L"x:\\c\\folder\\folder2\\AltName"), // 22 + std::make_tuple(L"c:\\folder\\", L"c:\\folder\\folder2\\file.txt", L"AltTL", L"AltName", true, L"x:\\", false, true, L"x:\\c\\folder\\folder2\\AltName"), // 23 + + ///////////////////////////////////////// + // special cases + // base path slightly differs from normal path (by a separator which should be ignored) + std::make_tuple(L"c:\\folder\\", L"c:\\folder", L"AltTL", L"AltName", false, L"x:\\", false, false, L"x:\\AltName"), // 24 + + // case insensitivity + std::make_tuple(L"c:\\Folder", L"c:\\folder", L"AltTL", L"AltName", false, L"x:\\", false, false, L"x:\\AltName") // 25 +)); + TEST_P(TransformTest, PathTest) { const TestTuple& rTestData = GetParam(); // parameters - TSmartPath pathSrcBase = PathFromWString(std::get<0>(rTestData)); - TSmartPath pathSrcRelativeToBase = PathFromWString(std::get<1>(rTestData)); - bool bSrcIsFile = std::get<2>(rTestData); - TSmartPath pathDst = PathFromWString(std::get<3>(rTestData)); - TString strExpectedResultPath = std::get<6>(rTestData); + TSmartPath pathSrcBase = PathFromString(std::get<0>(rTestData)); + TSmartPath pathSrcRelativeToBase = PathFromString(std::get<1>(rTestData)); + TSmartPath pathBaseDstOverride = PathFromString(std::get<2>(rTestData)); + TSmartPath pathDstOverride = PathFromString(std::get<3>(rTestData)); + bool bSrcIsFile = std::get<4>(rTestData); + TSmartPath pathDst = PathFromString(std::get<5>(rTestData)); + TString strExpectedResultPath = std::get<8>(rTestData); - bool bIgnoreFolders = std::get<4>(rTestData); - bool bForceDirectories = std::get<5>(rTestData); + bool bIgnoreFolders = std::get<6>(rTestData); + bool bForceDirectories = std::get<7>(rTestData); // setup std::shared_ptr > spFilesystemMock(new NiceMock); @@ -140,6 +308,8 @@ TSmartPath pathResult = TransformPath(spFilesystemMock, pathSrcBase, pathSrcRelativeToBase, + pathBaseDstOverride, + pathDstOverride, bSrcIsFile, pathDst, bIgnoreFolders,