diff options
| author | Miguel Ojeda <ojeda@kernel.org> | 2025-05-02 23:51:26 +0200 | 
|---|---|---|
| committer | Miguel Ojeda <ojeda@kernel.org> | 2025-05-27 20:07:09 +0200 | 
| commit | 36174d16f3ec072f9e07b6c6d59ba91b2d52f9e2 (patch) | |
| tree | 09a14ac206f4edd1d9d1487cf6c4e691d0089598 /rust/helpers/workqueue.c | |
| parent | 4bf7b97eb390f0a0730572101e0ce3367d31a770 (diff) | |
rust: kunit: support KUnit-mapped `assert!` macros in `#[test]`s
The KUnit `#[test]` support that landed recently is very basic and does
not map the `assert*!` macros into KUnit like the doctests do, so they
panic at the moment.
Thus implement the custom mapping in a similar way to doctests, reusing
the infrastructure there.
In Rust 1.88.0, the `file()` method in `Span` may be stable [1]. However,
it was changed recently (from `SourceFile`), so we need to do something
different in previous versions. Thus create a helper for it and use it
to get the path.
With this, a failing test suite like:
    #[kunit_tests(my_test_suite)]
    mod tests {
        use super::*;
        #[test]
        fn my_first_test() {
            assert_eq!(42, 43);
        }
        #[test]
        fn my_second_test() {
            assert!(42 >= 43);
        }
    }
will properly map back to KUnit, printing something like:
    [    1.924325]     KTAP version 1
    [    1.924421]     # Subtest: my_test_suite
    [    1.924506]     # speed: normal
    [    1.924525]     1..2
    [    1.926385]     # my_first_test: ASSERTION FAILED at rust/kernel/lib.rs:251
    [    1.926385]     Expected 42 == 43 to be true, but is false
    [    1.928026]     # my_first_test.speed: normal
    [    1.928075]     not ok 1 my_first_test
    [    1.928723]     # my_second_test: ASSERTION FAILED at rust/kernel/lib.rs:256
    [    1.928723]     Expected 42 >= 43 to be true, but is false
    [    1.929834]     # my_second_test.speed: normal
    [    1.929868]     not ok 2 my_second_test
    [    1.930032] # my_test_suite: pass:0 fail:2 skip:0 total:2
    [    1.930153] # Totals: pass:0 fail:2 skip:0 total
Link: https://github.com/rust-lang/rust/pull/140514 [1]
Reviewed-by: David Gow <davidgow@google.com>
Acked-by: Danilo Krummrich <dakr@kernel.org>
Link: https://lore.kernel.org/r/20250502215133.1923676-2-ojeda@kernel.org
[ Required `KUNIT=y` like for doctests. Used the `cfg_attr` from the
  TODO comment and clarified its comment now that the stabilization is
  in beta and thus quite likely stable in Rust 1.88.0. Simplified the
  `new_body` code by introducing a new variable. Added
  `#[allow(clippy::incompatible_msrv)]`. - Miguel ]
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
Diffstat (limited to 'rust/helpers/workqueue.c')
0 files changed, 0 insertions, 0 deletions
