test_default_overrides.py (5506B)
1 #!/usr/bin/env python 2 3 # This Source Code Form is subject to the terms of the Mozilla Public 4 # License, v. 2.0. If a copy of the MPL was not distributed with this file, 5 # You can obtain one at http://mozilla.org/MPL/2.0/. 6 7 import os 8 import re 9 import unittest 10 11 import mozunit 12 from manifestparser import ManifestParser, combine_fields 13 14 here = os.path.dirname(os.path.abspath(__file__)) 15 16 17 def deepstrip(txt): 18 "Collapses all repeated blanks to one blank, and strips" 19 return re.sub(r" +", " ", txt).strip() 20 21 22 class TestDefaultSkipif(unittest.TestCase): 23 """Tests applying a skip-if condition in [DEFAULT] and || with the value for the test""" 24 25 def test_defaults_toml(self): 26 default = os.path.join(here, "default-skipif.toml") 27 parser = ManifestParser(manifests=(default,), use_toml=True) 28 for test in parser.tests: 29 if test["name"] == "test1": 30 self.assertEqual( 31 deepstrip(test["skip-if"]), "os == 'win' && debug\ndebug" 32 ) 33 elif test["name"] == "test2": 34 self.assertEqual( 35 deepstrip(test["skip-if"]), "os == 'win' && debug\nos == 'linux'" 36 ) 37 elif test["name"] == "test3": 38 self.assertEqual( 39 deepstrip(test["skip-if"]), "os == 'win' && debug\nos == 'win'" 40 ) 41 elif test["name"] == "test4": 42 self.assertEqual( 43 deepstrip(test["skip-if"]), 44 "os == 'win' && debug\nos == 'win' && debug", 45 ) 46 elif test["name"] == "test5": 47 self.assertEqual(deepstrip(test["skip-if"]), "os == 'win' && debug") 48 elif test["name"] == "test6": 49 self.assertEqual( 50 deepstrip(test["skip-if"]), "os == 'win' && debug\ndebug" 51 ) 52 53 54 class TestTagDefaults(unittest.TestCase): 55 """Test that tags are handled correctly when managing defaults.""" 56 57 def test_defaults_toml(self): 58 default = os.path.join(here, "default-tags.toml") 59 parser = ManifestParser(manifests=(default,), use_toml=True) 60 expected_tags = {"test1": "foo", "test2": "foo bar", "test3": "foo bar\n baz"} 61 for test in parser.tests: 62 expected = expected_tags[test["name"]] 63 self.assertEqual(test["tags"], expected) 64 65 66 class TestDefaultSupportFiles(unittest.TestCase): 67 """Tests combining support-files field in [DEFAULT] with the value for a test""" 68 69 def test_defaults_toml(self): 70 default = os.path.join(here, "default-suppfiles.toml") 71 parser = ManifestParser(manifests=(default,), use_toml=True) 72 expected_supp_files = { 73 "test7": "foo.js", 74 "test8": "foo.js bar.js", 75 "test9": "foo.js", 76 } 77 for test in parser.tests: 78 expected = expected_supp_files[test["name"]] 79 self.assertEqual(test["support-files"], expected) 80 81 82 class TestOmitDefaults(unittest.TestCase): 83 """Tests passing omit-defaults prevents defaults from propagating to definitions.""" 84 85 def test_defaults_toml(self): 86 manifests = ( 87 os.path.join(here, "default-suppfiles.toml"), 88 os.path.join(here, "default-skipif.toml"), 89 ) 90 parser = ManifestParser( 91 manifests=manifests, handle_defaults=False, use_toml=True 92 ) 93 expected_supp_files = { 94 "test8": "bar.js", 95 } 96 expected_skip_ifs = { 97 "test1": "debug", 98 "test2": "os == 'linux'", 99 "test3": "os == 'win'", 100 "test4": "os == 'win' && debug", 101 "test6": "debug", 102 } 103 for test in parser.tests: 104 for field, expectations in ( 105 ("support-files", expected_supp_files), 106 ("skip-if", expected_skip_ifs), 107 ): 108 expected = expectations.get(test["name"]) 109 if not expected: 110 self.assertNotIn(field, test) 111 else: 112 self.assertEqual(test[field].strip(), expected) 113 114 expected_defaults = { 115 os.path.join(here, "default-suppfiles.toml"): { 116 "support-files": "foo.js", 117 }, 118 os.path.join(here, "default-skipif.toml"): { 119 "skip-if": "os == 'win' && debug", 120 }, 121 } 122 for path, defaults in expected_defaults.items(): 123 self.assertIn(path, parser.manifest_defaults) 124 actual_defaults = parser.manifest_defaults[path] 125 for key, value in defaults.items(): 126 self.assertIn(key, actual_defaults) 127 self.assertEqual(value, actual_defaults[key].strip()) 128 129 130 class TestSubsuiteDefaults(unittest.TestCase): 131 """Test that subsuites are handled correctly when managing defaults 132 outside of the manifest parser.""" 133 134 def test_subsuite_defaults_toml(self): 135 manifest = os.path.join(here, "default-subsuite.toml") 136 parser = ManifestParser( 137 manifests=(manifest,), handle_defaults=False, use_toml=True 138 ) 139 expected_subsuites = { 140 "test1": "baz", 141 "test2": "foo", 142 } 143 defaults = parser.manifest_defaults[manifest] 144 for test in parser.tests: 145 value = combine_fields(defaults, test) 146 self.assertEqual(expected_subsuites[value["name"]], value["subsuite"]) 147 148 149 if __name__ == "__main__": 150 mozunit.main()