# 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 mozinfo
import pytest
from manifestparser
import expression
def update_mozinfo():
"""Walk up directories to find mozinfo.json and update the info."""
# check for fetched target.mozinfo.json first
fetches = os.getenv(
"MOZ_FETCHES_DIR")
if fetches:
target_mozinfo = os.path.join(fetches,
"target.mozinfo.json")
if os.path.isfile(target_mozinfo):
mozinfo.update(target_mozinfo)
return
# search for local mozinfo.json
path = os.path.abspath(os.path.realpath(os.path.dirname(__file__)))
dirs = set()
while path != os.path.expanduser(
"~"):
if path
in dirs:
break
dirs.add(path)
path = os.path.split(path)[
0]
mozinfo.find_and_update_from_json(*dirs)
def pytest_configure(config):
"""Register skip_mozinfo marker to avoid pytest warning."""
config.addinivalue_line(
"markers",
"skip_mozinfo(expression): skip if mozinfo expression is matched"
)
@pytest.fixture(autouse=
True)
def skip_using_mozinfo(request):
"""Gives tests the ability to skip based on values from mozinfo.
Example:
@pytest.mark.skip_mozinfo(
"!e10s || os == 'linux'")
def test_foo():
pass
"""
update_mozinfo()
skip_mozinfo = request.node.get_closest_marker(
"skip_mozinfo")
if skip_mozinfo:
value = skip_mozinfo.args[
0]
if expression.parse(value, **mozinfo.info):
pytest.skip(f
"skipped due to mozinfo match: {value}")