1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
# Any copyright is dedicated to the Public Domain.
# https://creativecommons.org/publicdomain/zero/1.0/
from __future__ import absolute_import
import os
import six
import sys
import mozunit
from mozfile import which
here = os.path.abspath(os.path.dirname(__file__))
def test_which(monkeypatch):
cwd = os.path.join(here, "files", "which")
monkeypatch.chdir(cwd)
if sys.platform == "win32":
if six.PY3:
import winreg
else:
import _winreg as winreg
bindir = os.path.join(cwd, "win")
monkeypatch.setenv("PATH", bindir)
monkeypatch.setattr(winreg, "QueryValue", (lambda k, sk: None))
assert which("foo.exe").lower() == os.path.join(bindir, "foo.exe").lower()
assert which("foo").lower() == os.path.join(bindir, "foo.exe").lower()
assert (
which("foo", exts=[".FOO", ".BAR"]).lower()
== os.path.join(bindir, "foo").lower()
)
assert os.environ.get("PATHEXT") != [".FOO", ".BAR"]
assert which("foo.txt") is None
assert which("bar").lower() == os.path.join(bindir, "bar").lower()
assert which("baz").lower() == os.path.join(cwd, "baz.exe").lower()
registered_dir = os.path.join(cwd, "registered")
quux = os.path.join(registered_dir, "quux.exe").lower()
def mock_registry(key, subkey):
assert subkey == (
r"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\quux.exe"
)
return quux
monkeypatch.setattr(winreg, "QueryValue", mock_registry)
assert which("quux").lower() == quux
assert which("quux.exe").lower() == quux
else:
bindir = os.path.join(cwd, "unix")
monkeypatch.setenv("PATH", bindir)
assert which("foo") == os.path.join(bindir, "foo")
assert which("baz") is None
assert which("baz", exts=[".EXE"]) is None
assert "PATHEXT" not in os.environ
assert which("file") is None
if __name__ == "__main__":
mozunit.main()
|