• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

pantsbuild / pants / 26342152999

23 May 2026 07:59PM UTC coverage: 91.165% (-1.6%) from 92.792%
26342152999

push

github

web-flow
Run Linux ARM CI on Depot runners (#23363)

RunsOn is deprecating their v2 stack, and rather than migrate
to v3 we should use the resources kindly donated by Depot.

GitHub also now has Linux ARM runners, should we need them.

87305 of 95766 relevant lines covered (91.16%)

3.87 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

88.89
/src/python/pants/testutil/pytest_util.py
1
# Copyright 2021 Pants project contributors (see CONTRIBUTORS.md).
2
# Licensed under the Apache License, Version 2.0 (see LICENSE).
3

4
from __future__ import annotations
8✔
5

6
from contextlib import contextmanager
8✔
7

8

9
def assert_logged(
8✔
10
    caplog, expect_logged: list[tuple[int, str]] | None = None, exclusively: bool = True
11
) -> None:
12
    if not expect_logged:
3✔
13
        assert not caplog.records
×
14
        return
×
15

16
    if exclusively:
3✔
17
        assert len(caplog.records) == len(expect_logged), (
2✔
18
            f"Expected {len(expect_logged)} records, but got {len(caplog.records)}."
19
        )
20

21
    for idx, (lvl, msg) in enumerate(expect_logged):
3✔
22
        if not exclusively:
3✔
23
            log_record = next(
1✔
24
                (log_record for log_record in caplog.records if msg in log_record.message), None
25
            )
26
            assert log_record is not None, f"Expected log message {msg!r} was not found."
1✔
27
        else:
28
            log_record = caplog.records[idx]
2✔
29
        assert msg in log_record.message, (
3✔
30
            f"The text {msg!r} was not found in {log_record.message!r}."
31
        )
32
        assert lvl == log_record.levelno, (
3✔
33
            f"Expected level {lvl}, but got level {log_record.levelno}."
34
        )
35

36

37
@contextmanager
8✔
38
def no_exception():
8✔
39
    """Useful replacement for `pytest.raises()`, when there is no exception to be expected.
40

41
    When declaring parametrized tests, the test function can take a exceptions
42
    expectation as input, and always use a with-block for the code under test.
43

44
        @pytest.mark.parametrize(
45
            "answer, expect_raises",
46
            [
47
                (42, no_exception()),
48
                (12, pytest.raises(WrongAnswer)),
49
            ]
50
        )
51
        def test_search_for_the_meaning_of_life_universe_and_everything(
52
            answer: int,
53
            expect_raises: typing.ContextManager,
54
        ):
55
            with expect_raises:
56
                computer.validate_result(answer)
57
    """
58
    yield None
8✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc