#if ENABLE_UNIT_TESTS #include "il2cpp-config.h" #include "UnitTest++.h" #include "../Path-c-api.h" #include "../../Path.h" #include "../../../utils/PathUtils.h" SUITE(Path) { TEST(GetTempPathNotNull) { CHECK_NOT_NULL(UnityPalGetTempPath()); } TEST(GetTempPathSanity) { // Path will never be the same depeding on user, platform,machine etc. Check if the string is // at least a few chars long CHECK(strlen(UnityPalGetTempPath()) > 3); } TEST(GetTempPathTestMatchesClass) { CHECK_EQUAL(il2cpp::os::Path::GetTempPath().c_str(), UnityPalGetTempPath()); } TEST(GetExecutablePathNotNull) { CHECK_NOT_NULL(UnityPalGetExecutablePath()); } #if !IL2CPP_TARGET_PS4 && !IL2CPP_TARGET_PS5 // PS4 doesn't have an executable path concept - it returns an empty string. TEST(GetExecutablePathIsEmpty) { // Path will never be the same depeding on user, platform,machine etc. Check if the string is // at least a few chars long CHECK(strlen(UnityPalGetExecutablePath()) > 5); } #else TEST(GetExecutablePathIsEmpty) { CHECK_EQUAL(UnityPalGetExecutablePath(), ""); } #endif TEST(GetExecutablePathMatchesClass) { CHECK_EQUAL(il2cpp::os::Path::GetExecutablePath().c_str(), UnityPalGetExecutablePath()); } static std::string FormatExpectedAbsolutePathMessage(const char* input) { return std::string("The path '") + std::string(input) + std::string("' is not reported as absolute, which is not expected."); } static std::string FormatExpectedNotAbsolutePathMessage(const char* input) { return std::string("The path '") + std::string(input) + std::string("' is reported as absolute, which is not expected."); } enum PathType { kAbsolute, kRelative }; static void VerifyPathIs(PathType type, const char* input) { if (type == kAbsolute) CHECK_MSG(UnityPalIsAbsolutePath(input), FormatExpectedAbsolutePathMessage(input).c_str()); else CHECK_MSG(!UnityPalIsAbsolutePath(input), FormatExpectedNotAbsolutePathMessage(input).c_str()); } TEST(PathThatIsNull_IsNotAbsolute) { VerifyPathIs(kRelative, NULL); } #if defined(WINDOWS) TEST(PathThatIsEmpty_IsNotAbsolute) { VerifyPathIs(kRelative, ""); } TEST(PathThatIsWithoutDriveLetter_IsNotAbsolute) { VerifyPathIs(kRelative, "home\test"); } TEST(PathThatIsDriveLetterWithSeparator_IsNotAbsolute) { VerifyPathIs(kRelative, "C:"); } TEST(PathThatIsDriveLetterWithBackslash_IsAbsolute) { VerifyPathIs(kAbsolute, "C:\\"); } TEST(PathThatIsDriveLetterWithBackslashFollowedByAnything_IsAbsolute) { VerifyPathIs(kAbsolute, "C:\\bar"); } TEST(PathThatIsDriveLetterWithForwardslash_IsAbsolute) { VerifyPathIs(kAbsolute, "C:/"); } TEST(PathThatIsDoubleBackslash_IsNotAbsolute) { VerifyPathIs(kRelative, "\\\\"); } TEST(PathThatIsDoubleBackslashFollowedByAnything_IsAbsolute) { VerifyPathIs(kAbsolute, "\\\\bar"); } TEST(IsAbsoluteMatchesForAbsolutePathClass) { std::string input = "C:\\"; CHECK_EQUAL(static_cast(il2cpp::os::Path::IsAbsolute(input)), UnityPalIsAbsolutePath(input.c_str())); } TEST(IsAbsoluteMatchesForRelativePathClass) { std::string input = "test\\path"; CHECK_EQUAL(static_cast(il2cpp::os::Path::IsAbsolute(input)), UnityPalIsAbsolutePath(input.c_str())); } #else TEST(PathThatIsOnlyForwardSlash_IsAbsolute) { VerifyPathIs(kAbsolute, "/"); } TEST(PathThatStartWithForwardSlash_IsAbsolute) { VerifyPathIs(kAbsolute, "/test/path/foo"); } TEST(PathThatDoesNotStartWithAForwardSlash_INotAbsolute) { VerifyPathIs(kRelative, "test/path/foo"); } TEST(IsAbsoluteMatchesForAbsolutePathClass) { std::string input = "/home/foo"; CHECK_EQUAL(static_cast(il2cpp::os::Path::IsAbsolute(input)), UnityPalIsAbsolutePath(input.c_str())); } TEST(IsAbsoluteMatchesForRelativePathClass) { std::string input = "home/path"; CHECK_EQUAL(static_cast(il2cpp::os::Path::IsAbsolute(input)), UnityPalIsAbsolutePath(input.c_str())); } #endif TEST(BasenameForNullPath_ReturnsNull) { CHECK_NULL(UnityPalBasename(NULL)); } TEST(BasenameForEmptyPath_ReturnsDot) { char* basename = UnityPalBasename(""); CHECK_EQUAL(".", basename); free(basename); } TEST(BasenameForEmptyPath_MatchesClass) { std::string input = ""; char* basename = UnityPalBasename(input.c_str()); CHECK_EQUAL(il2cpp::utils::PathUtils::Basename(input), basename); free(basename); } #if defined(WINDOWS) TEST(BasenameWithBackslashes_ReturnsLastPathElement) { char* basename = UnityPalBasename("test\\path\\foo"); CHECK_EQUAL("foo", basename); free(basename); } TEST(BasenameWithBackslashes_MatchesClass) { std::string input = "test\\path\\foo"; char* basename = UnityPalBasename(input.c_str()); CHECK_EQUAL(il2cpp::utils::PathUtils::Basename(input), basename); free(basename); } #else TEST(BasenameWithForwardslashes_ReturnsLastPathElement) { char* basename = UnityPalBasename("test/path/foo"); CHECK_EQUAL("foo", basename); free(basename); } TEST(BasenameWithForwardslashes_MatchesClass) { std::string input = "test/path/foo"; char* basename = UnityPalBasename(input.c_str()); CHECK_EQUAL(il2cpp::utils::PathUtils::Basename(input), basename); free(basename); } #endif TEST(BasenameWithoutSeparators_ReturnsInput) { char* basename = UnityPalBasename("bar"); CHECK_EQUAL("bar", basename); free(basename); } TEST(BasenameWithoutSeparators_MatchesClass) { std::string input = "bar"; char* basename = UnityPalBasename(input.c_str()); CHECK_EQUAL(il2cpp::utils::PathUtils::Basename(input), basename); free(basename); } TEST(DirectoryNameForNullPath_ReturnsNull) { CHECK_NULL(UnityPalDirectoryName(NULL)); } TEST(DirectoryNameForEmptyPath_ReturnsEmptyString) { char* DirectoryName = UnityPalDirectoryName(""); CHECK_EQUAL("", DirectoryName); free(DirectoryName); } TEST(DirectoryNameForEmptyPath_MatchesClass) { std::string input = ""; char* DirectoryName = UnityPalDirectoryName(input.c_str()); CHECK_EQUAL(il2cpp::utils::PathUtils::DirectoryName(input), DirectoryName); free(DirectoryName); } #if defined(WINDOWS) TEST(DirectoryNameWithBackslashes_ReturnsLastPathElement) { char* DirectoryName = UnityPalDirectoryName("test\\path\\foo"); CHECK_EQUAL("test\\path", DirectoryName); free(DirectoryName); } TEST(DirectoryNameWithBackslashes_MatchesClass) { std::string input = "test\\path\\foo"; char* DirectoryName = UnityPalDirectoryName(input.c_str()); CHECK_EQUAL(il2cpp::utils::PathUtils::DirectoryName(input), DirectoryName); free(DirectoryName); } #else TEST(DirectoryNameWithForwardslashes_ReturnsLastPathElement) { char* DirectoryName = UnityPalDirectoryName("test/path/foo"); CHECK_EQUAL("test/path", DirectoryName); free(DirectoryName); } TEST(DirectoryNameWithForwardslashes_MatchesClass) { std::string input = "test/path/foo"; char* DirectoryName = UnityPalDirectoryName(input.c_str()); CHECK_EQUAL(il2cpp::utils::PathUtils::DirectoryName(input), DirectoryName); free(DirectoryName); } #endif TEST(DirectoryNameWithoutSeparators_ReturnsDot) { char* DirectoryName = UnityPalDirectoryName("bar"); CHECK_EQUAL(".", DirectoryName); free(DirectoryName); } TEST(DirectoryNameWithoutSeparators_MatchesClass) { std::string input = "bar"; char* DirectoryName = UnityPalDirectoryName(input.c_str()); CHECK_EQUAL(il2cpp::utils::PathUtils::DirectoryName(input), DirectoryName); free(DirectoryName); } } #endif // ENABLE_UNIT_TESTS