Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
#!/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 mozunit
import pytest
from manifestparser import ManifestParser
from manifestparser.toml import (
DEFAULT_SECTION,
Carry,
Mode,
add_skip_if,
alphabetize_toml_str,
replace_tbd_skip_if,
)
from tomlkit.toml_document import TOMLDocument
here = os.path.dirname(os.path.abspath(__file__))
def test_add_skip_if(tmp_path):
parser = ManifestParser(use_toml=True, document=True)
filename = "aaa.js"
contents = f'[{DEFAULT_SECTION}]\n\n["{filename}"]'
manifest_path = tmp_path / "add_skip_if.toml"
manifest_path.write_text(contents)
parser.read(str(manifest_path))
document = parser.source_documents[str(manifest_path)]
assert DEFAULT_SECTION in document
skip_if = "true"
bug_reference = "Bug 2003869"
additional_comment, carryover, bug_reference = add_skip_if(
document,
filename,
skip_if,
bug_reference,
None,
Mode.NORMAL,
)
assert bug_reference is not None # skip-if should not be ignored
manifest_str = alphabetize_toml_str(document)
assert (
manifest_str
== """[DEFAULT]
["aaa.js"]
skip-if = [
"true", # Bug 2003869
]
"""
)
def test_replace_tbd_skip_if():
parser = ManifestParser(use_toml=True, document=True)
before = "replace-tbd-before.toml"
before_path = os.path.join(here, before)
parser.read(before_path)
assert before_path in parser.source_documents
manifest = parser.source_documents[before_path]
assert manifest is not None
assert isinstance(manifest, TOMLDocument)
filename = "non-existant.js"
condition = "os == 'android' && asan"
bugid = "100"
updated: bool = False
with pytest.raises(Exception) as e:
updated = replace_tbd_skip_if(manifest, filename, condition, bugid)
assert updated # Fail here if no exception thrown
assert str(e.value) == "TOML manifest does not contain section: non-existant.js"
filename = "DEFAULT"
with pytest.raises(Exception) as e:
updated = replace_tbd_skip_if(manifest, filename, condition, bugid)
assert updated # Fail here if no exception thrown
assert (
str(e.value)
== "TOML manifest for section: DEFAULT does not contain a skip-if condition"
)
filename = "bug_100.js"
updated = replace_tbd_skip_if(manifest, filename, condition, bugid)
assert updated
filename = "bug_3.js"
condition = "os == 'linux'"
bugid = "33333"
updated = replace_tbd_skip_if(manifest, filename, condition, bugid)
assert updated
filename = "test_bar.html"
condition = "os == 'linux'"
bugid = "222"
updated = replace_tbd_skip_if(manifest, filename, condition, bugid)
assert updated
filename = "test_extend_linux.js"
condition = "os == 'mac'"
bugid = "111"
updated = replace_tbd_skip_if(manifest, filename, condition, bugid)
assert updated
manifest_str = alphabetize_toml_str(manifest)
after = "replace-tbd-after.toml"
after_path = os.path.join(here, after)
after_str = open(after_path, encoding="utf-8").read()
assert manifest_str == after_str
@pytest.fixture(scope="session")
def carry():
c = Carry()
yield c
@pytest.mark.parametrize(
"test_index, e_condition, condition, expected", # test_index for convenience
[
(
1,
"os == 'android' && processor == 'x86_64'",
"os == 'android' && os_version == '14' && processor == 'x86_64'",
True,
),
(
2,
"http3",
"os == 'linux' && os_version == '24.04' && processor == 'x86_64' && display == 'x11' && xorigin",
False,
),
(
3,
"http3",
"os == 'linux' && os_version == '24.04' && processor == 'x86_64' && display == 'x11' && xorigin && debug",
False,
),
(
4,
"os == 'android' && debug",
"os == 'android' && os_version == '14' && debug",
True,
),
(
5,
"os == 'android' && !debug",
"os == 'android' && os_version == '14' && debug",
False,
),
(
6,
"os == 'android' && debug",
"os == 'android' && os_version == '14' && !debug",
False,
),
(
7,
"os == 'android'",
"os == 'android' && os_version == '14' && debug",
True,
),
(
8,
"os == 'android'",
"os == 'android' && os_version == '14' && !debug",
True,
),
(
9,
"os == 'android' && debug",
"os == 'android' && os_version == '14'",
False,
),
(
10,
"os == 'android' && !debug",
"os == 'android' && os_version == '14'",
False,
),
(
11,
"os == 'android' && asan",
"os == 'android' && os_version == '14' && ccov",
True,
),
(
12,
"os == 'android'",
"os == 'android' && os_version == '14' && ccov",
True,
),
(
13,
"os == 'android' && tsan",
"os == 'android' && os_version == '14'",
False,
),
(
14,
"os == 'linux' && debug && socketprocess_networking",
"os == 'android' && debug",
False,
),
(15, "debug && socketprocess_networking", "os == 'android' && debug", True),
(16, "os == 'linux'", "verify", False),
(17, "os == 'win'", "tsan", False),
(
18,
"os == 'linux' && os_version == '22.04' && debug",
"os == 'linux' && os_version == '24.04' && asan && isolated_debug_process",
False,
),
(
19,
"os == 'linux' && os_version == '22.04' && isolated_debug_process",
"os == 'linux' && os_version == '24.04' && opt",
True,
),
(
20,
"os == 'android' && opt",
"os == 'android' && os_version == '14' && !debug",
True,
),
(
21,
"os == 'android' && !debug",
"os == 'android' && os_version == '14' && opt",
True,
),
(
22,
"!opt",
"!opt",
True,
),
(
23,
"!opt",
"asan",
True,
),
(
24,
"ccov",
"!opt",
True,
),
(
25,
"debug",
"tsan",
False,
),
(
26,
"ccov",
"debug",
False,
),
],
)
def test_platform_match_for_carryover(
carry: Carry, test_index: int, e_condition: str, condition: str, expected: bool
):
"""
Verify TOML function _condition_is_carryover platform match heuristic
"""
assert test_index == carry.test_index() # help maintain order
assert carry.is_carryover(e_condition, condition) == expected
if __name__ == "__main__":
mozunit.main()