File: hazmat_test.py

package info (click to toggle)
pre-commit 4.5.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,452 kB
  • sloc: python: 14,482; sh: 87; makefile: 4
file content (99 lines) | stat: -rw-r--r-- 2,628 bytes parent folder | download
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
from __future__ import annotations

import sys

import pytest

from pre_commit.commands.hazmat import _cmd_filenames
from pre_commit.commands.hazmat import main
from testing.util import cwd


def test_cmd_filenames_no_dash_dash():
    with pytest.raises(SystemExit) as excinfo:
        _cmd_filenames(('no', 'dashdash', 'here'))
    msg, = excinfo.value.args
    assert msg == 'hazmat entry must end with `--`'


def test_cmd_filenames_no_filenames():
    cmd, filenames = _cmd_filenames(('hello', 'world', '--'))
    assert cmd == ('hello', 'world')
    assert filenames == ()


def test_cmd_filenames_some_filenames():
    cmd, filenames = _cmd_filenames(('hello', 'world', '--', 'f1', 'f2'))
    assert cmd == ('hello', 'world')
    assert filenames == ('f1', 'f2')


def test_cmd_filenames_multiple_dashdash():
    cmd, filenames = _cmd_filenames(('hello', '--', 'arg', '--', 'f1', 'f2'))
    assert cmd == ('hello', '--', 'arg')
    assert filenames == ('f1', 'f2')


def test_cd_unexpected_filename():
    with pytest.raises(SystemExit) as excinfo:
        main(('cd', 'subdir', 'cmd', '--', 'subdir/1', 'not-subdir/2'))
    msg, = excinfo.value.args
    assert msg == "unexpected file without prefix='subdir/': not-subdir/2"


def _norm(out):
    return out.replace('\r\n', '\n')


def test_cd(tmp_path, capfd):
    subdir = tmp_path.joinpath('subdir')
    subdir.mkdir()
    subdir.joinpath('a').write_text('a')
    subdir.joinpath('b').write_text('b')

    with cwd(tmp_path):
        ret = main((
            'cd', 'subdir',
            sys.executable, '-c',
            'import os; print(os.getcwd());'
            'import sys; [print(open(f).read()) for f in sys.argv[1:]]',
            '--',
            'subdir/a', 'subdir/b',
        ))

    assert ret == 0
    out, err = capfd.readouterr()
    assert _norm(out) == f'{subdir}\na\nb\n'
    assert err == ''


def test_ignore_exit_code(capfd):
    ret = main((
        'ignore-exit-code', sys.executable, '-c', 'raise SystemExit("bye")',
    ))
    assert ret == 0
    out, err = capfd.readouterr()
    assert out == ''
    assert _norm(err) == 'bye\n'


def test_n1(capfd):
    ret = main((
        'n1', sys.executable, '-c', 'import sys; print(sys.argv[1:])',
        '--',
        'foo', 'bar', 'baz',
    ))
    assert ret == 0
    out, err = capfd.readouterr()
    assert _norm(out) == "['foo']\n['bar']\n['baz']\n"
    assert err == ''


def test_n1_some_error_code():
    ret = main((
        'n1', sys.executable, '-c',
        'import sys; raise SystemExit(sys.argv[1] == "error")',
        '--',
        'ok', 'error', 'ok',
    ))
    assert ret == 1