tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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()