I'd like to propose moving the definitions of structs such as TestDesc
, TestDescAndFn
etc. in libtest into a separate crate.
Motivation
I'm interested in using the #[test]
annotation in a no_std
environment, together with custom_test_framework
s. I'm aware of #[test_case]
, however I would like to be able to also use #[should_panic]
. The rust compiler already parses this attribute and makes it available in the TestDesc
struct.
When using no_std
using libtest is currently not possible, since it requires panic_abort
or panic_unwind
and std
. The panic part is problematic, since this clashes with the custom panic_handler
in no_std
applications.
Solution
Moving the definitions of the structs and enums into a seperate (internal) crate would allow #[test]
to work with custom_test_framework
s and no_std
. The parsing of should_panic
and other attributes is done at compile time and requires no special runtime support.
The #[test]
attribute should then work without libtest and only require the new internal crate containing the struct definitions, when used together with a custom_test_framework
.
Alternative repr(C)
I could also make do with manually copying the definitions, as long as they have a defined layout via #[repr(C)]
. Since libtest may change at any time, this is obviously not a preferred solution.
I hope this is the right place to ask about this. Are there any reasons I missed, why this is not feasible?