llvm-project

Форк
0
/
revert_checker_test.py 
133 строки · 4.4 Кб
1
#!/usr/bin/env python3
2
# -*- coding: utf-8 -*-
3
# ===----------------------------------------------------------------------===##
4
#
5
# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
6
# See https://llvm.org/LICENSE.txt for license information.
7
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
8
#
9
# ===----------------------------------------------------------------------===##
10
"""Tests for revert_checker.
11

12
Note that these tests require having LLVM's git history available, since our
13
repository has a few interesting instances of edge-cases.
14
"""
15

16
import os
17
import logging
18
import unittest
19
from typing import List
20

21
import revert_checker
22

23
# pylint: disable=protected-access
24

25

26
def get_llvm_project_path() -> str:
27
    """Returns the path to llvm-project's root."""
28
    my_dir = os.path.dirname(__file__)
29
    return os.path.realpath(os.path.join(my_dir, "..", ".."))
30

31

32
class _SilencingFilter(logging.Filter):
33
    """Silences all log messages.
34

35
    Also collects info about log messages that would've been emitted.
36
    """
37

38
    def __init__(self) -> None:
39
        self.messages: List[str] = []
40

41
    def filter(self, record: logging.LogRecord) -> bool:
42
        self.messages.append(record.getMessage())
43
        return False
44

45

46
class Test(unittest.TestCase):
47
    """Tests for revert_checker."""
48

49
    def silence_logging(self) -> _SilencingFilter:
50
        root = logging.getLogger()
51
        filt = _SilencingFilter()
52
        root.addFilter(filt)
53
        self.addCleanup(root.removeFilter, filt)
54
        return filt
55

56
    def test_log_stream_with_known_sha_range(self) -> None:
57
        start_sha = "e241573d5972d34a323fa5c64774c4207340beb3"
58
        end_sha = "a7a37517751ffb0f5529011b4ba96e67fcb27510"
59
        commits = [
60
            revert_checker._LogEntry(
61
                "e241573d5972d34a323fa5c64774c4207340beb3",
62
                "\n".join(
63
                    (
64
                        "[mlir] NFC: remove IntegerValueSet / MutableIntegerSet",
65
                        "",
66
                        "Summary:",
67
                        "- these are unused and really not needed now given flat "
68
                        "affine",
69
                        "  constraints",
70
                        "",
71
                        "Differential Revision: https://reviews.llvm.org/D75792",
72
                    )
73
                ),
74
            ),
75
            revert_checker._LogEntry(
76
                "97572fa6e9daecd648873496fd11f7d1e25a55f0",
77
                "[NFC] use hasAnyOperatorName and hasAnyOverloadedOperatorName "
78
                "functions in clang-tidy matchers",
79
            ),
80
        ]
81

82
        logs = list(
83
            revert_checker._log_stream(
84
                get_llvm_project_path(),
85
                root_sha=start_sha,
86
                end_at_sha=end_sha,
87
            )
88
        )
89
        self.assertEqual(commits, logs)
90

91
    def test_reverted_noncommit_object_is_a_nop(self) -> None:
92
        log_filter = self.silence_logging()
93
        # c9944df916e41b1014dff5f6f75d52297b48ecdc mentions reverting a non-commit
94
        # object. It sits between the given base_ref and root.
95
        reverts = revert_checker.find_reverts(
96
            git_dir=get_llvm_project_path(),
97
            across_ref="c9944df916e41b1014dff5f6f75d52297b48ecdc~",
98
            root="c9944df916e41b1014dff5f6f75d52297b48ecdc",
99
        )
100
        self.assertEqual(reverts, [])
101

102
        complaint = (
103
            "Failed to resolve reverted object "
104
            "edd18355be574122aaa9abf58c15d8c50fb085a1"
105
        )
106
        self.assertTrue(
107
            any(x.startswith(complaint) for x in log_filter.messages),
108
            log_filter.messages,
109
        )
110

111
    def test_known_reverts_across_arbitrary_llvm_rev(self) -> None:
112
        reverts = revert_checker.find_reverts(
113
            git_dir=get_llvm_project_path(),
114
            across_ref="c47f971694be0159ffddfee8a75ae515eba91439",
115
            root="9f981e9adf9c8d29bb80306daf08d2770263ade6",
116
        )
117
        self.assertEqual(
118
            reverts,
119
            [
120
                revert_checker.Revert(
121
                    sha="4e0fe038f438ae1679eae9e156e1f248595b2373",
122
                    reverted_sha="65b21282c710afe9c275778820c6e3c1cf46734b",
123
                ),
124
                revert_checker.Revert(
125
                    sha="9f981e9adf9c8d29bb80306daf08d2770263ade6",
126
                    reverted_sha="4060016fce3e6a0b926ee9fc59e440a612d3a2ec",
127
                ),
128
            ],
129
        )
130

131

132
if __name__ == "__main__":
133
    unittest.main()
134

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.