#[macro_use]
mod macros;

test!(
    map_set_nested_empty,
    "@use 'sass:map'; a {b: inspect(map.set((c: ()), c, d, e, f))}",
    "a {\n  b: (c: (d: (e: f)));\n}\n"
);
test!(
    map_set_update_existing,
    "@use 'sass:map'; a {b: inspect(map.set((c: (d: e)), c, d, f))}",
    "a {\n  b: (c: (d: f));\n}\n"
);
test!(
    map_set_new_key,
    "@use 'sass:map'; a {b: inspect(map.set((c: (d: e)), c, f, g))}",
    "a {\n  b: (c: (d: e, f: g));\n}\n"
);
test!(
    map_set_value_is_not_map,
    "@use 'sass:map'; a {b: inspect(map.set((c: 1), c, d, f))}",
    "a {\n  b: (c: (d: f));\n}\n"
);
test!(
    map_merge_merge_into_map_with_many_keys,
    r#"
    @use "sass:map";

    $fonts: (
      "Helvetica": (
        "weights": (
          "regular": 400,
          "medium": 500,
          "bold": 700
        )
      )
    );

    a {
        color: inspect(map.merge($fonts, "Helvetica", "weights", "regular", (a: 300)));
    }"#,
    "a {\n  color: (\"Helvetica\": (\"weights\": (\"regular\": (a: 300), \"medium\": 500, \"bold\": 700)));\n}\n"
);
test!(
    map_merge_nested,
    r#"
    @use "sass:map";

    $fonts: (
      "Helvetica": (
        "weights": (
          "regular": 400,
          "medium": 500,
          "bold": 700
        )
      )
    );

    a {
        color: inspect(map.set($fonts, "Helvetica", "weights", "regular", 300));
    }"#,
    "a {\n  color: (\"Helvetica\": (\"weights\": (\"regular\": 300, \"medium\": 500, \"bold\": 700)));\n}\n"
);
test!(
    deep_merge_no_nesting,
    r#"@use "sass:map";

    a {
        color: inspect(map.deep-merge($map1: (c: d), $map2: (1: 2)));
    }"#,
    "a {\n  color: (c: d, 1: 2);\n}\n"
);
test!(
    deep_merge_positional,
    r#"@use "sass:map";

    a {
        color: inspect(map.deep-merge((a: b), (c: d)));
    }"#,
    "a {\n  color: (a: b, c: d);\n}\n"
);
test!(
    deep_merge_empty_maps,
    r#"@use "sass:map";

    a {
        color: inspect(map.deep-merge((), ()));
    }"#,
    "a {\n  color: ();\n}\n"
);
test!(
    deep_merge_empty_maps_bracketed_list,
    r#"@use "sass:map";

    a {
        color: inspect(map.deep-merge([], []));
    }"#,
    "a {\n  color: ();\n}\n"
);
test!(
    deep_merge_empty_first,
    r#"@use "sass:map";

    a {
        color: inspect(map.deep-merge((a: b), ()));
    }"#,
    "a {\n  color: (a: b);\n}\n"
);
test!(
    deep_merge_empty_second,
    r#"@use "sass:map";

    a {
        color: inspect(map.deep-merge((), (a: b)));
    }"#,
    "a {\n  color: (a: b);\n}\n"
);
test!(
    deep_merge_empty_deep,
    r#"@use "sass:map";

    a {
        color: inspect(map.deep-merge((c: (d: e)), (c: ())));
    }"#,
    "a {\n  color: (c: (d: e));\n}\n"
);
test!(
    deep_merge_empty_bracketed_list_deep,
    r#"@use "sass:map";

    a {
        color: inspect(map.deep-merge((c: (d: e)), (c: [])));
    }"#,
    "a {\n  color: (c: (d: e));\n}\n"
);
test!(
    deep_remove_key_dne,
    r#"@use "sass:map";

    a {
        color: inspect(map.deep-remove((a: b), 1));
    }"#,
    "a {\n  color: (a: b);\n}\n"
);
test!(
    deep_remove_nested_remove,
    r#"@use "sass:map";

    a {
        color: inspect(map.deep-remove((c: (d: e)), c, d));
    }"#,
    "a {\n  color: (c: ());\n}\n"
);
test!(
    deep_remove_nested_keys_dne,
    r#"@use "sass:map";

    a {
        color: inspect(map.deep-remove((c: (d: e)), c, d, e, f, g));
    }"#,
    "a {\n  color: (c: (d: e));\n}\n"
);