public void JavaSettingsProperties() { var jdk = new JdkInfo(FauxJdkDir); Assert.AreEqual(4, jdk.JavaSettingsPropertyKeys.Count()); Assert.IsFalse(jdk.GetJavaSettingsPropertyValue("does-not-exist", out var _)); Assert.IsFalse(jdk.GetJavaSettingsPropertyValues("does-not-exist", out var _)); Assert.IsTrue(jdk.GetJavaSettingsPropertyValue("java.home", out var home)); Assert.AreEqual(FauxJdkDir, home); Assert.IsTrue(jdk.GetJavaSettingsPropertyValue("java.version", out var version)); Assert.AreEqual("100.100.100-100", version); Assert.IsTrue(jdk.GetJavaSettingsPropertyValue("java.vendor", out var vendor)); Assert.AreEqual("Xamarin.Android Unit Tests", vendor); Assert.AreEqual(vendor, jdk.Vendor); Assert.Throws <InvalidOperationException>(() => jdk.GetJavaSettingsPropertyValue("xamarin.multi-line", out var _)); Assert.IsTrue(jdk.GetJavaSettingsPropertyValues("xamarin.multi-line", out var lines)); Assert.AreEqual(3, lines.Count()); Assert.AreEqual("line the first", lines.ElementAt(0)); Assert.AreEqual("line the second", lines.ElementAt(1)); Assert.AreEqual(".", lines.ElementAt(2)); }
string GetJvmPath() { // NOTE: this doesn't need to use GetRegisteredTaskObjectAssemblyLocal() // because JavaSdkPath is the key and the value is a string. var key = new Tuple <string, string> (nameof(ResolveJdkJvmPath), JavaSdkPath); var cached = BuildEngine4.GetRegisteredTaskObject(key, RegisteredTaskObjectLifetime.AppDomain) as string; if (cached != null) { Log.LogDebugMessage($"Using cached value for {nameof (JdkJvmPath)}: {cached}"); return(cached); } var minVersion = Version.Parse(MinimumSupportedJavaVersion); var maxVersion = Version.Parse(LatestSupportedJavaVersion); JdkInfo info = MonoAndroidHelper.GetJdkInfo(this.CreateTaskLogger(), JavaSdkPath, minVersion, maxVersion); if (info == null) { return(null); } var path = info.JdkJvmPath; if (string.IsNullOrEmpty(path)) { return(null); } BuildEngine4.RegisterTaskObject(key, path, RegisteredTaskObjectLifetime.AppDomain, allowEarlyCollection: false); return(path); }
public void VersionPrefersRelease() { var jdk = new JdkInfo(FauxJdkDir); // Note: `release` has JAVA_VERSION=1.2.3 + BUILD_NUMBER=42, while `java` prints java.version=100.100.100. // We prefer the value constructed from `release`. Assert.AreEqual(jdk.Version, new Version("1.2.3.42")); }
public void ReleaseProperties() { var jdk = new JdkInfo(FauxJdkDir); Assert.AreEqual(3, jdk.ReleaseProperties.Count); Assert.AreEqual("1.2.3", jdk.ReleaseProperties ["JAVA_VERSION"]); Assert.AreEqual("42", jdk.ReleaseProperties ["BUILD_NUMBER"]); Assert.AreEqual("", jdk.ReleaseProperties ["JUST_A_KEY"]); }
static ConfiguredJdkInfo() { var jdkPath = ReadJavaSdkDirectoryFromJdkInfoProps(); if (jdkPath == null) { return; } info = new JdkInfo(jdkPath); }
public void PathPropertyValidation() { var jdk = new JdkInfo(FauxJdkDir); Assert.AreEqual(jdk.HomePath, FauxJdkDir); Assert.IsTrue(File.Exists(jdk.JarPath)); Assert.IsTrue(File.Exists(jdk.JavaPath)); Assert.IsTrue(File.Exists(jdk.JavacPath)); Assert.IsTrue(File.Exists(jdk.JdkJvmPath)); Assert.IsTrue(Directory.Exists(jdk.IncludePath [0])); }
public static string GetJvmLibraryPath() { var jdkDir = ReadJavaSdkDirectoryFromJdkInfoProps(); if (jdkDir != null) { return(jdkDir); } var jdk = JdkInfo.GetKnownSystemJdkInfos() .FirstOrDefault(); return(jdk?.JdkJvmPath); }
public static JdkInfo GetJdkInfo(Action <TraceLevel, string> logger, string javaSdkPath, Version minSupportedVersion, Version maxSupportedVersion) { JdkInfo info = null; try { info = new JdkInfo(javaSdkPath); } catch { info = JdkInfo.GetKnownSystemJdkInfos(logger) .Where(jdk => jdk.Version >= minSupportedVersion && jdk.Version <= maxSupportedVersion) .FirstOrDefault(); } return(info); }
public void Version_ThrowsNotSupportedException() { var dir = Path.GetTempFileName(); File.Delete(dir); try { CreateFauxJdk(dir, releaseVersion: "", releaseBuildNumber: "", javaVersion: ""); var jdk = new JdkInfo(dir); Assert.Throws <NotSupportedException> (() => { var _ = jdk.Version; }); } finally { Directory.Delete(dir, recursive: true); } }
public void ParseMicrosoftJavaVersion() { var dir = Path.GetTempFileName(); File.Delete(dir); try { CreateFauxJdk(dir, releaseVersion: "", releaseBuildNumber: "", javaVersion: "1.2.3-4"); var jdk = new JdkInfo(dir); Assert.AreEqual(new Version(1, 2, 3, 4), jdk.Version); } finally { Directory.Delete(dir, recursive: true); } }
public void ParseOracleJavaVersion() { var dir = Path.GetTempFileName(); File.Delete(dir); try { CreateFauxJdk(dir, releaseVersion: "", releaseBuildNumber: "", javaVersion: "101.102.103_104"); var jdk = new JdkInfo(dir); Assert.AreEqual(new Version(101, 102, 103, 104), jdk.Version); } finally { Directory.Delete(dir, recursive: true); } }
public void GetKnownSystemJdkInfos_PrefersJiJavaHome() { var previous = Environment.GetEnvironmentVariable("JI_JAVA_HOME", EnvironmentVariableTarget.Process); try { Environment.SetEnvironmentVariable("JI_JAVA_HOME", FauxJdkDir, EnvironmentVariableTarget.Process); var defaultJdkDir = JdkInfo.GetKnownSystemJdkInfos() .FirstOrDefault(); Assert.IsNotNull(defaultJdkDir); Assert.AreEqual(FauxJdkDir, defaultJdkDir.HomePath); } finally { Environment.SetEnvironmentVariable("JI_JAVA_HOME", previous, EnvironmentVariableTarget.Process); } }
string GetJvmPath() { // NOTE: this doesn't need to use GetRegisteredTaskObjectAssemblyLocal() // because JavaSdkPath is the key and the value is a string. var key = new Tuple <string, string> (nameof(ResolveJdkJvmPath), JavaSdkPath); var cached = BuildEngine4.GetRegisteredTaskObject(key, RegisteredTaskObjectLifetime.AppDomain) as string; if (cached != null) { Log.LogDebugMessage($"Using cached value for {nameof (JdkJvmPath)}: {cached}"); return(cached); } JdkInfo info = null; try { info = new JdkInfo(JavaSdkPath); } catch { info = JdkInfo.GetKnownSystemJdkInfos(this.CreateTaskLogger()).FirstOrDefault(); } if (info == null) { return(null); } var path = info.JdkJvmPath; if (string.IsNullOrEmpty(path)) { return(null); } BuildEngine4.RegisterTaskObject(key, path, RegisteredTaskObjectLifetime.AppDomain, allowEarlyCollection: false); return(path); }