1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
// Copyright (c) The Diem Core Contributors // SPDX-License-Identifier: MIT OR Apache-2.0 #![forbid(unsafe_code)] //! `datatest-stable` is a very simple test harness intended to write data-driven tests, where //! individual test cases are specified as data and not as code. Given: //! * a test `my_test` that accepts a path as input //! * a directory to look for files in //! * a pattern to match files on //! //! `datatest_stable` will call the `my_test` function once per matching file in the directory. //! //! This meets some of the needs provided by the `datatest` crate when using a stable rust compiler //! without using the `RUSTC_BOOTSTRAP` hack to use nightly features on the stable compiler. //! //! In order to setup data-driven tests for a particular test target you must do the following: //! //! 1. Configure the test target by setting the following in the `Cargo.toml` //! //! ```toml //! [[test]] //! name = "<test target name>" //! harness = false //! ``` //! //! 2. Call the `datatest_stable::harness!(testfn, root, pattern)` macro with the following //! parameters: //! * `testfn` - The test function to be executed on each matching input. This function must have //! the type `fn(&Path) -> datatest_stable::Result<()>` //! * `root` - The path to the root directory where the input files (fixtures) live. This path is //! relative to the root of the crate. //! * `pattern` - the regex used to match against and select each file to be tested. //! //! The three parameters can be repeated if you have multiple sets of data-driven tests to be run: //! `datatest_stable::harness!(testfn1, root1, pattern1, testfn2, root2, pattern2)` //! //! # Examples //! //! This is an example test. Use it with `harness = false`. //! //! ``` //! use std::path::Path; //! //! fn my_test(path: &Path) -> datatest_stable::Result<()> { //! // ... write test here //! //! Ok(()) //! } //! //! datatest_stable::harness!(my_test, "path/to/fixtures", r"^.*/*"); //! ``` //! //! # See also //! //! * [`datatest`](https://crates.io/crates/datatest): the original inspiration for this crate, //! with a better UI and more features but targeting nightly Rust //! * [Data-driven testing](https://en.wikipedia.org/wiki/Data-driven_testing) #![warn(missing_docs)] mod macros; mod runner; mod utils; /// The result type for `datatest-stable` tests. pub type Result<T> = std::result::Result<T, Box<dyn std::error::Error>>; pub use self::runner::{runner, Requirements};