[go: up one dir, main page]

compiletest_rs 0.9.0

The compiletest utility from the Rust compiler as a standalone testing harness
Documentation
//! Tests for the `bless` option

extern crate compiletest_rs as compiletest;

mod test_support;
use test_support::{testsuite, TestsuiteBuilder, GLOBAL_ROOT};
use compiletest::Config;

fn setup(mode: &str) -> (Config, TestsuiteBuilder) {
    let builder = testsuite(mode);
    let mut config = Config::default();
    let cfg_mode = mode.parse().expect("Invalid mode");
    config.mode = cfg_mode;
    config.src_base = builder.root.clone();
    config.build_base = GLOBAL_ROOT.join("build_base");

    (config, builder)
}

#[test]
fn test_bless_new_file() {
    let (mut config, builder) = setup("ui");
    config.bless = true;

    builder.mk_file(
              "foobar.rs",
              r#"
                  #[warn(unused_variables)]
                  fn main() {
                      let abc = "foobar";
                  }
              "#,
          );
    compiletest::run_tests(&config);

    // Blessing should cause the stderr to be created directly
    assert!(builder.file_contents("foobar.stderr").contains("unused variable"));

    // And a second run of the tests, with blessing disabled should work just fine
    config.bless = false;
    compiletest::run_tests(&config);
}

#[test]
fn test_bless_update_file() {
    let (mut config, builder) = setup("ui");
    config.bless = true;

    builder.mk_file(
        "foobar2.rs",
        r#"
            #[warn(unused_variables)]
            fn main() {
                let abc = "foobar_update";
            }
        "#,
    );
    builder.mk_file(
        "foobar2.stderr",
        r#"
            warning: unused variable: `abc`
             --> $DIR/foobar2.rs:4:27
              |
            4 |                       let abc = "foobar";
              |                           ^^^ help: if this is intentional, prefix it with an underscore: `_abc`
              |
            note: the lint level is defined here
             --> $DIR/foobar2.rs:2:26
              |
            2 |                   #[warn(unused_variables)]
              |                          ^^^^^^^^^^^^^^^^

            warning: 1 warning emitted
        "#,
    );
    compiletest::run_tests(&config);

    // Blessing should cause the stderr to be created directly
    assert!(builder.file_contents("foobar2.stderr").contains("unused variable"));
    assert!(builder.file_contents("foobar2.stderr").contains("foobar_update"));

    // And a second run of the tests, with blessing disabled should work just fine
    config.bless = false;
    compiletest::run_tests(&config);
}