Route every extension bank-directory lookup through one bankRootOf seam
The pure bankRootFor(rppPath, unsavedRoot) and the shell bankRootOf(ReaProject*) replace eleven hand-rolled .rpp-parent derivations. No unsaved root is supplied yet, so behaviour and refusals are unchanged. Save-As relocation now reads the stored lastBankRoot_.
This commit is contained in:
@@ -402,6 +402,49 @@ static void testBankRelativeForNameConventionAndEdge() {
|
||||
CHECK(bankRelativeForName("").empty());
|
||||
}
|
||||
|
||||
// --- bankRootFor --------------------------------------------------------------
|
||||
|
||||
static void testBankRootForSavedProjectIsTheRppDirectory() {
|
||||
CHECK(bankRootFor("/home/d/proj/song.rpp", "") == "/home/d/proj");
|
||||
#ifdef _WIN32
|
||||
CHECK(bankRootFor("C:\\Users\\D\\Proj\\song.rpp", "") == "c:/users/d/proj");
|
||||
#endif
|
||||
}
|
||||
|
||||
static void testBankRootForSavedProjectIgnoresTheUnsavedRoot() {
|
||||
// Once the project has a directory, a supplied unsaved root must not leak through.
|
||||
CHECK(bankRootFor("/home/d/proj/song.rpp", "/tmp/unsaved") == "/home/d/proj");
|
||||
}
|
||||
|
||||
static void testBankRootForUnsavedProjectFallsBackToTheUnsavedRoot() {
|
||||
CHECK(bankRootFor("", "/tmp/unsaved") == "/tmp/unsaved");
|
||||
// Normalized like the saved branch: trailing slash stripped, backslashes flipped.
|
||||
CHECK(bankRootFor("", "/tmp/unsaved/") == "/tmp/unsaved");
|
||||
#ifdef _WIN32
|
||||
CHECK(bankRootFor("", "C:\\Temp\\Unsaved\\") == "c:/temp/unsaved");
|
||||
#endif
|
||||
}
|
||||
|
||||
static void testBankRootForUnsavedProjectWithNoUnsavedRootIsEmpty() {
|
||||
// No CWD / default-location fallback: an unsaved project with nowhere to bank
|
||||
// yields empty, which every caller treats as "no bank location".
|
||||
CHECK(bankRootFor("", "").empty());
|
||||
}
|
||||
|
||||
static void testBankRootForRppWithNoDirectoryIsTreatedAsUnsaved() {
|
||||
CHECK(bankRootFor("song.rpp", "/tmp/unsaved") == "/tmp/unsaved");
|
||||
CHECK(bankRootFor("song.rpp", "").empty());
|
||||
}
|
||||
|
||||
static void testBankRootForBothBranchesProduceComparableRoots() {
|
||||
// The same directory reached through either branch is the same string, so a
|
||||
// root recorded under one branch compares equal to the other's.
|
||||
CHECK(bankRootFor("/a/b/song.rpp", "") == bankRootFor("", "/a/b/"));
|
||||
#ifdef _WIN32
|
||||
CHECK(bankRootFor("C:\\A\\B\\song.rpp", "") == bankRootFor("", "c:/a/b"));
|
||||
#endif
|
||||
}
|
||||
|
||||
int main() {
|
||||
testNormalizeSlashes();
|
||||
testNormalizeSlashesCaseFolding();
|
||||
@@ -433,6 +476,12 @@ int main() {
|
||||
testRenderPathsTakeTheirDirectoryVerbatim();
|
||||
testRenderPathsEmptyDirectoryStaysEmpty();
|
||||
testBankRelativeForNameConventionAndEdge();
|
||||
testBankRootForSavedProjectIsTheRppDirectory();
|
||||
testBankRootForSavedProjectIgnoresTheUnsavedRoot();
|
||||
testBankRootForUnsavedProjectFallsBackToTheUnsavedRoot();
|
||||
testBankRootForUnsavedProjectWithNoUnsavedRootIsEmpty();
|
||||
testBankRootForRppWithNoDirectoryIsTreatedAsUnsaved();
|
||||
testBankRootForBothBranchesProduceComparableRoots();
|
||||
|
||||
if (g_fail == 0) std::printf("capture_paths: all tests passed\n");
|
||||
else std::printf("capture_paths: %d CHECK(s) FAILED\n", g_fail);
|
||||
|
||||
Reference in New Issue
Block a user