kanit

Toy init system
Log | Files | Refs | README | LICENSE

tap.rs (1350B)


      1 use std::sync::atomic::{AtomicUsize, Ordering};
      2 
      3 static LEVEL: AtomicUsize = AtomicUsize::new(0);
      4 
      5 fn print_leveled<S: ToString>(s: S) {
      6     println!(
      7         "{}{}",
      8         "    ".repeat(LEVEL.load(Ordering::Relaxed)),
      9         s.to_string()
     10     );
     11 }
     12 
     13 pub fn header() {
     14     println!("TAP version 14");
     15 }
     16 
     17 pub fn enter_subtest<S: ToString>(desc: Option<S>) {
     18     if let Some(desc) = desc {
     19         print_leveled(format!("# Subtest: {}", desc.to_string()))
     20     } else {
     21         print_leveled("# Subtest")
     22     }
     23 
     24     LEVEL.fetch_add(1, Ordering::Relaxed);
     25 }
     26 
     27 pub fn exit_subtest() {
     28     LEVEL.fetch_sub(1, Ordering::Relaxed);
     29 }
     30 
     31 pub fn plan(tests: usize) {
     32     print_leveled(format!("1..{tests}"))
     33 }
     34 
     35 pub fn bail<S: ToString>(desc: Option<S>) {
     36     if let Some(desc) = desc {
     37         print_leveled(format!("Bail out! {}", desc.to_string()))
     38     } else {
     39         print_leveled("Bail out!");
     40     }
     41 }
     42 
     43 pub fn ok<S: ToString>(test: usize, desc: Option<S>) {
     44     if let Some(desc) = desc {
     45         print_leveled(format!("ok {test} - {}", desc.to_string()));
     46     } else {
     47         print_leveled(format!("ok {test}"));
     48     }
     49 }
     50 
     51 pub fn not_ok<S: ToString>(test: usize, desc: Option<S>) {
     52     if let Some(desc) = desc {
     53         print_leveled(format!("not ok {test} - {}", desc.to_string()));
     54     } else {
     55         print_leveled(format!("not ok {test}"));
     56     }
     57 }