// Copyright 2016 Pants project contributors (see CONTRIBUTORS.md).
// Licensed under the Apache License, Version 2.0 (see LICENSE).
package com.twitter.intellij.pants.model;
import com.intellij.testFramework.LightPlatformTestCase;
import com.twitter.intellij.pants.ui.PantsConsoleManager;
public class SimpleExportResultTest extends LightPlatformTestCase {
private static boolean STRICT = true;
public void testParseExport_1_0_7() throws Exception {
final String exportOutput =
"{\n" +
" \"libraries\": {},\n" +
" \"version\": \"1.0.7\",\n" +
" \"targets\": {},\n" +
" \"preferred_jvm_distributions\": {\n" +
" \"java7\": {\n" +
" \"strict\": \"/Library/Java/JavaVirtualMachines/jdk1.7.0_72.jdk/Contents/Home\",\n" +
" \"non_strict\": \"/Library/Java/JavaVirtualMachines/jdk1.7.0_72.jdk/Contents/Home\"\n" +
" },\n" +
" \"java6\": {\n" +
" \"strict\": \"/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home\",\n" +
" \"non_strict\": \"/Library/Java/JavaVirtualMachines/jdk1.7.0_72.jdk/Contents/Home\"\n" +
" },\n" +
" \"java8\": {\n" +
" \"strict\": \"/Library/Java/JavaVirtualMachines/jdk1.8.0_65.jdk/Contents/Home\",\n" +
" \"non_strict\": \"/Library/Java/JavaVirtualMachines/jdk1.8.0_65.jdk/Contents/Home\"\n" +
" }\n" +
" },\n" +
" \"jvm_platforms\": {\n" +
" \"platforms\": {\n" +
" \"java7\": {\n" +
" \"source_level\": \"1.7\",\n" +
" \"args\": [],\n" +
" \"target_level\": \"1.7\"\n" +
" },\n" +
" \"java6\": {\n" +
" \"source_level\": \"1.6\",\n" +
" \"args\": [],\n" +
" \"target_level\": \"1.6\"\n" +
" },\n" +
" \"java8\": {\n" +
" \"source_level\": \"1.8\",\n" +
" \"args\": [],\n" +
" \"target_level\": \"1.8\"\n" +
" }\n" +
" },\n" +
" \"default_platform\": \"java6\"\n" +
" }\n" +
"}";
SimpleExportResult exportResult = SimpleExportResult.parse(exportOutput);
assertEquals("1.0.7", exportResult.getVersion());
assertEquals("java6", exportResult.getJvmPlatforms().getDefaultPlatform());
assertEquals(
"/Library/Java/JavaVirtualMachines/jdk1.7.0_72.jdk/Contents/Home",
exportResult.getJdkHome(!STRICT).get()
);
assertEquals(
"/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home",
exportResult.getJdkHome(STRICT).get()
);
assertTrue(exportResult.getJdkHome(STRICT).isPresent());
}
public void testParseExport_1_0_6() throws Exception {
final String exportOutput =
"{\n" +
" \"libraries\": {},\n" +
" \"version\": \"1.0.6\",\n" +
" \"targets\": {},\n" +
" \"jvm_platforms\": {\n" +
" \"platforms\": {\n" +
" \"java7\": {\n" +
" \"source_level\": \"1.7\",\n" +
" \"args\": [],\n" +
" \"target_level\": \"1.7\"\n" +
" },\n" +
" \"java6\": {\n" +
" \"source_level\": \"1.6\",\n" +
" \"args\": [],\n" +
" \"target_level\": \"1.6\"\n" +
" },\n" +
" \"java8\": {\n" +
" \"source_level\": \"1.8\",\n" +
" \"args\": [],\n" +
" \"target_level\": \"1.8\"\n" +
" }\n" +
" },\n" +
" \"default_platform\": \"java6\"\n" +
" }\n" +
"}";
SimpleExportResult exportResult = SimpleExportResult.parse(exportOutput);
assertEquals("1.0.6", exportResult.getVersion());
assertEquals("java6", exportResult.getJvmPlatforms().getDefaultPlatform());
assertNull(exportResult.getPreferredJvmDistributions());
}
public void testExportCache() {
SimpleExportResult export_a = SimpleExportResult.getExportResult("./pants");
SimpleExportResult export_b = SimpleExportResult.getExportResult("./pants");
// export_b should be cached result, so identical to export_a
assertTrue(export_a == export_b);
SimpleExportResult.clearCache();
SimpleExportResult export_c = SimpleExportResult.getExportResult("./pants");
assertTrue(export_a != export_c);
}
public void testMissingStrict() {
final String exportOutput =
"{\n" +
" \"preferred_jvm_distributions\": {\n" +
" \"java7\": {\n" +
" \"non_strict\": \"/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home\"\n" +
" },\n" +
" \"java7-jdk8\": {\n" +
" \"strict\": \"/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home\",\n" +
" \"non_strict\": \"/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home\"\n" +
" },\n" +
" \"java8\": {\n" +
" \"strict\": \"/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home\",\n" +
" \"non_strict\": \"/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home\"\n" +
" }\n" +
" },\n" +
" \"libraries\": {},\n" +
" \"version\": \"1.0.7\",\n" +
" \"targets\": {},\n" +
" \"jvm_platforms\": {\n" +
" \"platforms\": {\n" +
" \"java7\": {\n" +
" \"source_level\": \"1.7\",\n" +
" \"args\": [],\n" +
" \"target_level\": \"1.7\"\n" +
" },\n" +
" \"java7-jdk8\": {\n" +
" \"source_level\": \"1.7\",\n" +
" \"args\": [],\n" +
" \"target_level\": \"1.8\"\n" +
" },\n" +
" \"java8\": {\n" +
" \"source_level\": \"1.8\",\n" +
" \"args\": [],\n" +
" \"target_level\": \"1.8\"\n" +
" }\n" +
" },\n" +
" \"default_platform\": \"java7\"\n" +
" }\n" +
"}";
SimpleExportResult exportResult = SimpleExportResult.parse(exportOutput);
// java7 has no strict jdk home path.
assertFalse(exportResult.getJdkHome(STRICT).isPresent());
}
public void testNoDefaultPlatform() {
final String exportOutput =
"{\n" +
" \"preferred_jvm_distributions\": {\n" +
" \"java7\": {\n" +
" \"strict\": \"/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home\",\n" +
" \"non_strict\": \"/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home\"\n" +
" },\n" +
" \"java6\": {\n" +
" \"non_strict\": \"/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home\"\n" +
" },\n" +
" \"java8\": {\n" +
" \"strict\": \"/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home\",\n" +
" \"non_strict\": \"/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home\"\n" +
" }\n" +
" },\n" +
" \"libraries\": {},\n" +
" \"version\": \"1.0.9\",\n" +
" \"targets\": {},\n" +
" \"jvm_platforms\": {\n" +
" \"platforms\": {\n" +
" \"java7\": {\n" +
" \"source_level\": \"1.7\",\n" +
" \"args\": [],\n" +
" \"target_level\": \"1.7\"\n" +
" },\n" +
" \"java6\": {\n" +
" \"source_level\": \"1.6\",\n" +
" \"args\": [],\n" +
" \"target_level\": \"1.6\"\n" +
" },\n" +
" \"java8\": {\n" +
" \"source_level\": \"1.8\",\n" +
" \"args\": [],\n" +
" \"target_level\": \"1.8\"\n" +
" }\n" +
" },\n" +
" \"default_platform\": \"(DistributionLocator.cached().version 1.8)\"\n" +
" }\n" +
"}";
SimpleExportResult exportResult = SimpleExportResult.parse(exportOutput);
// (DistributionLocator.cached().version 1.8) does not correspond to any platform
// as far as this plugin is concerned.
assertFalse(exportResult.getJdkHome(STRICT).isPresent());
}
@Override
protected void tearDown() throws Exception {
PantsConsoleManager.disposeAll();
super.tearDown();
}
}