File: test_cli.py

package info (click to toggle)
mozjs78 78.15.0-7
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 739,892 kB
  • sloc: javascript: 1,344,214; cpp: 1,215,708; python: 526,544; ansic: 433,835; xml: 118,736; sh: 26,176; asm: 16,664; makefile: 11,537; yacc: 4,486; perl: 2,564; ada: 1,681; lex: 1,414; pascal: 1,139; cs: 879; exp: 499; java: 164; ruby: 68; sql: 45; csh: 35; sed: 18; lisp: 2
file content (148 lines) | stat: -rw-r--r-- 4,361 bytes parent folder | download | duplicates (8)
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
"""Tests to ensure `pipenv --option` works.
"""

import os
import re

import pytest

from pipenv.utils import normalize_drive


@pytest.mark.cli
def test_pipenv_where(PipenvInstance, pypi_secure):
    with PipenvInstance(pypi=pypi_secure) as p:
        assert normalize_drive(p.path) in p.pipenv('--where').out


@pytest.mark.cli
def test_pipenv_venv(PipenvInstance):
    with PipenvInstance() as p:
        p.pipenv('--python python')
        venv_path = p.pipenv('--venv').out.strip()
        assert os.path.isdir(venv_path)


@pytest.mark.cli
def test_pipenv_py(PipenvInstance):
    with PipenvInstance() as p:
        p.pipenv('--python python')
        python = p.pipenv('--py').out.strip()
        assert os.path.basename(python).startswith('python')


@pytest.mark.cli
def test_pipenv_rm(PipenvInstance):
    with PipenvInstance() as p:
        p.pipenv('--python python')
        venv_path = p.pipenv('--venv').out.strip()
        assert os.path.isdir(venv_path)

        assert p.pipenv('--rm').out
        assert not os.path.isdir(venv_path)


@pytest.mark.cli
def test_pipenv_graph(PipenvInstance, pypi):
    with PipenvInstance(pypi=pypi) as p:
        p.pipenv('install requests')
        assert 'requests' in p.pipenv('graph').out
        assert 'requests' in p.pipenv('graph --json').out


@pytest.mark.cli
def test_pipenv_graph_reverse(PipenvInstance, pypi):
    with PipenvInstance(pypi=pypi) as p:
        p.pipenv('install requests==2.18.4')
        output = p.pipenv('graph --reverse').out

        requests_dependency = [
            ('certifi', 'certifi>=2017.4.17'),
            ('chardet', 'chardet(>=3.0.2,<3.1.0|<3.1.0,>=3.0.2)'),
            ('idna', 'idna(>=2.5,<2.7|<2.7,>=2.5)'),
            ('urllib3', 'urllib3(>=1.21.1,<1.23|<1.23,>=1.21.1)')
        ]

        for dep_name, dep_constraint in requests_dependency:
            dep_match = re.search(r'^{}==[\d.]+$'.format(dep_name), output, flags=re.MULTILINE)
            dep_requests_match = re.search(r'^  - requests==2.18.4 \[requires: {}\]$'.format(dep_constraint), output, flags=re.MULTILINE)
            assert dep_match is not None
            assert dep_requests_match is not None
            assert dep_requests_match.start() > dep_match.start()

        c = p.pipenv('graph --reverse --json')
        assert c.return_code == 1
        assert 'Warning: Using both --reverse and --json together is not supported.' in c.err


@pytest.mark.cli
@pytest.mark.needs_internet(reason='required by check')
def test_pipenv_check(PipenvInstance, pypi):
    with PipenvInstance(pypi=pypi) as p:
        p.pipenv('install requests==1.0.0')
        assert 'requests' in p.pipenv('check').out


@pytest.mark.cli
def test_venv_envs(PipenvInstance):
    with PipenvInstance() as p:
        assert p.pipenv('--envs').out


@pytest.mark.cli
def test_bare_output(PipenvInstance):
    with PipenvInstance() as p:
        assert p.pipenv('').out


@pytest.mark.cli
def test_help(PipenvInstance):
    with PipenvInstance() as p:
        assert p.pipenv('--help').out


@pytest.mark.cli
def test_man(PipenvInstance):
    with PipenvInstance() as p:
        c = p.pipenv('--man')
        assert c.return_code == 0 or c.err


@pytest.mark.cli
def test_install_parse_error(PipenvInstance, pypi):
    with PipenvInstance(pypi=pypi) as p:

        # Make sure unparseable packages don't wind up in the pipfile
        # Escape $ for shell input
        with open(p.pipfile_path, 'w') as f:
            contents = """
[packages]

[dev-packages]
            """.strip()
            f.write(contents)
        c = p.pipenv('install requests u/\\/p@r\$34b13+pkg')
        assert c.return_code != 0
        assert 'u/\\/p@r$34b13+pkg' not in p.pipfile['packages']


@pytest.mark.code
@pytest.mark.check
@pytest.mark.unused
@pytest.mark.skip(reason="non-deterministic")
def test_check_unused(PipenvInstance, pypi):
    with PipenvInstance(chdir=True, pypi=pypi) as p:
        with open('__init__.py', 'w') as f:
            contents = """
import tablib
import records
            """.strip()
            f.write(contents)
        p.pipenv('install requests')
        p.pipenv('install tablib')
        p.pipenv('install records')

        assert all(pkg in p.pipfile['packages'] for pkg in ['requests', 'tablib', 'records'])

        c = p.pipenv('check --unused .')
        assert 'tablib' not in c.out