未验证 提交 c1109537 编写于 作者: P Pradyun Gedam 提交者: GitHub

Merge pull request #7958 from ilanschnell/add-yaml-options

Add ability to run pip with options for yaml tests
......@@ -92,26 +92,33 @@ def convert_to_dict(string):
return retval
def handle_install_request(script, requirement):
def handle_request(script, action, requirement, options):
assert isinstance(requirement, str), (
"Need install requirement to be a string only"
)
result = script.pip(
"install",
"--no-index", "--find-links", path_to_url(script.scratch_path),
requirement, "--verbose",
allow_stderr_error=True,
allow_stderr_warning=True,
)
if action == 'install':
args = ['install', "--no-index", "--find-links",
path_to_url(script.scratch_path)]
elif action == 'uninstall':
args = ['uninstall', '--yes']
else:
raise "Did not excpet action: {!r}".format(action)
args.append(requirement)
args.extend(options)
args.append("--verbose")
result = script.pip(*args,
allow_stderr_error=True,
allow_stderr_warning=True)
retval = {
"_result_object": result,
}
if result.returncode == 0:
# Check which packages got installed
retval["install"] = []
retval["state"] = []
for path in result.files_created:
for path in os.listdir(script.site_packages_path):
if path.endswith(".dist-info"):
name, version = (
os.path.basename(path)[:-len(".dist-info")]
......@@ -119,12 +126,9 @@ def handle_install_request(script, requirement):
# TODO: information about extras.
retval["install"].append(" ".join((name, version)))
retval["install"].sort()
retval["state"].append(" ".join((name, version)))
# TODO: Support checking uninstallations
# retval["uninstall"] = []
retval["state"].sort()
elif "conflicting" in result.stderr.lower():
retval["conflicting"] = []
......@@ -151,10 +155,10 @@ def handle_install_request(script, requirement):
def test_yaml_based(script, case):
available = case.get("available", [])
requests = case.get("request", [])
transaction = case.get("transaction", [])
responses = case.get("response", [])
assert len(requests) == len(transaction), (
"Expected requests and transaction counts to be same"
assert len(requests) == len(responses), (
"Expected requests and responses counts to be same"
)
# Create a custom index of all the packages that are supposed to be
......@@ -168,26 +172,19 @@ def test_yaml_based(script, case):
create_basic_wheel_for_package(script, **package)
available_actions = {
"install": handle_install_request
}
# use scratch path for index
for request, expected in zip(requests, transaction):
# The name of the key is what action has to be taken
assert len(request.keys()) == 1, "Expected only one action"
for request, response in zip(requests, responses):
# Get the only key
action = list(request.keys())[0]
assert action in available_actions.keys(), (
"Unsupported action {!r}".format(action)
)
for action in 'install', 'uninstall':
if action in request:
break
else:
raise "Unsupported request {!r}".format(request)
# Perform the requested action
effect = available_actions[action](script, request[action])
result = effect["_result_object"]
del effect["_result_object"]
effect = handle_request(script, action,
request[action],
request.get('options', '').split())
assert effect == expected, str(result)
assert effect['state'] == (response['state'] or []), \
str(effect["_result_object"])
......@@ -10,8 +10,8 @@ cases:
-
request:
- install: A
transaction:
- install:
response:
- state:
- A 1.0.0
- B 1.0.0
- C 1.0.0
......@@ -19,8 +19,8 @@ cases:
-
request:
- install: B
transaction:
- install:
response:
- state:
- A 1.0.0
- B 1.0.0
- C 1.0.0
......@@ -28,8 +28,8 @@ cases:
-
request:
- install: C
transaction:
- install:
response:
- state:
- A 1.0.0
- B 1.0.0
- C 1.0.0
......@@ -37,8 +37,8 @@ cases:
-
request:
- install: D
transaction:
- install:
response:
- state:
- A 1.0.0
- B 1.0.0
- C 1.0.0
......
......@@ -8,7 +8,7 @@ cases:
- D 2.0.0
request:
- install: A
transaction:
response:
- conflicting:
- required_by: [A 1.0.0, B 1.0.0]
selector: D == 1.0.0
......
......@@ -8,8 +8,8 @@ cases:
request:
- install: A
- install: B
transaction:
- install:
response:
- state:
- A 1.0.0
- C 1.0.0
- conflicting:
......
......@@ -15,24 +15,24 @@ cases:
-
request:
- install: B
transaction:
- install:
response:
- state:
- B 1.0.0
- D 1.0.0
- E 1.0.0
-
request:
- install: C
transaction:
- install:
response:
- state:
- C 1.0.0
- D 1.0.0
- F 1.0.0
-
request:
- install: A
transaction:
- install:
response:
- state:
- A 1.0.0
- B 1.0.0
- C 1.0.0
......
......@@ -11,14 +11,14 @@ cases:
-
request:
- install: A >= 2.0.0
transaction:
- install:
response:
- state:
- A 2.0.0
- B 2.1.0
-
request:
- install: A < 2.0.0
transaction:
- install:
response:
- state:
- A 1.0.0
- B 1.0.0
......@@ -9,21 +9,21 @@ cases:
-
request:
- install: B
transaction:
- install:
response:
- state:
- A 2.0.0
- B 2.0.0
-
request:
- install: B == 2.0.0
transaction:
- install:
response:
- state:
- A 2.0.0
- B 2.0.0
-
request:
- install: B == 1.0.0
transaction:
- install:
response:
- state:
- A 1.0.0
- B 1.0.0
......@@ -9,13 +9,32 @@ cases:
-
request:
- install: simple
transaction:
- install:
- uninstall: simple
response:
- state:
- simple 0.2.0
- state: null
-
request:
- install: simple
- install: dep
response:
- state:
- simple 0.2.0
- state:
- dep 0.1.0
- simple 0.2.0
-
request:
- install: base
transaction:
- install:
response:
- state:
- base 0.1.0
- dep 0.1.0
-
request:
- install: base
options: --no-deps
response:
- state:
- base 0.1.0
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册