/** * 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: * Olav Lenz - initial API and implementation */ package org.eclipse.recommenders.coordinates.jre; import static org.junit.Assert.*; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import org.eclipse.recommenders.coordinates.DependencyInfo; import org.eclipse.recommenders.coordinates.DependencyType; import org.eclipse.recommenders.coordinates.IProjectCoordinateAdvisor; import org.eclipse.recommenders.coordinates.ProjectCoordinate; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; import com.google.common.base.Optional; public class JREReleaseFileAdvisorTest { @Rule public final TemporaryFolder tmp = new TemporaryFolder(); private File javaHomeDirectory; private File releaseFile; private File createDummyFile() throws IOException { return tmp.newFolder("dummy.jar"); } private void createJavaHomeDirectory() throws IOException { javaHomeDirectory = tmp.newFolder("JAVA_HOME"); } private void createReleaseFile() throws IOException { releaseFile = tmp.newFile("JAVA_HOME" + File.separator + "release"); } private void fillReleaseFileWithVersion(CharSequence version) throws IOException { BufferedWriter writer = new BufferedWriter(new FileWriter(releaseFile, true)); writer.append("JAVA_VERSION=\"").append(version).append("\"\n"); writer.close(); } private void fillReleaseFileWithOtherStuff() throws IOException { BufferedWriter writer = new BufferedWriter(new FileWriter(releaseFile, true)); writer.write("OS_NAME=\"Windows\"\n"); writer.write("OS_VERSION=\"5.2\"\n"); writer.write("OS_ARCH=\"amd64\"\n"); writer.close(); } @Test public void testInvalidType() throws IOException { DependencyInfo info = new DependencyInfo(createDummyFile(), DependencyType.JAR); IProjectCoordinateAdvisor sut = new JREReleaseFileAdvisor(); Optional<ProjectCoordinate> optionalProjectCoordinate = sut.suggest(info); assertFalse(optionalProjectCoordinate.isPresent()); } @Test public void testValidPreJava9ReleaseFile() throws IOException { createJavaHomeDirectory(); createReleaseFile(); fillReleaseFileWithVersion("1.6.0"); fillReleaseFileWithOtherStuff(); DependencyInfo info = new DependencyInfo(javaHomeDirectory, DependencyType.JRE); IProjectCoordinateAdvisor sut = new JREReleaseFileAdvisor(); Optional<ProjectCoordinate> optionalProjectCoordinate = sut.suggest(info); assertEquals(new ProjectCoordinate("jre", "jre", "1.6.0"), optionalProjectCoordinate.get()); } @Test public void testValidPostJava9ReleaseFile() throws IOException { createJavaHomeDirectory(); createReleaseFile(); fillReleaseFileWithVersion("9"); fillReleaseFileWithOtherStuff(); DependencyInfo info = new DependencyInfo(javaHomeDirectory, DependencyType.JRE); IProjectCoordinateAdvisor sut = new JREReleaseFileAdvisor(); Optional<ProjectCoordinate> optionalProjectCoordinate = sut.suggest(info); assertEquals(new ProjectCoordinate("jre", "jre", "1.9.0"), optionalProjectCoordinate.get()); } @Test public void testReleaseFileWithoutVersion() throws IOException { createJavaHomeDirectory(); createReleaseFile(); fillReleaseFileWithOtherStuff(); DependencyInfo info = new DependencyInfo(javaHomeDirectory, DependencyType.JRE); IProjectCoordinateAdvisor sut = new JREReleaseFileAdvisor(); Optional<ProjectCoordinate> optionalProjectCoordinate = sut.suggest(info); assertFalse(optionalProjectCoordinate.isPresent()); } @Test public void testMissingReleaseFile() throws IOException { createJavaHomeDirectory(); DependencyInfo info = new DependencyInfo(javaHomeDirectory, DependencyType.JRE); IProjectCoordinateAdvisor sut = new JREReleaseFileAdvisor(); Optional<ProjectCoordinate> optionalProjectCoordinate = sut.suggest(info); assertFalse(optionalProjectCoordinate.isPresent()); } }