Captured from a real `junit-platform-console-standalone --details=tree` run against
NullAndEmptySourceTest, compiled and executed for real.

╷
├─ JUnit Platform Suite ✔
├─ JUnit Jupiter ✔
│  └─ NullAndEmptySourceTest ✔
│     └─ shouldRejectBlankUsernames(String) ✔
│        ├─ blank username [null] should be rejected ✔
│        ├─ blank username [""] should be rejected ✔
│        ├─ blank username [" "] should be rejected ✔
│        ├─ blank username ["\t"] should be rejected ✔
│        └─ blank username ["\n"] should be rejected ✔
└─ JUnit Vintage ✔

Test run finished after 185 ms
[         5 tests successful      ]
[         0 tests failed          ]

Five invocations, not three: @NullAndEmptySource contributes the null and "" cases, and the
@ValueSource(strings = {" ", "\t", "\n"}) alongside it contributes the other three. All five are
blank per String.isBlank() -- which is the actual point of the test, and the reason it needs real
tab and newline characters rather than the letters "t" and "n", which are not blank at all.
