+ * Implementations must return a newly allocated map on each call; the caller may retain and use it directly.
+ */
+ Map Each subclass {@linkplain #createManager(int) builds} the version manager with a real {@link Storage}
+ * instance rooted under a JUnit temporary directory (see for example {@code TestOMStorage} in ozone-manager).
+ * Assertions use {@link ComponentVersionManager#getStorageForTesting()} and {@link Storage#getApparentVersion()}
+ * to confirm what was persisted, instead of Mockito interaction verification.
*/
public abstract class AbstractComponentVersionManagerTest {
+ /**
+ * Creates a new manager for {@code serializedApparentVersion}. The implementation must initialize real
+ * {@link Storage} on disk with that apparent version (and return a manager whose
+ * {@link ComponentVersionManager#getStorageForTesting()} is that instance).
+ */
protected abstract ComponentVersionManager createManager(int serializedApparentVersion) throws IOException;
protected abstract List