forked from pre-commit/pre-commit
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutil_test.py
More file actions
97 lines (68 loc) · 2.23 KB
/
util_test.py
File metadata and controls
97 lines (68 loc) · 2.23 KB
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
from __future__ import unicode_literals
import os
import os.path
import random
import pytest
from pre_commit.util import clean_path_on_failure
from pre_commit.util import cwd
from pre_commit.util import memoize_by_cwd
from pre_commit.util import shell_escape
from pre_commit.util import tmpdir
@pytest.fixture
def memoized_by_cwd():
@memoize_by_cwd
def func(arg):
return arg + str(random.getrandbits(64))
return func
def test_memoized_by_cwd_returns_same_twice_in_a_row(memoized_by_cwd):
ret = memoized_by_cwd('baz')
ret2 = memoized_by_cwd('baz')
assert ret is ret2
def test_memoized_by_cwd_returns_different_for_different_args(memoized_by_cwd):
ret = memoized_by_cwd('baz')
ret2 = memoized_by_cwd('bar')
assert ret.startswith('baz')
assert ret2.startswith('bar')
assert ret != ret2
def test_memoized_by_cwd_changes_with_different_cwd(memoized_by_cwd):
ret = memoized_by_cwd('baz')
with cwd('.git'):
ret2 = memoized_by_cwd('baz')
assert ret != ret2
def test_clean_on_failure_noop(in_tmpdir):
with clean_path_on_failure('foo'):
pass
def test_clean_path_on_failure_does_nothing_when_not_raising(in_tmpdir):
with clean_path_on_failure('foo'):
os.mkdir('foo')
assert os.path.exists('foo')
def test_clean_path_on_failure_cleans_for_normal_exception(in_tmpdir):
class MyException(Exception):
pass
with pytest.raises(MyException):
with clean_path_on_failure('foo'):
os.mkdir('foo')
raise MyException
assert not os.path.exists('foo')
def test_clean_path_on_failure_cleans_for_system_exit(in_tmpdir):
class MySystemExit(SystemExit):
pass
with pytest.raises(MySystemExit):
with clean_path_on_failure('foo'):
os.mkdir('foo')
raise MySystemExit
assert not os.path.exists('foo')
@pytest.mark.parametrize(
('input_str', 'expected'),
(
('', "''"),
('foo"bar', "'foo\"bar'"),
("foo'bar", "'foo'\"'\"'bar'")
),
)
def test_shell_escape(input_str, expected):
assert shell_escape(input_str) == expected
def test_tmpdir():
with tmpdir() as tempdir:
assert os.path.exists(tempdir)
assert not os.path.exists(tempdir)