use nu_test_support::nu;

#[test]
fn row() {
    let actual = nu!("[[key value]; [foo 1] [foo 2]] | transpose -r | debug");

    assert!(actual.out.contains("foo: 1"));
}

#[test]
fn row_but_last() {
    let actual = nu!("[[key value]; [foo 1] [foo 2]] | transpose -r -l | debug");

    assert!(actual.out.contains("foo: 2"));
}

#[test]
fn row_but_all() {
    let actual = nu!("[[key value]; [foo 1] [foo 2]] | transpose -r -a | debug");

    assert!(actual.out.contains("foo: [1, 2]"));
}

#[test]
fn throw_inner_error() {
    let error_msg = "This message should show up";
    let error = format!("(error make {{ msg: \"{}\" }})", error_msg);
    let actual = nu!(format!(
        "[[key value]; [foo 1] [foo 2] [{} 3]] | transpose",
        error
    ));

    assert!(actual.err.contains(error.as_str()));
}

#[test]
fn rejects_non_table_stream_input() {
    let actual = nu!("[1 2 3] | each { |it| ($it * 2) } | transpose | to nuon");

    assert!(actual.out.is_empty());
    assert!(actual.err.contains("only table"));
}