From 5e20f57ee00b5644839448c286a91d74d21b4393 Mon Sep 17 00:00:00 2001 From: ConnorSkees <39542938+ConnorSkees@users.noreply.github.com> Date: Mon, 30 Mar 2020 16:10:02 -0400 Subject: [PATCH] () is treated as empty map --- src/builtin/map.rs | 8 +++++++- tests/map.rs | 5 +++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/builtin/map.rs b/src/builtin/map.rs index 5832ec2..82e5586 100644 --- a/src/builtin/map.rs +++ b/src/builtin/map.rs @@ -2,7 +2,7 @@ use std::collections::HashMap; use super::Builtin; use crate::common::{Brackets, ListSeparator}; -use crate::value::Value; +use crate::value::{Value, SassMap}; pub(crate) fn register(f: &mut HashMap) { f.insert( @@ -11,6 +11,7 @@ pub(crate) fn register(f: &mut HashMap) { max_args!(args, 2); let map = match arg!(args, 0, "map") { Value::Map(m) => m, + Value::List(v, ..) if v.is_empty() => SassMap::new(), v => return Err(format!("$map: {} is not a map.", v).into()), }; let key = arg!(args, 1, "key"); @@ -23,6 +24,7 @@ pub(crate) fn register(f: &mut HashMap) { max_args!(args, 2); let map = match arg!(args, 0, "map") { Value::Map(m) => m, + Value::List(v, ..) if v.is_empty() => SassMap::new(), v => return Err(format!("$map: {} is not a map.", v).into()), }; let key = arg!(args, 1, "key"); @@ -35,6 +37,7 @@ pub(crate) fn register(f: &mut HashMap) { max_args!(args, 1); let map = match arg!(args, 0, "map") { Value::Map(m) => m, + Value::List(v, ..) if v.is_empty() => SassMap::new(), v => return Err(format!("$map: {} is not a map.", v).into()), }; Ok(Value::List( @@ -50,6 +53,7 @@ pub(crate) fn register(f: &mut HashMap) { max_args!(args, 1); let map = match arg!(args, 0, "map") { Value::Map(m) => m, + Value::List(v, ..) if v.is_empty() => SassMap::new(), v => return Err(format!("$map: {} is not a map.", v).into()), }; Ok(Value::List( @@ -65,10 +69,12 @@ pub(crate) fn register(f: &mut HashMap) { max_args!(args, 2); let mut map1 = match arg!(args, 0, "map1") { Value::Map(m) => m, + Value::List(v, ..) if v.is_empty() => SassMap::new(), v => return Err(format!("$map1: {} is not a map.", v).into()), }; let map2 = match arg!(args, 1, "map2") { Value::Map(m) => m, + Value::List(v, ..) if v.is_empty() => SassMap::new(), v => return Err(format!("$map2: {} is not a map.", v).into()), }; map1.merge(map2); diff --git a/tests/map.rs b/tests/map.rs index 352a09e..8fd7b80 100644 --- a/tests/map.rs +++ b/tests/map.rs @@ -53,6 +53,11 @@ test!( "a {\n color: inspect(map-merge((a: b), (c: d)));\n}\n", "a {\n color: (a: b, c: d);\n}\n" ); +test!( + map_merge_both_empty, + "a {\n color: inspect(map-merge((), ()));\n}\n", + "a {\n color: ();\n}\n" +); error!( map_merge_map1_non_map, "a {\n color: map-merge(foo, (a: b));\n}\n", "Error: $map1: foo is not a map."