Beispiel #1
0
    def test_strict_usage(self):
        init_subsystem(
            JvmPlatform,
            options={
                "jvm-platform": {
                    "platforms": {
                        "default-platform": {"target": "9"},
                        "8-platform": {"target": "8"},
                        "9-platform": {"target": "9"},
                        "strict-8-platform": {"target": "8", "strict": True},
                        "strict-9-platform": {"target": "9", "strict": True},
                    },
                    "default_platform": "default-platform",
                    "default_runtime_platform": None,
                }
            },
        )
        instance = JvmPlatform.global_instance()
        strict_8_platform = instance.get_platform_by_name("strict-8-platform")
        default_9_platform = instance.default_platform
        # TODO maybe this should use the runtime platform
        assert instance._preferred_jvm_distribution_args([]) == {
            "jdk": False,
        }
        assert JvmPlatform._preferred_jvm_distribution_args([default_9_platform]) == {
            "minimum_version": Revision.lenient("9.0.0"),
            "maximum_version": None,
            "jdk": False,
        }
        assert JvmPlatform._preferred_jvm_distribution_args([default_9_platform], strict=True) == {
            "minimum_version": Revision.lenient("9.0.0"),
            "maximum_version": Revision.lenient("9.0.9999"),
            "jdk": False,
        }
        assert instance._preferred_jvm_distribution_args([strict_8_platform]) == {
            "minimum_version": Revision.lenient("1.8.0"),
            "maximum_version": Revision.lenient("1.8.9999"),
            "jdk": False,
        }
        assert instance._preferred_jvm_distribution_args([strict_8_platform], strict=False) == {
            "minimum_version": Revision.lenient("1.8.0"),
            "maximum_version": None,
            "jdk": False,
        }

        with self.assertRaisesRegex(
            JvmPlatform.IncompatiblePlatforms,
            "lenient platform with higher minimum version, 9, than strict requirement of 1.8",
        ):
            # requested strict 8 & lenient 9.
            # fail because 9 is lower bound
            JvmPlatform._preferred_jvm_distribution_args(
                [
                    instance.get_platform_by_name("9-platform"),
                    instance.get_platform_by_name("strict-8-platform"),
                ]
            )
        with self.assertRaisesRegex(
            JvmPlatform.IncompatiblePlatforms,
            "Multiple strict platforms with differing target releases were found: 1.8, 9",
        ):
            # two different strict platforms can't work
            JvmPlatform._preferred_jvm_distribution_args(
                [
                    instance.get_platform_by_name("strict-9-platform"),
                    instance.get_platform_by_name("strict-8-platform"),
                ]
            )
        # two of the same strict platform thumbs up
        assert JvmPlatform._preferred_jvm_distribution_args(
            [
                instance.get_platform_by_name("strict-8-platform"),
                instance.get_platform_by_name("strict-8-platform"),
            ]
        ) == {
            "minimum_version": Revision.lenient("1.8.0"),
            "maximum_version": Revision.lenient("1.8.9999"),
            "jdk": False,
        }
        # strict highest, matching highest non-strict, other non-strict
        assert JvmPlatform._preferred_jvm_distribution_args(
            [
                instance.get_platform_by_name("strict-9-platform"),
                instance.get_platform_by_name("9-platform"),
                instance.get_platform_by_name("8-platform"),
            ]
        ) == {
            "minimum_version": Revision.lenient("9.0.0"),
            "maximum_version": Revision.lenient("9.0.9999"),
            "jdk": False,
        }