@@ -47,11 +47,12 @@ const string filenameBackup0 = RteUtils::SlashesToOsSlashes(filenameRegular + ".
4747const string filenameBackup1 = RteUtils::SlashesToOsSlashes(filenameRegular + " .0001" );
4848const string pathInvalid = dirnameSubdir + " /Invalid" ;
4949
50- // For Canonical Tests
50+ // For Canonical and Equivalent tests
5151const string filenameBackslashForCanonical = dirnameSubdirBackslash + " \\ file.txt" ;
5252const string dirnameSubdirBackslashForCanonical = dirnameBase + " \\ dir\\ subdir" ;
5353const string dirnameMixedWithTrailingForCanonical = dirnameBase + " /dir\\ subdir/" ;
5454const string dirnameBackslashWithTrailingForCanonical = dirnameBase + " \\ dir\\ subdir\\ " ;
55+ const string filenameMixedForCanonical = dirnameMixedWithTrailingForCanonical + " \\ file.txt" ;
5556
5657static set<string, VersionCmp::Greater> sortedFileSet = {
5758 " foo.h" ,
@@ -859,7 +860,7 @@ TEST_F(RteFsUtilsTest, MakePathCanonical) {
859860 EXPECT_EQ (ret, filenameCanonical);
860861
861862 // Test filename with mixed separators
862- ret = RteFsUtils::MakePathCanonical (filenameBackslashForCanonical );
863+ ret = RteFsUtils::MakePathCanonical (filenameMixedForCanonical );
863864 EXPECT_EQ (ret, filenameCanonical);
864865
865866 // Test dirname with regular separators and trailing
@@ -885,6 +886,61 @@ TEST_F(RteFsUtilsTest, MakePathCanonical) {
885886 RteFsUtils::RemoveDir (dirnameSubdir);
886887}
887888
889+ TEST_F (RteFsUtilsTest, Equivalent) {
890+
891+
892+ EXPECT_TRUE (RteFsUtils::Equivalent (" " ," " ));
893+ EXPECT_TRUE (RteFsUtils::Equivalent (" foo" ," foo" ));
894+
895+ EXPECT_FALSE (RteFsUtils::Equivalent (" " ," foo" ));
896+ EXPECT_FALSE (RteFsUtils::Equivalent (" foo" ," " ));
897+
898+
899+ // now test different combinations: files must exist!
900+ string ret;
901+ error_code ec;
902+ const string filenameCanonical = fs::current_path (ec).append (filenameRegular).generic_string ();
903+ const string dirnameCanonical = fs::current_path (ec).append (dirnameSubdir).generic_string ();
904+
905+ // create file and with parent directories for reliability of the tests
906+ RteFsUtils::CreateTextFile (filenameRegular, " foo" );
907+
908+ // check filename with regular separators
909+ EXPECT_TRUE (RteFsUtils::Equivalent (filenameRegular, filenameCanonical));
910+
911+ // Even longer path are equal
912+ string nonExistingFileRel = dirnameSubdir + " /non/existing/path/../file.txt" ;
913+ string nonExistingFileAbs = dirnameCanonical + " /non/existing/file.txt" ;
914+ EXPECT_TRUE (RteFsUtils::Equivalent (nonExistingFileRel, nonExistingFileAbs));
915+
916+ // Test filenames with backslashes separators
917+ EXPECT_TRUE (RteFsUtils::Equivalent (filenameBackslashForCanonical, filenameCanonical));
918+
919+ // Test filename with mixed separators
920+ EXPECT_TRUE (RteFsUtils::Equivalent (filenameMixedForCanonical, filenameCanonical));
921+
922+ // Test filename with mixed separators against backslashes
923+ EXPECT_TRUE (RteFsUtils::Equivalent (filenameMixedForCanonical, filenameBackslashForCanonical));
924+
925+ // Test dirname with regular separators and trailing
926+ EXPECT_TRUE (RteFsUtils::Equivalent (dirnameSubdirWithTrailing, dirnameCanonical));
927+
928+ // Test dirname with backslashes separators and trailing
929+ EXPECT_TRUE (RteFsUtils::Equivalent (dirnameBackslashWithTrailingForCanonical, dirnameCanonical));
930+
931+ // Test dirname with mixed separators and trailing
932+ EXPECT_TRUE (RteFsUtils::Equivalent (dirnameMixedWithTrailingForCanonical, dirnameCanonical));
933+
934+ // Test path with dot inside
935+ EXPECT_TRUE (RteFsUtils::Equivalent (dirnameDotSubdir, dirnameCanonical));
936+
937+ // Test path with two dots inside
938+ EXPECT_TRUE (RteFsUtils::Equivalent (dirnameDotDotSubdir, dirnameCanonical));
939+
940+ RteFsUtils::RemoveDir (dirnameSubdir);
941+ }
942+
943+
888944TEST_F (RteFsUtilsTest, GetCurrentFolder) {
889945 error_code ec;
890946 string currDir;
0 commit comments