dosage/tests/modules/conftest.py

58 lines
1.7 KiB
Python
Raw Normal View History

# SPDX-License-Identifier: MIT
2016-10-28 22:21:41 +00:00
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
# Copyright (C) 2012-2014 Bastian Kleineidam
2022-05-27 18:52:29 +00:00
# Copyright (C) 2015-2022 Tobias Gruetzmacher
import re
import os
import pytest
from xdist.dsession import LoadScopeScheduling
from dosagelib.scraper import scrapers
def get_test_scrapers():
"""Return scrapers that should be tested."""
2021-04-02 08:15:18 +00:00
if 'TESTALL' in os.environ:
# test all comics (this will take some time)
2022-05-27 18:52:29 +00:00
return scrapers.get()
2021-04-02 08:15:18 +00:00
elif 'TESTCOMICS' in os.environ:
scraper_pattern = os.environ['TESTCOMICS']
else:
2020-04-18 11:03:02 +00:00
# Get limited number of scraper tests as default
testscrapernames = [
# "classic" _BasicScraper
'AbstruseGoose',
# complex _ParserScraper
'GoComics/CalvinAndHobbes',
# _WordPressScraper
'GrrlPower',
]
2021-04-02 08:15:18 +00:00
scraper_pattern = '^(' + '|'.join(testscrapernames) + ')$'
2020-04-18 11:03:02 +00:00
2021-04-02 08:15:18 +00:00
matcher = re.compile(scraper_pattern)
2020-04-18 11:03:02 +00:00
return [
scraperobj for scraperobj in scrapers.get()
2021-04-02 08:15:18 +00:00
if matcher.match(scraperobj.name)
2020-04-18 11:03:02 +00:00
]
def pytest_generate_tests(metafunc):
if 'scraperobj' in metafunc.fixturenames:
scrapers = get_test_scrapers()
scraperids = [x.name for x in scrapers]
metafunc.parametrize('scraperobj', scrapers, ids=scraperids)
class LoadModScheduling(LoadScopeScheduling):
"""Implement load scheduling for comic modules. See xdist for details."""
def _split_scope(self, nodeid):
mod, test = nodeid.split("::", 1)
return mod + "::" + test.split("/", 1)[0]
@pytest.mark.trylast
def pytest_xdist_make_scheduler(config, log):
return LoadModScheduling(config, log)