blob: 1d9d9ffe85c4bfd3ddd9b5dfe88bd428092c6c39 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2022 Andrey Loskutov, and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Andrey Loskutov (loskutov@gmx.de) - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.core.tests.compiler.util;
import java.io.File;
import java.nio.file.Paths;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.tests.junit.extension.TestCase;
import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
import org.eclipse.jdt.internal.compiler.util.JRTUtil;
import org.junit.Before;
import org.junit.Test;
public class JrtUtilTest extends TestCase {
private String javaSpecVersion;
private String javaHome;
private File image;
private String jdkRelease;
public JrtUtilTest(String name) {
super(name);
}
@Before
@Override
protected void setUp() throws Exception {
super.setUp();
this.javaSpecVersion = System.getProperty("java.specification.version", null);
assertNotNull("java.specification.version is not defined", this.javaSpecVersion);
this.javaHome = System.getProperty("java.home", null);
assertNotNull("java.home is not defined", this.javaHome);
this.image = Paths.get(this.javaHome).toFile();
assertTrue("java.home points to invalid path", this.image.isDirectory());
this.jdkRelease = JRTUtil.getJdkRelease(this.image);
}
@Test
public void testGetReleaseVersion() {
long expectedLevel = CompilerOptions.versionToJdkLevel(this.javaSpecVersion);
long seenLevel = CompilerOptions.versionToJdkLevel(this.jdkRelease);
assertEquals("Unexpected version: " + this.jdkRelease + ", not matching " + this.javaSpecVersion, expectedLevel, seenLevel);
int sameRelease = JavaCore.compareJavaVersions(this.javaSpecVersion, this.jdkRelease);
assertEquals("Unexpected version: " + this.jdkRelease + ", not matching " + this.javaSpecVersion, sameRelease, 0);
}
@Test
public void testGetNewJrtFileSystem() {
int majorVersionSegment = getMajorVersionSegment(this.jdkRelease);
Object jrtSystem = JRTUtil.getJrtSystem(this.image);
Object jrtSystem2 = JRTUtil.getJrtSystem(this.image, String.valueOf(majorVersionSegment));
assertSame(jrtSystem, jrtSystem2);
jrtSystem2 = JRTUtil.getJrtSystem(this.image, String.valueOf(majorVersionSegment-2));
assertNotSame(jrtSystem, jrtSystem2);
Object jrtSystem3 = JRTUtil.getJrtSystem(this.image);
assertSame(jrtSystem, jrtSystem3);
}
private static int getMajorVersionSegment(String releaseVersion) {
int dot = releaseVersion.indexOf('.');
if (dot > 0) {
return Integer.parseInt(releaseVersion.substring(0, dot));
}
return Integer.parseInt(releaseVersion);
}
}