use nu_test_support::{nu, pipeline};

#[test]
fn discards_rows_where_given_column_is_empty() {
    let sample_json = r#"
                {
                    "amigos": [
                        {"name":   "Yehuda", "rusty_luck": 1},
                        {"name": "JT", "rusty_luck": 1},
                        {"name":   "Andres", "rusty_luck": 1},
                        {"name":"GorbyPuff"}
                    ]
                }
            "#;

    let actual = nu!(pipeline(&format!(
        "
                {sample_json}
                | get amigos
                | compact rusty_luck
                | length
            "
    )));

    assert_eq!(actual.out, "3");
}
#[test]
fn discards_empty_rows_by_default() {
    let actual = nu!(pipeline(
        r#"
                echo "[1,2,3,14,null]"
                | from json
                | compact
                | length
            "#
    ));

    assert_eq!(actual.out, "4");
}

#[test]
fn discard_empty_list_in_table() {
    let actual = nu!(pipeline(
        r#"
           [["a", "b"]; ["c", "d"], ["h", []]] | compact -e b | length
        "#
    ));

    assert_eq!(actual.out, "1");
}

#[test]
fn discard_empty_record_in_table() {
    let actual = nu!(pipeline(
        r#"
           [["a", "b"]; ["c", "d"], ["h", {}]] | compact -e b | length
        "#
    ));

    assert_eq!(actual.out, "1");
}

#[test]
fn dont_discard_empty_record_in_table_if_column_not_set() {
    let actual = nu!(pipeline(
        r#"
           [["a", "b"]; ["c", "d"], ["h", {}]] | compact -e | length
        "#
    ));

    assert_eq!(actual.out, "2");
}

#[test]
fn dont_discard_empty_list_in_table_if_column_not_set() {
    let actual = nu!(pipeline(
        r#"
           [["a", "b"]; ["c", "d"], ["h", []]] | compact -e | length
        "#
    ));

    assert_eq!(actual.out, "2");
}

#[test]
fn dont_discard_null_in_table_if_column_not_set() {
    let actual = nu!(pipeline(
        r#"
           [["a", "b"]; ["c", "d"], ["h", null]] | compact -e | length
        "#
    ));

    assert_eq!(actual.out, "2");
}
