pylint icon indicating copy to clipboard operation
pylint copied to clipboard

Allow CheckerTestCase to assertDoesNotAddMessages() to check that a specific message has not been added

Open StephenYu2018 opened this issue 2 months ago • 8 comments

Current problem

I use CheckerTestCase in tests for linting scripts in a project. There are some tests where I want to assert that a specific message has not been added given a specific code snippet. While assertNoMessages() works for now, it is possible in the future that I want to assert that a different message occurs for the same code snippet. assertNoMessages() wouldn't work because we do want to check that the different message has been added, but replacing assertNoMessages() with assertAddsMessages(different_message, ...) would mean that we can no longer check that the original message is not being added.

Desired solution

If I could directly assert that a specific message has not been added, then I could have more control over which specific messages I'd want or would not want under various scenarios. For my given example, something like this:

assertDoesNotAddMessages(original_message, ...)
assertAddsMessages(different_message, ...)

Better represents which messages I want to occur and which messages I want to not occur.

Additional context

No response

StephenYu2018 avatar May 05 '24 14:05 StephenYu2018

What about adding one function like assertMessages(emitted:iterable[str] | None, not_emitted: iterable[str] | None) ? Emitted = None would means no message were emitted, not_emitted = None would means we don't care if unexpected messages are emitted.

Pierre-Sassoulas avatar May 05 '24 17:05 Pierre-Sassoulas

The original proposal is more like this from the stdlib:

self.assertLogs(...
self.assertNoLogs(...

If we add a new assertMessages, we have "two ways to do it" unless we deprecate the old way (no reason to).

jacobtylerwalls avatar May 05 '24 21:05 jacobtylerwalls