@@ -64,6 +64,22 @@ def test_function_that_returns_a_color
6464 CSS
6565 end
6666
67+ def test_function_that_returns_a_number
68+ assert_sass <<-SCSS , <<-CSS
69+ div { width: returns-a-number(); }
70+ SCSS
71+ div { width: -312rem; }
72+ CSS
73+ end
74+
75+ def test_function_that_takes_a_number
76+ assert_sass <<-SCSS , <<-CSS
77+ div { display: inspect-number(42.1px); }
78+ SCSS
79+ div { display: 42.1px; }
80+ CSS
81+ end
82+
6783 def test_function_with_optional_arguments
6884 assert_sass <<-SCSS , <<-EXPECTED_CSS
6985 div {
@@ -87,14 +103,14 @@ def test_functions_may_accept_sass_color_type
87103 end
88104
89105 def test_function_with_unsupported_tag
90- engine = Engine . new ( "div {url: function_with_unsupported_tag(1 );}" )
106+ engine = Engine . new ( "div {url: function_with_unsupported_tag(() );}" )
91107
92108 exception = assert_raises ( SassC ::SyntaxError ) do
93109 engine . render
94110 end
95111
96- assert_match /Sass argument of type sass_number unsupported/ , exception . message
97- assert_equal "[SassC::FunctionsHandler] Sass argument of type sass_number unsupported" , stderr_output
112+ assert_match /Sass argument of type sass_list unsupported/ , exception . message
113+ assert_equal "[SassC::FunctionsHandler] Sass argument of type sass_list unsupported" , stderr_output
98114 end
99115
100116 def test_function_with_error
@@ -117,6 +133,23 @@ def test_function_that_returns_a_sass_value
117133 CSS
118134 end
119135
136+ def test_function_that_returns_a_sass_map
137+ assert_sass <<-SCSS , <<-CSS
138+ $my-map: returns-sass-map();
139+ div { background: map-get( $my-map, color ); }
140+ SCSS
141+ div { background: black; }
142+ CSS
143+ end
144+
145+ def test_function_that_takes_a_sass_map
146+ assert_sass <<-SCSS , <<-CSS
147+ div { background-color: map-get( inspect-map(( color: black, number: 1.23px, string: "abc", map: ( x: 'y' ))), color ); }
148+ SCSS
149+ div { background-color: black; }
150+ CSS
151+ end
152+
120153 private
121154
122155 def assert_sass ( sass , expected_css )
@@ -151,7 +184,7 @@ def function_that_raises_errors
151184 raise StandardError , "Intentional wrong thing happened somewhere inside the custom function"
152185 end
153186
154- def function_with_unsupported_tag ( number )
187+ def function_with_unsupported_tag ( value )
155188 end
156189
157190 def nice_color_argument ( color )
@@ -162,10 +195,49 @@ def returns_a_color
162195 return Script ::Color . new ( red : 0 , green : 0 , blue : 0 )
163196 end
164197
198+ def returns_a_number
199+ return Sass ::Script ::Value ::Number . new ( -312 , 'rem' )
200+ end
201+
202+ def inspect_number ( argument )
203+ raise StandardError . new "passed value is not a Sass::Script::Value::Number" unless argument . is_a? Sass ::Script ::Value ::Number
204+ return argument
205+ end
206+
207+ def inspect_map ( argument )
208+ argument . to_h . each_pair do |key , value |
209+ raise StandardError . new "key #{ key . inspect } is not a string" unless key . is_a? Sass ::Script ::Value ::String
210+
211+ valueClass = case key . value
212+ when 'string'
213+ Sass ::Script ::Value ::String
214+ when 'number'
215+ Sass ::Script ::Value ::Number
216+ when 'color'
217+ Sass ::Script ::Value ::Color
218+ when 'map'
219+ Sass ::Script ::Value ::Map
220+ end
221+
222+ raise StandardError . new "unknown key #{ key . inspect } " unless valueClass
223+ raise StandardError . new "value for #{ key . inspect } is not a #{ valueClass } " unless value . is_a? valueClass
224+ end
225+ return argument
226+ end
227+
165228 def returns_sass_value
166229 return Sass ::Script ::Value ::Color . new ( red : 0 , green : 0 , blue : 0 )
167230 end
168231
232+ def returns_sass_map
233+ key = Script ::String . new ( "color" , "string" )
234+ value = Sass ::Script ::Value ::Color . new ( red : 0 , green : 0 , blue : 0 )
235+ values = { }
236+ values [ key ] = value
237+ map = Sass ::Script ::Value ::Map . new values
238+ return map
239+ end
240+
169241 module Compass
170242 def stylesheet_path ( path )
171243 Script ::String . new ( "/css/#{ path . value } " , :identifier )
0 commit comments