From 2a8f5705b20102b8c594ccaa7dcba5e976b06a2c Mon Sep 17 00:00:00 2001 From: Ilan Schnell Date: Tue, 31 Mar 2020 15:35:29 -0500 Subject: [PATCH 1/3] combine yaml test functionality into single module --- tests/functional/test_yaml.py | 56 +++++++++++++++++++++++++++++++---- tests/lib/yaml_helpers.py | 43 --------------------------- 2 files changed, 50 insertions(+), 49 deletions(-) delete mode 100644 tests/lib/yaml_helpers.py diff --git a/tests/functional/test_yaml.py b/tests/functional/test_yaml.py index eab11e2a42a..2a1b93f16db 100644 --- a/tests/functional/test_yaml.py +++ b/tests/functional/test_yaml.py @@ -1,15 +1,17 @@ -"""Tests for the resolver +""" +Tests for the resolver """ import os import re import pytest +import yaml from tests.lib import DATA_DIR, create_basic_wheel_for_package, path_to_url -from tests.lib.yaml_helpers import generate_yaml_tests, id_func -_conflict_finder_re = re.compile( + +conflict_finder_re = re.compile( # Conflicting Requirements: \ # A 1.0.0 requires B == 2.0.0, C 1.0.0 requires B == 1.0.0. r""" @@ -24,7 +26,49 @@ ) -def _convert_to_dict(string): +def generate_yaml_tests(directory): + """ + Generate yaml test cases from the yaml files in the given directory + """ + for yml_file in directory.glob("*/*.yml"): + data = yaml.safe_load(yml_file.read_text()) + assert "cases" in data, "A fixture needs cases to be used in testing" + + # Strip the parts of the directory to only get a name without + # extension and resolver directory + base_name = str(yml_file)[len(str(directory)) + 1:-4] + + base = data.get("base", {}) + cases = data["cases"] + + for i, case_template in enumerate(cases): + case = base.copy() + case.update(case_template) + + case[":name:"] = base_name + if len(cases) > 1: + case[":name:"] += "-" + str(i) + + if case.pop("skip", False): + case = pytest.param(case, marks=pytest.mark.xfail) + + yield case + + +def id_func(param): + """ + Give a nice parameter name to the generated function parameters + """ + if isinstance(param, dict) and ":name:" in param: + return param[":name:"] + + retval = str(param) + if len(retval) > 25: + retval = retval[:20] + "..." + retval[-2:] + return retval + + +def convert_to_dict(string): def stripping_split(my_str, splitwith, count=None): if count is None: @@ -89,7 +133,7 @@ def handle_install_request(script, requirement): message = result.stderr.rsplit("\n", 1)[-1] # XXX: There might be a better way than parsing the message - for match in re.finditer(message, _conflict_finder_re): + for match in re.finditer(message, conflict_finder_re): di = match.groupdict() retval["conflicting"].append( { @@ -119,7 +163,7 @@ def test_yaml_based(script, case): # XXX: This doesn't work because this isn't making an index of files. for package in available: if isinstance(package, str): - package = _convert_to_dict(package) + package = convert_to_dict(package) assert isinstance(package, dict), "Needs to be a dictionary" diff --git a/tests/lib/yaml_helpers.py b/tests/lib/yaml_helpers.py deleted file mode 100644 index 73770632099..00000000000 --- a/tests/lib/yaml_helpers.py +++ /dev/null @@ -1,43 +0,0 @@ -""" -""" - -import pytest -import yaml - - -def generate_yaml_tests(directory): - for yml_file in directory.glob("*/*.yml"): - data = yaml.safe_load(yml_file.read_text()) - assert "cases" in data, "A fixture needs cases to be used in testing" - - # Strip the parts of the directory to only get a name without - # extension and resolver directory - base_name = str(yml_file)[len(str(directory)) + 1:-4] - - base = data.get("base", {}) - cases = data["cases"] - - for i, case_template in enumerate(cases): - case = base.copy() - case.update(case_template) - - case[":name:"] = base_name - if len(cases) > 1: - case[":name:"] += "-" + str(i) - - if case.pop("skip", False): - case = pytest.param(case, marks=pytest.mark.xfail) - - yield case - - -def id_func(param): - """Give a nice parameter name to the generated function parameters - """ - if isinstance(param, dict) and ":name:" in param: - return param[":name:"] - - retval = str(param) - if len(retval) > 25: - retval = retval[:20] + "..." + retval[-2:] - return retval From 9de02c2b41a53c0eb7d0bf1ca4293e33b9c74b77 Mon Sep 17 00:00:00 2001 From: Ilan Schnell Date: Tue, 31 Mar 2020 15:47:43 -0500 Subject: [PATCH 2/3] better naming of constant --- tests/functional/test_yaml.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/functional/test_yaml.py b/tests/functional/test_yaml.py index 2a1b93f16db..b2fc4539a63 100644 --- a/tests/functional/test_yaml.py +++ b/tests/functional/test_yaml.py @@ -11,7 +11,7 @@ from tests.lib import DATA_DIR, create_basic_wheel_for_package, path_to_url -conflict_finder_re = re.compile( +_conflict_finder_pat = re.compile( # Conflicting Requirements: \ # A 1.0.0 requires B == 2.0.0, C 1.0.0 requires B == 1.0.0. r""" @@ -133,7 +133,7 @@ def handle_install_request(script, requirement): message = result.stderr.rsplit("\n", 1)[-1] # XXX: There might be a better way than parsing the message - for match in re.finditer(message, conflict_finder_re): + for match in re.finditer(message, _conflict_finder_pat): di = match.groupdict() retval["conflicting"].append( { From 83ba23989de94820166a6a330b3efce882dc15e5 Mon Sep 17 00:00:00 2001 From: Ilan Schnell Date: Tue, 31 Mar 2020 15:55:16 -0500 Subject: [PATCH 3/3] remove extra whitespace --- tests/functional/test_yaml.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/functional/test_yaml.py b/tests/functional/test_yaml.py index b2fc4539a63..cef76d2ca69 100644 --- a/tests/functional/test_yaml.py +++ b/tests/functional/test_yaml.py @@ -10,7 +10,6 @@ from tests.lib import DATA_DIR, create_basic_wheel_for_package, path_to_url - _conflict_finder_pat = re.compile( # Conflicting Requirements: \ # A 1.0.0 requires B == 2.0.0, C 1.0.0 requires B == 1.0.0.