#test-cases #unit-testing #case #bare-metal #test

bare-test

A test framework for bare metal

13 unstable releases (3 breaking)

new 0.3.1 Jan 20, 2025
0.3.0 Jan 20, 2025
0.2.0 Dec 10, 2024
0.1.4 Dec 2, 2024
0.0.3 Oct 31, 2024

#298 in Testing


Used in 2 crates

MPL-2.0 license

60KB
1.5K SLoC

Rust 1.5K SLoC // 0.0% comments GNU Style Assembly 187 SLoC // 0.1% comments

Bare Test

A test framework for testing the bare metal.

Usage

  1. Install ostool.

    cargo install ostool
    
  2. setup .cargo/config.toml

    [target.'cfg(all(target_os = "none"))']
    runner = "ostool cargo-test"
    [build]
    target = "aarch64-unknown-none"
    
  3. setup cargo.toml.

    [dev-dependencies]
    bare-test = "0.0.1"
    
    [build-dependencies]
    sparreal-macros = "0.0.1"
    
  4. setup build.rs.

    fn main() {
        sparreal_macros::build_test_setup!();
    }
    
  5. new tests dir and add tests.rs.

    #![no_std]
    #![no_main]
    #![feature(custom_test_frameworks)]
    #![test_runner(bare_test::test_runner)]
    #![reexport_test_harness_main = "test_main"]
    
    extern crate bare_test;
    
    #[bare_test::entry]
    fn main() {
        test_main();
    }
    
    use bare_test::println;
    #[test_case]
    fn it_not_works() {
        println!("test2... ");
        assert_eq!(1, 2);
    }
    #[test_case]
    fn it_works1() {
        println!("test1... ");
        assert_eq!(1, 1);
    }
    #[test_case]
    fn test_uart(){
        // map uart data register for using.
        let uart_data_reg = iomap(0x9000000.into(), 0x1000);
    
        // write to uart, then it will be print to the screen.
        unsafe{
            uart_data_reg.write_volatile(b'A');
            uart_data_reg.write_volatile(b'\n');
        }
    
        println!("uart test passed!");
    }
    
  6. run cargo test --test tests -- --show-output.

Dependencies

~1.6–2.6MB
~51K SLoC