package org.netbeans.gradle.project.model; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Arrays; import java.util.Collections; import org.junit.Test; import org.netbeans.gradle.project.util.NbFunction; import static org.junit.Assert.*; public class MultiFileModelCacheTest { private static MultiFileModelCache<TestModel> getTestCache(PersistentModelStore<TestModel> persister) { return new MultiFileModelCache<>(persister, new NbFunction<TestModel, PersistentModelKey>() { @Override public PersistentModelKey apply(TestModel model) { return model.getKey(); } }); } private static PersistentModelKey getKey(String rootName, String subName) { return new TestModel(rootName, subName).getKey(); } @Test public void testGetNonExistant() throws Exception { MemPersistentModelStore<TestModel> persister = new MemPersistentModelStore<>(); MultiFileModelCache<TestModel> cache = getTestCache(persister); TestModel model = cache.tryGetModel(getKey("TestRoot", "TestSub")); assertNull(model); } @Test public void testSave1Get1() throws Exception { MemPersistentModelStore<TestModel> persister = new MemPersistentModelStore<>(); MultiFileModelCache<TestModel> cache = getTestCache(persister); TestModel model = new TestModel("TestRoot", "TestSub"); PersistentModelKey key = model.getKey(); assertEquals("saved model count", 0, persister.getSavedModels().size()); cache.saveGradleModels(Collections.singleton(model)); assertEquals("saved model count", 1, persister.getSavedModels().size()); assertSame(model, cache.tryGetModel(key)); } @Test public void testSaveMultipleGet1() throws Exception { MemPersistentModelStore<TestModel> persister = new MemPersistentModelStore<>(); MultiFileModelCache<TestModel> cache = getTestCache(persister); TestModel model1 = new TestModel("TestRoot1", "TestSub1"); PersistentModelKey key1 = model1.getKey(); TestModel model2 = new TestModel("TestRoot2", "TestSub2"); PersistentModelKey key2 = model2.getKey(); assertEquals("saved model count", 0, persister.getSavedModels().size()); cache.saveGradleModels(Arrays.asList(model1, model2)); assertEquals("saved model count", 2, persister.getSavedModels().size()); assertSame(model1, cache.tryGetModel(key1)); assertSame(model2, cache.tryGetModel(key2)); } @Test public void testOverwrite() throws Exception { MemPersistentModelStore<TestModel> persister = new MemPersistentModelStore<>(); MultiFileModelCache<TestModel> cache = getTestCache(persister); TestModel model1 = new TestModel("TestRoot", "TestSub"); TestModel model2 = new TestModel("TestRoot", "TestSub"); PersistentModelKey key = model1.getKey(); cache.saveGradleModels(Collections.singleton(model1)); cache.saveGradleModels(Collections.singleton(model2)); assertEquals("saved model count", 1, persister.getSavedModels().size()); assertSame(model2, cache.tryGetModel(key)); } private static final class TestModel { private final String rootName; private final String subName; public TestModel(String rootName, String subName) { this.rootName = rootName; this.subName = subName; } public PersistentModelKey getKey() { Path root = Paths.get(rootName); return new PersistentModelKey(root, root.resolve(subName)); } @Override public String toString() { return "TestModel{" + "rootName=" + rootName + ", subName=" + subName + '}'; } } }