//! Tests for the `cargo clippy` command.

use cargo_test_support::{clippy_is_available, project, registry::Package};

#[cargo_test]
// Clippy should never be considered fresh.
fn clippy_force_rebuild() {
    if !clippy_is_available() {
        return;
    }

    Package::new("dep1", "0.1.0").publish();

    // This is just a random clippy lint (assertions_on_constants) that
    // hopefully won't change much in the future.
    let p = project()
        .file(
            "Cargo.toml",
            r#"
            [package]
            name = "foo"
            version = "0.1.0"

            [dependencies]
            dep1 = "0.1"
            "#,
        )
        .file("src/lib.rs", "pub fn f() { assert!(true); }")
        .build();

    p.cargo("clippy-preview -Zunstable-options -v")
        .masquerade_as_nightly_cargo()
        .with_stderr_contains("[..]assert!(true)[..]")
        .run();

    // Make sure it runs again.
    p.cargo("clippy-preview -Zunstable-options -v")
        .masquerade_as_nightly_cargo()
        .with_stderr_contains("[FRESH] dep1 v0.1.0")
        .with_stderr_contains("[..]assert!(true)[..]")
        .run();
}

#[cargo_test]
fn clippy_passes_args() {
    if !clippy_is_available() {
        return;
    }

    // This is just a random clippy lint (assertions_on_constants) that
    // hopefully won't change much in the future.
    let p = project()
        .file(
            "Cargo.toml",
            r#"
            [package]
            name = "foo"
            version = "0.1.0"

            [dependencies]
            "#,
        )
        .file("src/lib.rs", "pub fn f() { assert!(true); }")
        .build();

    p.cargo("clippy-preview -Zunstable-options -v -- -Aclippy::assertions_on_constants")
        .masquerade_as_nightly_cargo()
        .with_stderr_does_not_contain("[..]assert!(true)[..]")
        .run();

    // Make sure it runs again.
    p.cargo("clippy-preview -Zunstable-options -v")
        .masquerade_as_nightly_cargo()
        .with_stderr_contains("[..]assert!(true)[..]")
        .run();
}
