summaryrefslogtreecommitdiffstats
path: root/testing/mozbase/mozfile/tests/test_which.py
blob: ef079b333b33f3a7e35fdb3632ac1b722c7f8169 (plain)
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()