#[macro_use]
mod macros;

test!(
    length_of_empty_arglist,
    "@mixin foo($a...) {\n    color: length($list: $a);\n}\na {\n    @include foo;\n}\n",
    "a {\n  color: 0;\n}\n"
);
test!(
    length_of_arglist_in_mixin,
    "@mixin foo($a...) {\n    color: length($list: $a);\n}\na {\n    @include foo(a, 2, c);\n}\n",
    "a {\n  color: 3;\n}\n"
);
test!(
    arglist_in_at_each,
    "@function sum($numbers...) {
        $sum: 0;
    
        @each $number in $numbers {
            $sum: $sum + $number;
        }
        @return $sum;
    }
    
    a {
        width: sum(50px, 30px, 100px);
    }",
    "a {\n  width: 180px;\n}\n"
);
error!(
    emit_empty_arglist,
    "@function foo($a...) {
        @return $a;
    }
    
    a {
        color: foo();
    }",
    "Error: () isn't a valid CSS value."
);
test!(
    inspect_empty_arglist,
    "@function foo($a...) {
        @return inspect($a);
    }
    
    a {
        color: foo();
    }",
    "a {\n  color: ();\n}\n"
);
test!(
    empty_arglist_is_allowed_in_map_functions,
    "@function foo($a...) {
        @return map-get($map: $a, $key: foo);
    }

    a {
        color: inspect(foo());
    }",
    "a {\n  color: null;\n}\n"
);
test!(
    inspect_arglist_with_one_arg,
    "@function foo($a...) {
        @return inspect($a);
    }
    
    a {
        color: inspect(foo(1));
    }",
    "a {\n  color: (1,);\n}\n"
);
error!(
    empty_arglist_is_error,
    "@function foo($a...) {
        @return $a;
    }

    a {
        color: foo();
    }",
    "Error: () isn't a valid CSS value."
);
test!(
    arglist_of_only_null_is_null,
    "@function foo($a...) {
        @return $a;
    }
    a {
        color: foo(null, null);
    }",
    ""
);
test!(
    keyword_args_no_positional,
    "@mixin foo($a...) {
        pos: inspect($a);
        kw: inspect(keywords($a));
    }

    a {
        @include foo($a: b);
    }",
    "a {\n  pos: ();\n  kw: (a: b);\n}\n"
);
test!(
    keyword_args_one_positional,
    "@mixin foo($a...) {
        pos: inspect($a);
        kw: inspect(keywords($a));
    }

    a {
        @include foo(a, $b: c);
    }",
    "a {\n  pos: (a,);\n  kw: (b: c);\n}\n"
);
test!(
    keyword_args_length_no_positional,
    "@mixin foo($a...) {
        pos: length($a);
        kw: length(keywords($a));
    }

    a {
        @include foo($a: b);
    }",
    "a {\n  pos: 0;\n  kw: 1;\n}\n"
);
error!(
    keyword_args_no_positional_is_invalid,
    "@mixin foo($a...) {
        pos: $a;
        kw: length(keywords($a));
    }

    a {
        @include foo($a: b);
    }",
    "Error: () isn't a valid CSS value."
);