#[test]
fn build() {
    let t = trybuild::TestCases::new();
    t.pass("tests/legacy_move.rs");
    t.pass("tests/tuple_struct.rs");
    t.pass("tests/visibility_modifiers.rs");
    t.pass("tests/option_field.rs");
}

use af_sui_pkg_sdk::sui_pkg_sdk;

sui_pkg_sdk!(package {
    module dummy {
        struct Int {
            option: Option<u64>,
        }
        struct Str {
            option: Option<String>,
        }
        struct Nested {
            option: Option<Str>
        }
    }
});

#[test]
fn display() {
    let none = dummy::Int::new(None);
    insta::assert_snapshot!(none, @r###"
    ╭────────┬──────╮
    │ Int           │
    ├────────┼──────┤
    │ option │ None │
    ╰────────┴──────╯
    "###);
    let some = dummy::Int::new(Some(1));
    insta::assert_snapshot!(some, @r###"
    ╭────────┬───╮
    │ Int        │
    ├────────┼───┤
    │ option │ 1 │
    ╰────────┴───╯
    "###);
    let none = dummy::Str::new(None);
    insta::assert_snapshot!(none, @r###"
    ╭────────┬──────╮
    │ Str           │
    ├────────┼──────┤
    │ option │ None │
    ╰────────┴──────╯
    "###);
    let some = dummy::Str::new(Some(String::new()));
    insta::assert_snapshot!(some, @r###"
    ╭────────┬──╮
    │ Str       │
    ├────────┼──┤
    │ option │  │
    ╰────────┴──╯
    "###);
    let nested_none = dummy::Nested::new(None);
    insta::assert_snapshot!(nested_none, @r###"
    ╭────────┬──────╮
    │ Nested        │
    ├────────┼──────┤
    │ option │ None │
    ╰────────┴──────╯
    "###);
    let nested_some = dummy::Nested::new(Some(dummy::Str::new(Some("1".into()))));
    insta::assert_snapshot!(nested_some, @r###"
    ╭────────┬────────────────╮
    │ Nested                  │
    ├────────┼────────────────┤
    │ option │ ╭────────┬───╮ │
    │        │ │ Str        │ │
    │        │ ├────────┼───┤ │
    │        │ │ option │ 1 │ │
    │        │ ╰────────┴───╯ │
    ╰────────┴────────────────╯
    "###);
}
