//@ needs-target-std
//
// Test output of const super trait errors in both stable and nightly.
// We don't want to provide suggestions on stable that only make sense in nightly.

use run_make_support::{diff, rustc};

fn main() {
    let out = rustc()
        .input("const-super-trait.rs")
        .env("RUSTC_BOOTSTRAP", "-1")
        .cfg("feature_enabled")
        .run_fail()
        .assert_stderr_not_contains("as `const` to allow it to have `const` implementations")
        .stderr_utf8();
    diff()
        .expected_file("const-super-trait-stable-enabled.stderr")
        .normalize(
            "may not be used on the .* release channel",
            "may not be used on the NIGHTLY release channel",
        )
        .actual_text("(rustc)", &out)
        .run();
    let out = rustc()
        .input("const-super-trait.rs")
        .cfg("feature_enabled")
        .ui_testing()
        .run_fail()
        .assert_stderr_not_contains("enable `#![feature(const_trait_impl)]` in your crate and mark")
        .assert_stderr_contains("as `const` to allow it to have `const` implementations")
        .stderr_utf8();
    diff()
        .expected_file("const-super-trait-nightly-enabled.stderr")
        .actual_text("(rustc)", &out)
        .run();
    let out = rustc()
        .input("const-super-trait.rs")
        .env("RUSTC_BOOTSTRAP", "-1")
        .run_fail()
        .assert_stderr_not_contains("enable `#![feature(const_trait_impl)]` in your crate and mark")
        .assert_stderr_not_contains("as `const` to allow it to have `const` implementations")
        .stderr_utf8();
    diff()
        .expected_file("const-super-trait-stable-disabled.stderr")
        .actual_text("(rustc)", &out)
        .run();
    let out = rustc()
        .input("const-super-trait.rs")
        .ui_testing()
        .run_fail()
        .assert_stderr_contains("enable `#![feature(const_trait_impl)]` in your crate and mark")
        .stderr_utf8();
    diff()
        .expected_file("const-super-trait-nightly-disabled.stderr")
        .actual_text("(rustc)", &out)
        .run();
}
