blob: c8fb2d56e8171f8ebb6ba07f2b417724394e6862 [file] [log] [blame]
package org.apache.maven.surefire.its;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
import org.apache.maven.surefire.its.fixture.SurefireLauncher;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import java.util.StringTokenizer;
import static org.apache.maven.surefire.its.fixture.SurefireLauncher.EXT_JDK_HOME;
import static org.apache.maven.surefire.its.fixture.SurefireLauncher.EXT_JDK_HOME_KEY;
import static org.junit.Assert.fail;
import static org.junit.Assume.assumeTrue;
/**
* Abstract test class for Jigsaw tests.
*
* @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a>
* @since 2.20.1
*/
public abstract class AbstractJigsawIT
extends SurefireJUnit4IntegrationTestCase
{
private static final double JIGSAW_JAVA_VERSION = 9.0d;
protected abstract String getProjectDirectoryName();
protected SurefireLauncher assumeJava9() throws IOException
{
assumeTrue( "There's no JDK 9 provided.",
isJavaVersion9AtLeast() || EXT_JDK_HOME != null && isExtJavaVerion9AtLeast() );
// fail( EXT_JDK_HOME_KEY + " was provided with value " + EXT_JDK_HOME + " but it is not Jigsaw Java 9." );
SurefireLauncher launcher = unpack();
return EXT_JDK_HOME == null ? launcher : launcher.setLauncherJavaHome( EXT_JDK_HOME );
}
protected SurefireLauncher assumeJava9Property() throws IOException
{
assumeTrue( "There's no JDK 9 provided.", EXT_JDK_HOME != null && isExtJavaVerion9AtLeast() );
return unpack();
}
protected String getSuffix()
{
return null;
}
private SurefireLauncher unpack()
{
return unpack( getProjectDirectoryName(), getSuffix() );
}
private static boolean isJavaVersion9AtLeast()
{
return Double.valueOf( System.getProperty( "java.specification.version" ) ) >= JIGSAW_JAVA_VERSION;
}
private static boolean isExtJavaVerion9AtLeast() throws IOException
{
File release = new File( EXT_JDK_HOME, "release" );
assumeTrue( EXT_JDK_HOME_KEY + " was provided with value " + EXT_JDK_HOME + " but file does not exist "
+ EXT_JDK_HOME + File.separator + "release", release.exists() );
Properties properties = new Properties();
try ( InputStream is = new FileInputStream( release ) )
{
properties.load( is );
}
String javaVersion = properties.getProperty( "JAVA_VERSION" ).replace( "\"", "" );
StringTokenizer versions = new StringTokenizer( javaVersion, "._" );
if ( versions.countTokens() == 1 )
{
javaVersion = versions.nextToken();
}
else if ( versions.countTokens() >= 2 )
{
javaVersion = versions.nextToken() + "." + versions.nextToken();
}
else
{
fail( "unexpected java version format" );
}
return Double.valueOf( javaVersion ) >= JIGSAW_JAVA_VERSION;
}
}