# This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. from failedplatform import FailedPlatform from mozunit import main def test_get_possible_build_types(): """Test get_possible_build_types""" fp = FailedPlatform({}) assert fp.get_possible_build_types() == [] fp = FailedPlatform({"build_type1": {"test_variant1": {}}}) assert fp.get_possible_build_types() == ["build_type1"] fp = FailedPlatform( {"build_type1": {"test_variant1": {}}, "build_type2": {"test_variant1": {}}} ) assert fp.get_possible_build_types() == ["build_type1", "build_type2"] def test_get_possible_test_variants(): """Test get_possible_test_variants""" fp = FailedPlatform({}) assert fp.get_possible_test_variants("") == [] fp = FailedPlatform({"build_type1": {"test_variant1": {}}}) assert fp.get_possible_test_variants("unknown") == [] fp = FailedPlatform({"build_type1": {"test_variant1": {}}}) assert fp.get_possible_test_variants("build_type1") == ["test_variant1"] fp = FailedPlatform( {"build_type1": {"test_variant1": {}}, "build_type2": {"test_variant2": {}}} ) assert fp.get_possible_test_variants("build_type2") == ["test_variant2"] fp = FailedPlatform({"build_type1": {"test_variant1": {}, "test_variant2": {}}}) assert fp.get_possible_test_variants("build_type1") == [ "test_variant1", "test_variant2", ] def test_is_full_test_variants_fail(): """Test is_full_test_variants_fail""" fp = FailedPlatform({}) assert not fp.is_full_test_variants_fail("") fp = FailedPlatform({"build_type1": {}}) assert not fp.is_full_test_variants_fail("build_type1") fp = FailedPlatform({"build_type1": {"test_variant1": {}}}) assert not fp.is_full_test_variants_fail("build_type1") fp = FailedPlatform({"build_type1": {"test_variant1": {}}}) fp.failures["build_type1"] = {"test_variant2"} assert not fp.is_full_test_variants_fail("build_type1") fp = FailedPlatform({"build_type1": {"test_variant1": {}}}) fp.failures["build_type1"] = {"test_variant1"} assert fp.is_full_test_variants_fail("build_type1") fp = FailedPlatform({"build_type1": {"test_variant1": {}, "test_variant2": {}}}) fp.failures["build_type1"] = {"test_variant1"} assert not fp.is_full_test_variants_fail("build_type1") fp = FailedPlatform({"build_type1": {"test_variant1": {}, "test_variant2": {}}}) fp.failures["build_type1"] = {"test_variant1", "test_variant2"} assert fp.is_full_test_variants_fail("build_type1") def test_is_full_fail(): """Test is_full_fail""" fp = FailedPlatform({}) assert not fp.is_full_fail() fp = FailedPlatform({"build_type1": {}}) assert not fp.is_full_fail() fp = FailedPlatform({"build_type1": {"test_variant1": {}}}) assert not fp.is_full_fail() fp = FailedPlatform({"build_type1": {}}) fp.failures["build_type1"] = set() assert not fp.is_full_fail() fp = FailedPlatform({"build_type1": {}}) fp.failures["build_type2"] = set() assert not fp.is_full_fail() fp = FailedPlatform({"build_type1": {"test_variant1": {}}}) fp.failures["build_type1"] = set() assert not fp.is_full_fail() fp = FailedPlatform({"build_type1": {"test_variant1": {}}}) fp.failures["build_type1"] = {"test_variant1"} assert fp.is_full_fail() fp = FailedPlatform({"build_type1": {"test_variant1": {}, "test_variant2": {}}}) fp.failures["build_type1"] = {"test_variant1"} assert not fp.is_full_fail() fp = FailedPlatform({"build_type1": {"test_variant1": {}, "test_variant2": {}}}) fp.failures["build_type1"] = {"test_variant1", "test_variant2"} assert fp.is_full_fail() fp = FailedPlatform( { "build_type1": {"test_variant1": {}, "test_variant2": {}}, "build_type2": {"test_variant1": {}, "test_variant2": {}}, } ) fp.failures["build_type1"] = {"test_variant1", "test_variant2"} assert not fp.is_full_fail() fp = FailedPlatform( { "build_type1": {"test_variant1": {}, "test_variant2": {}}, "build_type2": {"test_variant1": {}, "test_variant2": {}}, } ) fp.failures["build_type1"] = {"test_variant1", "test_variant2"} fp.failures["build_type2"] = {"test_variant1", "test_variant2"} assert fp.is_full_fail() def test_get_no_variant_conditions(): """Test get_no_variant_conditions""" fp = FailedPlatform({}) assert fp.get_no_variant_conditions(" && ", "build_type1") == "" fp = FailedPlatform({"build_type1": {}}) assert fp.get_no_variant_conditions(" && ", "build_type1") == "" fp = FailedPlatform({"build_type1": {"test_variant1": {}}}) assert fp.get_no_variant_conditions(" && ", "build_type1") == " && !test_variant1" # Handle already negated test variants fp = FailedPlatform({"build_type1": {"test_variant1": {}, "!fission": {}}}) assert ( fp.get_no_variant_conditions(" && ", "build_type1") == " && !test_variant1 && fission" ) def test_get_test_variant_condition(): """Test get_no_variant_conditions""" # Simply returns the given variant if no composite variant exists fp = FailedPlatform({}) assert ( fp.get_test_variant_condition(" && ", "build_type1", "test_variant1") == " && test_variant1" ) fp = FailedPlatform({"build_type1": {}}) assert ( fp.get_test_variant_condition(" && ", "build_type1", "test_variant1") == " && test_variant1" ) fp = FailedPlatform({"build_type1": {"test_variant1": {}}}) assert ( fp.get_test_variant_condition(" && ", "build_type1", "test_variant1") == " && test_variant1" ) # Returns the negation of the composite if any fp = FailedPlatform( {"build_type1": {"test_variant1": {}, "test_variant1+test_variant2": {}}} ) assert ( fp.get_test_variant_condition(" && ", "build_type1", "test_variant1") == " && test_variant1 && !test_variant2" ) # Ignores composite variants it is not part of fp = FailedPlatform( {"build_type1": {"test_variant1": {}, "test_variant2+test_variant3": {}}} ) assert ( fp.get_test_variant_condition(" && ", "build_type1", "test_variant1") == " && test_variant1" ) # Convert a composite test variant fp = FailedPlatform( {"build_type1": {"test_variant1": {}, "test_variant1+test_variant2": {}}} ) assert ( fp.get_test_variant_condition( " && ", "build_type1", "test_variant1+test_variant2" ) == " && test_variant1 && test_variant2" ) # Handles composite variants included in other composites fp = FailedPlatform( { "build_type1": { "test_variant1+test_variant2": {}, "test_variant1+test_variant2+test_variant3": {}, } } ) assert ( fp.get_test_variant_condition( " && ", "build_type1", "test_variant1+test_variant2" ) == " && test_variant1 && test_variant2 && !test_variant3" ) # Detects if the composite or in scrambled order fp = FailedPlatform( { "build_type1": { "test_variant2+test_variant1": {}, "test_variant1+test_variant3+test_variant2": {}, } } ) assert ( fp.get_test_variant_condition( " && ", "build_type1", "test_variant2+test_variant1" ) == " && test_variant2 && test_variant1 && !test_variant3" ) # Handles when variant is included in several composites fp = FailedPlatform( { "build_type1": { "test_variant1+test_variant2": {}, "test_variant1+test_variant2+test_variant3": {}, "test_variant1+test_variant4+test_variant2": {}, } } ) assert ( fp.get_test_variant_condition( " && ", "build_type1", "test_variant2+test_variant1" ) == " && test_variant2 && test_variant1 && !test_variant3 && !test_variant4" ) # Simply returns the current composite variant if it is not fully contained in another fp = FailedPlatform( { "build_type1": { "test_variant1+test_variant2": {}, "test_variant1+test_variant3": {}, } } ) assert ( fp.get_test_variant_condition( " && ", "build_type1", "test_variant1+test_variant2" ) == " && test_variant1 && test_variant2" ) # Ignore matching composite variants in other build types fp = FailedPlatform( { "build_type1": {"test_variant1": {}}, "build_type2": {"test_variant1+test_variant2": {}}, } ) assert ( fp.get_test_variant_condition(" && ", "build_type1", "test_variant1") == " && test_variant1" ) def test_get_skip_string(): """Test get_skip_string""" # Full fails on single line => nothing returned fp = FailedPlatform({"build_type1": {"no_variant": {}}}) assert fp.get_skip_string(" && ", "build_type1", "no_variant") == "" fp = FailedPlatform({"build_type1": {"test_variant1": {}}}) assert fp.get_skip_string(" && ", "build_type1", "test_variant1") == "" fp = FailedPlatform({"build_type1": {"test_variant1+test_variant2": {}}}) assert ( fp.get_skip_string(" && ", "build_type1", "test_variant1+test_variant2") == "" ) # Fail only on some build types without test variant # => only failed build types returned fp = FailedPlatform( {"build_type1": {"no_variant": {}}, "build_type2": {"no_variant": {}}} ) assert fp.get_skip_string(" && ", "build_type1", "no_variant") == " && build_type1" # Fail only on one build type with test variant # => only failed build types returned with negated test variants fp = FailedPlatform( { "build_type1": {"no_variant": {}, "test_variant1": {}}, "build_type2": {"no_variant": {}}, } ) assert ( fp.get_skip_string(" && ", "build_type1", "no_variant") == " && build_type1 && !test_variant1" ) # Full test variant fail on single line => only build type returned fp = FailedPlatform( {"build_type1": {"test_variant1": {}}, "build_type2": {"no_variant": {}}} ) assert ( fp.get_skip_string(" && ", "build_type1", "test_variant1") == " && build_type1" ) fp = FailedPlatform( { "build_type1": {"test_variant1+test_variant2": {}}, "build_type2": {"no_variant": {}}, } ) assert ( fp.get_skip_string(" && ", "build_type1", "test_variant1+test_variant2") == " && build_type1" ) # Fail only on some test variants => build type and test variant returned fp = FailedPlatform( { "build_type1": {"test_variant1": {}, "test_variant2": {}}, "build_type2": {"no_variant": {}}, } ) assert ( fp.get_skip_string(" && ", "build_type1", "test_variant1") == " && build_type1 && test_variant1" ) # Full fail on second call fp = FailedPlatform( {"build_type1": {"no_variant": {}}, "build_type2": {"no_variant": {}}} ) assert fp.get_skip_string(" && ", "build_type1", "no_variant") == " && build_type1" assert fp.get_skip_string(" && ", "build_type2", "no_variant") == "" # Full fail on second call with test variants fp = FailedPlatform( { "build_type1": {"test_variant1+test_variant2": {}}, "build_type2": {"test_variant1+test_variant2": {}}, } ) assert ( fp.get_skip_string(" && ", "build_type1", "test_variant1+test_variant2") == " && build_type1" ) assert ( fp.get_skip_string(" && ", "build_type2", "test_variant1+test_variant2") == "" ) fp = FailedPlatform({"build_type1": {"test_variant1": {}, "test_variant2": {}}}) assert ( fp.get_skip_string(" && ", "build_type1", "test_variant1") == " && build_type1 && test_variant1" ) assert fp.get_skip_string(" && ", "build_type1", "test_variant2") == "" # Fail on variant and no_variant fp = FailedPlatform( { "build_type1": {"test_variant1": {}, "no_variant": {}}, "build_type2": {"no_variant": {}}, } ) assert ( fp.get_skip_string(" && ", "build_type1", "test_variant1") == " && build_type1 && test_variant1" ) assert fp.get_skip_string(" && ", "build_type1", "no_variant") == " && build_type1" # Complex cases fp = FailedPlatform( { "build_type1": { "test_variant1": {}, "test_variant2": {}, "test_variant1+test_variant2": {}, }, "build_type2": {"no_variant": {}, "test_variant1": {}, "test_variant2": {}}, } ) assert ( fp.get_skip_string(" && ", "build_type1", "test_variant1") == " && build_type1 && test_variant1 && !test_variant2" ) assert ( fp.get_skip_string(" && ", "build_type2", "no_variant") == " && build_type2 && !test_variant1 && !test_variant2" ) assert ( fp.get_skip_string(" && ", "build_type1", "test_variant2") == " && build_type1 && test_variant2 && !test_variant1" ) assert ( fp.get_skip_string(" && ", "build_type1", "test_variant1+test_variant2") == " && build_type1" ) assert ( fp.get_skip_string(" && ", "build_type2", "test_variant1") == " && build_type2 && test_variant1" ) assert fp.get_skip_string(" && ", "build_type2", "test_variant2") == "" if __name__ == "__main__": main()