#!/usr/bin/env python # 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/. import os import unittest import mozunit from manifestparser import ManifestParser, combine_fields here = os.path.dirname(os.path.abspath(__file__)) class TestDefaultSkipif(unittest.TestCase): """Tests applying a skip-if condition in [DEFAULT] and || with the value for the test""" def test_defaults(self): default = os.path.join(here, "default-skipif.ini") parser = ManifestParser(manifests=(default,)) for test in parser.tests: if test["name"] == "test1": self.assertEqual(test["skip-if"], "os == 'win' && debug\ndebug") elif test["name"] == "test2": self.assertEqual(test["skip-if"], "os == 'win' && debug\nos == 'linux'") elif test["name"] == "test3": self.assertEqual(test["skip-if"], "os == 'win' && debug\nos == 'win'") elif test["name"] == "test4": self.assertEqual( test["skip-if"], "os == 'win' && debug\nos == 'win' && debug" ) elif test["name"] == "test5": self.assertEqual(test["skip-if"], "os == 'win' && debug") elif test["name"] == "test6": self.assertEqual(test["skip-if"], "os == 'win' && debug\ndebug") class TestDefaultSupportFiles(unittest.TestCase): """Tests combining support-files field in [DEFAULT] with the value for a test""" def test_defaults(self): default = os.path.join(here, "default-suppfiles.ini") parser = ManifestParser(manifests=(default,)) expected_supp_files = { "test7": "foo.js", "test8": "foo.js bar.js", "test9": "foo.js", } for test in parser.tests: expected = expected_supp_files[test["name"]] self.assertEqual(test["support-files"], expected) class TestOmitDefaults(unittest.TestCase): """Tests passing omit-defaults prevents defaults from propagating to definitions.""" def test_defaults(self): manifests = ( os.path.join(here, "default-suppfiles.ini"), os.path.join(here, "default-skipif.ini"), ) parser = ManifestParser(manifests=manifests, handle_defaults=False) expected_supp_files = { "test8": "bar.js", } expected_skip_ifs = { "test1": "debug", "test2": "os == 'linux'", "test3": "os == 'win'", "test4": "os == 'win' && debug", "test6": "debug", } for test in parser.tests: for field, expectations in ( ("support-files", expected_supp_files), ("skip-if", expected_skip_ifs), ): expected = expectations.get(test["name"]) if not expected: self.assertNotIn(field, test) else: self.assertEqual(test[field], expected) expected_defaults = { os.path.join(here, "default-suppfiles.ini"): { "support-files": "foo.js", }, os.path.join(here, "default-skipif.ini"): { "skip-if": "os == 'win' && debug", }, } for path, defaults in expected_defaults.items(): self.assertIn(path, parser.manifest_defaults) actual_defaults = parser.manifest_defaults[path] for key, value in defaults.items(): self.assertIn(key, actual_defaults) self.assertEqual(value, actual_defaults[key]) class TestSubsuiteDefaults(unittest.TestCase): """Test that subsuites are handled correctly when managing defaults outside of the manifest parser.""" def test_subsuite_defaults(self): manifest = os.path.join(here, "default-subsuite.ini") parser = ManifestParser(manifests=(manifest,), handle_defaults=False) expected_subsuites = { "test1": "baz", "test2": "foo", } defaults = parser.manifest_defaults[manifest] for test in parser.tests: value = combine_fields(defaults, test) self.assertEqual(expected_subsuites[value["name"]], value["subsuite"]) if __name__ == "__main__": mozunit.main()