File: test_git_path.py

package info (click to toggle)
diff-cover 10.2.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,256 kB
  • sloc: python: 6,452; xml: 218; cpp: 18; sh: 12; makefile: 10
file content (100 lines) | stat: -rw-r--r-- 2,838 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
100
# pylint: disable=missing-function-docstring

"""Test for diff_cover.git_path"""

import pytest

from diff_cover.git_path import GitPathTool


@pytest.fixture(autouse=True)
def patch_git_path_tool(mocker):
    mocker.patch.object(GitPathTool, "_root", None)
    mocker.patch.object(GitPathTool, "_cwd", None)


@pytest.fixture
def process(mocker):
    process_ = mocker.Mock()
    process_.returncode = 0
    return process_


@pytest.fixture(autouse=True)
def subprocess(mocker, process):
    subprocess_ = mocker.patch("diff_cover.command_runner.subprocess")
    popen_mock = subprocess_.Popen
    popen_instance = popen_mock.return_value
    popen_instance.__enter__.return_value = process
    popen_instance.__exit__.return_value = None
    return subprocess_


def test_project_root_command(process, subprocess):
    process.communicate.return_value = (b"/phony/path", b"")

    GitPathTool.set_cwd(b"/phony/path")

    # Expect that the correct command was executed
    expected = ["git", "rev-parse", "--show-toplevel", "--encoding=utf-8"]
    subprocess.Popen.assert_called_with(
        expected, stdout=subprocess.PIPE, stderr=subprocess.PIPE
    )


def test_relative_path(process):
    process.communicate.return_value = (b"/home/user/work/diff-cover", b"")

    expected = "violations_reporter.py"
    cwd = "/home/user/work/diff-cover/diff_cover"

    GitPathTool.set_cwd(cwd)
    path = GitPathTool.relative_path("diff_cover/violations_reporter.py")

    # Expect relative path from diff_cover
    assert path == expected


def test_absolute_path(process):
    process.communicate.return_value = (
        b"/home/user/work dir/diff-cover\n--encoding=utf-8\n",
        b"",
    )

    expected = "/home/user/work dir/diff-cover/other_package/file.py"
    cwd = "/home/user/work dir/diff-cover/diff_cover"

    GitPathTool.set_cwd(cwd)
    path = GitPathTool.absolute_path("other_package/file.py")

    # Expect absolute path to file.py
    assert path == expected


def test_set_cwd_unicode(process):
    process.communicate.return_value = (b"\xe2\x94\xbb\xe2\x94\x81\xe2\x94\xbb", b"")

    expected = "\u253b\u2501\u253b/other_package/file.py"
    cwd = "\\u253b\\u2501\\u253b/diff_cover\n--encoding=utf-8\n"

    GitPathTool.set_cwd(cwd)
    path = GitPathTool.absolute_path("other_package/file.py")

    # Expect absolute path to file.py
    assert path == expected


def test_set_cwd_unicode_byte_passed_in_for_cwd(process):
    process.communicate.return_value = (
        b"\xe2\x94\xbb\xe2\x94\x81\xe2\x94\xbb\n--encoding=utf-8\n",
        b"",
    )

    expected = "\u253b\u2501\u253b/other_package/file.py"
    cwd = b"\\u253b\\u2501\\u253b/diff_cover"

    GitPathTool.set_cwd(cwd)
    path = GitPathTool.absolute_path("other_package/file.py")

    # Expect absolute path to file.py
    assert path == expected