Fix Wave-2 review findings: FX union on re-park, per-project reconcile memo, shared undo mask, decayed test oracle
This commit is contained in:
@@ -91,6 +91,47 @@ static void testAReapplyThatWroteNothingLeavesNoPointAtAll() {
|
||||
CHECK(!applyMintsUndoPoint(/*realSwitch=*/false, /*wroteAnything=*/false));
|
||||
}
|
||||
|
||||
// -- the re-park union: a plugin added between a restore and the next park --------
|
||||
//
|
||||
// Sequence under test: park -> restore -> user adds plugin P -> re-park. Without the
|
||||
// union, the record's prior verbatim-keep would drop P silently -- the reclaimer
|
||||
// offlines it with everything else, and no snapshot ever names it to bring it back.
|
||||
|
||||
static void testAPluginAddedWhileRestoredJoinsTheUnionRatherThanBeingDropped() {
|
||||
const std::vector<FxOfflineState> prior{
|
||||
FxOfflineState{"{FX-A}", 1}, FxOfflineState{"{FX-B}", 0}};
|
||||
const std::vector<FxOfflineState> live{
|
||||
FxOfflineState{"{FX-A}", 0}, FxOfflineState{"{FX-B}", 0}, FxOfflineState{"{FX-P}", 0}};
|
||||
|
||||
const std::vector<FxOfflineState> merged = unionFxOfflineOnRepark(prior, live);
|
||||
|
||||
CHECK(merged.size() == 3);
|
||||
bool foundA = false, foundB = false, foundP = false;
|
||||
for (const FxOfflineState& fx : merged) {
|
||||
if (fx.fxGuid == "{FX-A}") { foundA = true; CHECK(fx.offline == 1); } // record wins
|
||||
if (fx.fxGuid == "{FX-B}") { foundB = true; CHECK(fx.offline == 0); } // record wins
|
||||
if (fx.fxGuid == "{FX-P}") { foundP = true; CHECK(fx.offline == 0); } // added from live
|
||||
}
|
||||
CHECK(foundA && foundB && foundP);
|
||||
}
|
||||
|
||||
static void testAPluginRemovedWhileRestoredStaysInTheUnionForResolveFxRestoreToDrop() {
|
||||
// The union is not where a removed plugin's entry disappears -- resolveFxRestore
|
||||
// owns that at restore time (missingIdentity, reported), so the merge must keep
|
||||
// naming it rather than quietly forgetting it here.
|
||||
const std::vector<FxOfflineState> prior{
|
||||
FxOfflineState{"{FX-A}", 1}, FxOfflineState{"{FX-REMOVED}", 1}};
|
||||
const std::vector<FxOfflineState> live{FxOfflineState{"{FX-A}", 0}};
|
||||
|
||||
const std::vector<FxOfflineState> merged = unionFxOfflineOnRepark(prior, live);
|
||||
|
||||
CHECK(merged.size() == 2);
|
||||
bool foundRemoved = false;
|
||||
for (const FxOfflineState& fx : merged)
|
||||
if (fx.fxGuid == "{FX-REMOVED}") foundRemoved = true;
|
||||
CHECK(foundRemoved);
|
||||
}
|
||||
|
||||
int main() {
|
||||
testEachDrivenFlagAddressesItsOwnReaperParameter();
|
||||
testNoDrivenFlagCanEverAddressMuteOrSolo();
|
||||
@@ -100,6 +141,9 @@ int main() {
|
||||
testAReapplyThatWroteSomethingLeavesAPoint();
|
||||
testAReapplyThatWroteNothingLeavesNoPointAtAll();
|
||||
|
||||
testAPluginAddedWhileRestoredJoinsTheUnionRatherThanBeingDropped();
|
||||
testAPluginRemovedWhileRestoredStaysInTheUnionForResolveFxRestoreToDrop();
|
||||
|
||||
if (g_fail == 0) std::printf("All tests passed.\n");
|
||||
return g_fail ? 1 : 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user