/**
* Copyright (c) 2010, 2013 Darmstadt University of Technology.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Andreas Sewe - initial API and implementation
*/
package org.eclipse.recommenders.models.advisors;
import static com.google.common.io.Files.append;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.eclipse.recommenders.coordinates.DependencyType.JAR;
import static org.eclipse.recommenders.testing.FolderUtils.dir;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.assertThat;
import static org.mockito.Matchers.*;
import static org.mockito.Mockito.*;
import java.io.File;
import java.io.IOException;
import org.eclipse.recommenders.coordinates.DependencyInfo;
import org.eclipse.recommenders.coordinates.ProjectCoordinate;
import org.eclipse.recommenders.models.IModelRepository;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import com.google.common.base.Optional;
public class SharedManualMappingsAdvisorTest {
@Rule
public TemporaryFolder temp = new TemporaryFolder();
private File mappingsFile;
private SharedManualMappingsAdvisor sut;
@Before
public void setUp() throws IOException {
mappingsFile = temp.newFile();
IModelRepository repository = mock(IModelRepository.class);
when(repository.resolve(eq(SharedManualMappingsAdvisor.MAPPINGS), anyBoolean()))
.thenReturn(Optional.of(mappingsFile));
sut = new SharedManualMappingsAdvisor(repository);
}
@Test
public void testEmptyMappingsFile() throws IOException {
appendLine("");
Optional<ProjectCoordinate> suggestion = sut
.doSuggest(jarDependency(dir("home", "user", "workspace", "project", "lib", "example.jar")));
assertThat(suggestion.isPresent(), is(false));
}
@Test
public void testSingleEntryMappingsFile() throws IOException {
appendLine("example.jar=org.example:example:1.0.0");
Optional<ProjectCoordinate> suggestion = sut
.doSuggest(jarDependency(dir("home", "user", "workspace", "project", "lib", "example.jar")));
assertThat(suggestion.get(), is(equalTo(ProjectCoordinate.valueOf("org.example:example:1.0.0"))));
}
@Test
public void testMultiEntryMappingsFile() throws IOException {
appendLine("first.jar=org.example:first:1.0.0");
appendLine("second.jar=org.example:second:2.0.0");
Optional<ProjectCoordinate> suggestion = sut
.doSuggest(jarDependency(dir("home", "user", "workspace", "project", "lib", "second.jar")));
assertThat(suggestion.get(), is(equalTo(ProjectCoordinate.valueOf("org.example:second:2.0.0"))));
}
@Test
public void testMismatch() throws IOException {
appendLine("mismatch.jar=org.example:mismatch:1.0.0");
Optional<ProjectCoordinate> suggestion = sut
.doSuggest(jarDependency(dir("home", "user", "workspace", "project", "lib", "example.jar")));
assertThat(suggestion.isPresent(), is(false));
}
@Test
public void testFirstMatchWins() throws IOException {
appendLine("*.jar=org.example:any:0.0.0");
appendLine("example.jar=org.example:example:1.0.0");
Optional<ProjectCoordinate> suggestion = sut
.doSuggest(jarDependency(dir("home", "user", "workspace", "project", "lib", "example.jar")));
assertThat(suggestion.get(), is(equalTo(ProjectCoordinate.valueOf("org.example:any:0.0.0"))));
}
@Test
public void testEmptyLinesAreAllowed() throws IOException {
appendLine("");
appendLine("*.jar=org.example:any:0.0.0");
Optional<ProjectCoordinate> suggestion = sut
.doSuggest(jarDependency(dir("home", "user", "workspace", "project", "lib", "example.jar")));
assertThat(suggestion.get(), is(equalTo(ProjectCoordinate.valueOf("org.example:any:0.0.0"))));
}
@Test
public void testCommentsAreAllowed() throws IOException {
appendLine("# A comment");
appendLine("*.jar=org.example:any:0.0.0");
Optional<ProjectCoordinate> suggestion = sut
.doSuggest(jarDependency(dir("home", "user", "workspace", "project", "lib", "example.jar")));
assertThat(suggestion.get(), is(equalTo(ProjectCoordinate.valueOf("org.example:any:0.0.0"))));
}
private void appendLine(String line) throws IOException {
append(line + '\n', mappingsFile, UTF_8);
}
private DependencyInfo jarDependency(File file) {
return new DependencyInfo(file, JAR);
}
}