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));
        }
Exemple #2
0
        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]));
        }
Exemple #7
0
        public static string GetJvmLibraryPath()
        {
            var jdkDir = ReadJavaSdkDirectoryFromJdkInfoProps();

            if (jdkDir != null)
            {
                return(jdkDir);
            }
            var jdk = JdkInfo.GetKnownSystemJdkInfos()
                      .FirstOrDefault();

            return(jdk?.JdkJvmPath);
        }
Exemple #8
0
        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);
        }