package org.eclipse.recommenders.internal.snipmatch.rcp; import static org.eclipse.recommenders.utils.Checks.cast; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.assertThat; import java.io.File; import java.io.IOException; import java.util.Collection; import org.apache.commons.lang3.builder.EqualsBuilder; import org.eclipse.recommenders.snipmatch.rcp.model.EclipseGitSnippetRepositoryConfiguration; import org.eclipse.recommenders.snipmatch.rcp.model.SnipmatchRcpModelFactory; import org.eclipse.recommenders.snipmatch.rcp.model.SnippetRepositoryConfigurations; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; public class RepositoryConfigurationsTest { @Rule public TemporaryFolder folder = new TemporaryFolder(); private File file; @Before public void init() throws IOException { file = folder.newFile("configurations.config"); } @Test public void testLoadingFromNotExistingFile() { SnippetRepositoryConfigurations actual = RepositoryConfigurations.loadConfigurations(file); assertThat(actual.getRepos().size(), is(0)); } @Test public void testStoringAndLoadingWithEmptyConfigurationList() { SnippetRepositoryConfigurations storedConfigurations = SnipmatchRcpModelFactory.eINSTANCE .createSnippetRepositoryConfigurations(); RepositoryConfigurations.storeConfigurations(storedConfigurations, file); SnippetRepositoryConfigurations loadedConfiguriations = RepositoryConfigurations.loadConfigurations(file); assertThat(loadedConfiguriations.getRepos(), equalTo(storedConfigurations.getRepos())); } @Test public void testStoringAndLoadingWithOneConfiguration() { SnippetRepositoryConfigurations configurations = SnipmatchRcpModelFactory.eINSTANCE .createSnippetRepositoryConfigurations(); EclipseGitSnippetRepositoryConfiguration expected = createMockedConfiguration("TestConfig1", "TestConfig1Description", "http://www.example.com/repo1"); configurations.getRepos().addAll(Lists.newArrayList(expected)); RepositoryConfigurations.storeConfigurations(configurations, file); EclipseGitSnippetRepositoryConfiguration actual = cast(Iterables.getOnlyElement(RepositoryConfigurations .loadConfigurations(file).getRepos())); assertThat(equal(actual, expected), is(true)); assertThat(equal(actual, expected), is(true)); } @Test public void testStoringAndLoadingForMoreConfigurations() { SnippetRepositoryConfigurations configurations = SnipmatchRcpModelFactory.eINSTANCE .createSnippetRepositoryConfigurations(); EclipseGitSnippetRepositoryConfiguration expected1 = createMockedConfiguration("TestConfig1", "TestConfig1Description", "http://www.example.com/repo1"); EclipseGitSnippetRepositoryConfiguration expected2 = createMockedConfiguration("TestConfig2", "TestConfig2Description", "http://www.example.com/repo2"); configurations.getRepos().addAll(Lists.newArrayList(expected1, expected2)); RepositoryConfigurations.storeConfigurations(configurations, file); Collection<EclipseGitSnippetRepositoryConfiguration> loadedConfigurations = cast(RepositoryConfigurations .loadConfigurations(file).getRepos()); assertThat(contains(expected1, loadedConfigurations), is(true)); assertThat(contains(expected2, loadedConfigurations), is(true)); } private static EclipseGitSnippetRepositoryConfiguration createMockedConfiguration(String name, String description, String url) { EclipseGitSnippetRepositoryConfiguration configuration = SnipmatchRcpModelFactory.eINSTANCE .createEclipseGitSnippetRepositoryConfiguration(); configuration.setName(name); configuration.setDescription(description); configuration.setUrl(url); return configuration; } private static boolean equal(EclipseGitSnippetRepositoryConfiguration o1, EclipseGitSnippetRepositoryConfiguration o2) { EqualsBuilder builder = new EqualsBuilder(); builder.append(o1.getName(), o2.getName()); builder.append(o1.getDescription(), o2.getDescription()); builder.append(o1.getUrl(), o2.getUrl()); return builder.build(); } private static boolean contains(EclipseGitSnippetRepositoryConfiguration configuration, Collection<EclipseGitSnippetRepositoryConfiguration> collection) { for (EclipseGitSnippetRepositoryConfiguration eclipseGitSnippetRepositoryConfiguration : collection) { if (equal(configuration, eclipseGitSnippetRepositoryConfiguration)) { return true; } } return false; } }