/**
* Copyright (c) 2010, 2014 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.coordinates.jre;
import static org.eclipse.recommenders.coordinates.DependencyType.JAR;
import static org.eclipse.recommenders.testing.FolderUtils.dir;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import java.io.File;
import java.util.Collection;
import java.util.LinkedList;
import org.eclipse.recommenders.coordinates.DependencyInfo;
import org.eclipse.recommenders.coordinates.IProjectCoordinateAdvisor;
import org.eclipse.recommenders.coordinates.ProjectCoordinate;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import com.google.common.base.Optional;
import com.google.common.collect.Lists;
@RunWith(Parameterized.class)
public class AndroidDirectoryNameAdvisorTest {
private final DependencyInfo dependency;
private final Optional<ProjectCoordinate> expectedCoordinate;
public AndroidDirectoryNameAdvisorTest(String description, DependencyInfo dependency,
Optional<ProjectCoordinate> projectCoordinate) {
this.dependency = dependency;
this.expectedCoordinate = projectCoordinate;
}
@Parameters(name = "{index}: {0}")
public static Collection<Object[]> scenarios() {
LinkedList<Object[]> scenarios = Lists.newLinkedList();
scenarios.add(scenario("Standard path, earliest SDK: Android 1.0",
jar(dir("home", "example", "android-sdks", "platforms", "android-1"), "android.jar"),
ProjectCoordinate.valueOf("com.google.android:android:1.0.0")));
scenarios.add(scenario("Standard path, patch-level SDK: Android 2.3.3 Gingerbread",
jar(dir("home", "example", "android-sdks", "platforms", "android-10"), "android.jar"),
ProjectCoordinate.valueOf("com.google.android:android:2.3.3")));
scenarios.add(scenario("Standard path, latest SDK: Android 6.0 M",
jar(dir("home", "example", "android-sdks", "platforms", "android-23"), "android.jar"),
ProjectCoordinate.valueOf("com.google.android:android:6.0.0")));
scenarios.add(scenario("Standard path, future SDK",
jar(dir("home", "example", "android-sdks", "platforms", "android-24"), "android.jar"), null));
scenarios.add(scenario("Non-standard path",
jar(dir("home", "example", "android-sdks", "platforms", "android"), "android.jar"), null));
scenarios.add(scenario("Non-standard JAR",
jar(dir("home", "example", "android-sdks", "platforms", "android-23"), "android-23.jar"), null));
return scenarios;
}
@Test
public void testScenario() {
IProjectCoordinateAdvisor sut = new AndroidDirectoryNameAdvisor();
Optional<ProjectCoordinate> result = sut.suggest(dependency);
assertThat(result, is(expectedCoordinate));
}
private static DependencyInfo jar(File dir, String name) {
File jar = new File(dir, name);
return new DependencyInfo(jar, JAR);
}
private static Object[] scenario(String description, DependencyInfo dependency,
ProjectCoordinate expectedProjectCoordinate) {
return new Object[] { description, dependency, Optional.fromNullable(expectedProjectCoordinate) };
}
}