piko-fast-gem 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of piko-fast-gem might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/piko-fast-gem.gemspec +11 -0
- data/sassc-2.4.0/CHANGELOG.md +97 -0
- data/sassc-2.4.0/CODE_OF_CONDUCT.md +10 -0
- data/sassc-2.4.0/Gemfile +2 -0
- data/sassc-2.4.0/LICENSE.txt +22 -0
- data/sassc-2.4.0/README.md +68 -0
- data/sassc-2.4.0/Rakefile +51 -0
- data/sassc-2.4.0/ext/depend +4 -0
- data/sassc-2.4.0/ext/extconf.rb +92 -0
- data/sassc-2.4.0/ext/libsass/VERSION +1 -0
- data/sassc-2.4.0/ext/libsass/contrib/plugin.cpp +60 -0
- data/sassc-2.4.0/ext/libsass/include/sass/base.h +97 -0
- data/sassc-2.4.0/ext/libsass/include/sass/context.h +174 -0
- data/sassc-2.4.0/ext/libsass/include/sass/functions.h +139 -0
- data/sassc-2.4.0/ext/libsass/include/sass/values.h +145 -0
- data/sassc-2.4.0/ext/libsass/include/sass/version.h +12 -0
- data/sassc-2.4.0/ext/libsass/include/sass.h +15 -0
- data/sassc-2.4.0/ext/libsass/include/sass2scss.h +120 -0
- data/sassc-2.4.0/ext/libsass/src/MurmurHash2.hpp +91 -0
- data/sassc-2.4.0/ext/libsass/src/ast.cpp +953 -0
- data/sassc-2.4.0/ext/libsass/src/ast.hpp +1064 -0
- data/sassc-2.4.0/ext/libsass/src/ast2c.cpp +80 -0
- data/sassc-2.4.0/ext/libsass/src/ast2c.hpp +39 -0
- data/sassc-2.4.0/ext/libsass/src/ast_def_macros.hpp +140 -0
- data/sassc-2.4.0/ext/libsass/src/ast_fwd_decl.cpp +31 -0
- data/sassc-2.4.0/ext/libsass/src/ast_fwd_decl.hpp +274 -0
- data/sassc-2.4.0/ext/libsass/src/ast_helpers.hpp +292 -0
- data/sassc-2.4.0/ext/libsass/src/ast_sel_cmp.cpp +396 -0
- data/sassc-2.4.0/ext/libsass/src/ast_sel_super.cpp +539 -0
- data/sassc-2.4.0/ext/libsass/src/ast_sel_unify.cpp +275 -0
- data/sassc-2.4.0/ext/libsass/src/ast_sel_weave.cpp +616 -0
- data/sassc-2.4.0/ext/libsass/src/ast_selectors.cpp +1043 -0
- data/sassc-2.4.0/ext/libsass/src/ast_selectors.hpp +522 -0
- data/sassc-2.4.0/ext/libsass/src/ast_supports.cpp +114 -0
- data/sassc-2.4.0/ext/libsass/src/ast_supports.hpp +121 -0
- data/sassc-2.4.0/ext/libsass/src/ast_values.cpp +1154 -0
- data/sassc-2.4.0/ext/libsass/src/ast_values.hpp +498 -0
- data/sassc-2.4.0/ext/libsass/src/b64/cencode.h +32 -0
- data/sassc-2.4.0/ext/libsass/src/b64/encode.h +79 -0
- data/sassc-2.4.0/ext/libsass/src/backtrace.cpp +50 -0
- data/sassc-2.4.0/ext/libsass/src/backtrace.hpp +29 -0
- data/sassc-2.4.0/ext/libsass/src/base64vlq.cpp +47 -0
- data/sassc-2.4.0/ext/libsass/src/base64vlq.hpp +30 -0
- data/sassc-2.4.0/ext/libsass/src/bind.cpp +312 -0
- data/sassc-2.4.0/ext/libsass/src/bind.hpp +15 -0
- data/sassc-2.4.0/ext/libsass/src/c2ast.cpp +64 -0
- data/sassc-2.4.0/ext/libsass/src/c2ast.hpp +14 -0
- data/sassc-2.4.0/ext/libsass/src/c99func.c +54 -0
- data/sassc-2.4.0/ext/libsass/src/cencode.c +106 -0
- data/sassc-2.4.0/ext/libsass/src/check_nesting.cpp +393 -0
- data/sassc-2.4.0/ext/libsass/src/check_nesting.hpp +70 -0
- data/sassc-2.4.0/ext/libsass/src/color_maps.cpp +652 -0
- data/sassc-2.4.0/ext/libsass/src/color_maps.hpp +323 -0
- data/sassc-2.4.0/ext/libsass/src/constants.cpp +199 -0
- data/sassc-2.4.0/ext/libsass/src/constants.hpp +200 -0
- data/sassc-2.4.0/ext/libsass/src/context.cpp +863 -0
- data/sassc-2.4.0/ext/libsass/src/context.hpp +140 -0
- data/sassc-2.4.0/ext/libsass/src/cssize.cpp +521 -0
- data/sassc-2.4.0/ext/libsass/src/cssize.hpp +71 -0
- data/sassc-2.4.0/ext/libsass/src/dart_helpers.hpp +199 -0
- data/sassc-2.4.0/ext/libsass/src/debug.hpp +43 -0
- data/sassc-2.4.0/ext/libsass/src/debugger.hpp +963 -0
- data/sassc-2.4.0/ext/libsass/src/emitter.cpp +297 -0
- data/sassc-2.4.0/ext/libsass/src/emitter.hpp +101 -0
- data/sassc-2.4.0/ext/libsass/src/environment.cpp +260 -0
- data/sassc-2.4.0/ext/libsass/src/environment.hpp +124 -0
- data/sassc-2.4.0/ext/libsass/src/error_handling.cpp +233 -0
- data/sassc-2.4.0/ext/libsass/src/error_handling.hpp +239 -0
- data/sassc-2.4.0/ext/libsass/src/eval.cpp +1543 -0
- data/sassc-2.4.0/ext/libsass/src/eval.hpp +110 -0
- data/sassc-2.4.0/ext/libsass/src/eval_selectors.cpp +75 -0
- data/sassc-2.4.0/ext/libsass/src/expand.cpp +875 -0
- data/sassc-2.4.0/ext/libsass/src/expand.hpp +98 -0
- data/sassc-2.4.0/ext/libsass/src/extender.cpp +1188 -0
- data/sassc-2.4.0/ext/libsass/src/extender.hpp +399 -0
- data/sassc-2.4.0/ext/libsass/src/extension.cpp +43 -0
- data/sassc-2.4.0/ext/libsass/src/extension.hpp +89 -0
- data/sassc-2.4.0/ext/libsass/src/file.cpp +531 -0
- data/sassc-2.4.0/ext/libsass/src/file.hpp +124 -0
- data/sassc-2.4.0/ext/libsass/src/fn_colors.cpp +596 -0
- data/sassc-2.4.0/ext/libsass/src/fn_colors.hpp +85 -0
- data/sassc-2.4.0/ext/libsass/src/fn_lists.cpp +285 -0
- data/sassc-2.4.0/ext/libsass/src/fn_lists.hpp +34 -0
- data/sassc-2.4.0/ext/libsass/src/fn_maps.cpp +94 -0
- data/sassc-2.4.0/ext/libsass/src/fn_maps.hpp +30 -0
- data/sassc-2.4.0/ext/libsass/src/fn_miscs.cpp +244 -0
- data/sassc-2.4.0/ext/libsass/src/fn_miscs.hpp +40 -0
- data/sassc-2.4.0/ext/libsass/src/fn_numbers.cpp +227 -0
- data/sassc-2.4.0/ext/libsass/src/fn_numbers.hpp +45 -0
- data/sassc-2.4.0/ext/libsass/src/fn_selectors.cpp +205 -0
- data/sassc-2.4.0/ext/libsass/src/fn_selectors.hpp +35 -0
- data/sassc-2.4.0/ext/libsass/src/fn_strings.cpp +268 -0
- data/sassc-2.4.0/ext/libsass/src/fn_strings.hpp +34 -0
- data/sassc-2.4.0/ext/libsass/src/fn_utils.cpp +158 -0
- data/sassc-2.4.0/ext/libsass/src/fn_utils.hpp +62 -0
- data/sassc-2.4.0/ext/libsass/src/inspect.cpp +1125 -0
- data/sassc-2.4.0/ext/libsass/src/inspect.hpp +101 -0
- data/sassc-2.4.0/ext/libsass/src/json.cpp +1436 -0
- data/sassc-2.4.0/ext/libsass/src/json.hpp +117 -0
- data/sassc-2.4.0/ext/libsass/src/kwd_arg_macros.hpp +28 -0
- data/sassc-2.4.0/ext/libsass/src/lexer.cpp +122 -0
- data/sassc-2.4.0/ext/libsass/src/lexer.hpp +304 -0
- data/sassc-2.4.0/ext/libsass/src/listize.cpp +70 -0
- data/sassc-2.4.0/ext/libsass/src/listize.hpp +37 -0
- data/sassc-2.4.0/ext/libsass/src/mapping.hpp +19 -0
- data/sassc-2.4.0/ext/libsass/src/memory/allocator.cpp +48 -0
- data/sassc-2.4.0/ext/libsass/src/memory/allocator.hpp +138 -0
- data/sassc-2.4.0/ext/libsass/src/memory/config.hpp +20 -0
- data/sassc-2.4.0/ext/libsass/src/memory/memory_pool.hpp +186 -0
- data/sassc-2.4.0/ext/libsass/src/memory/shared_ptr.cpp +33 -0
- data/sassc-2.4.0/ext/libsass/src/memory/shared_ptr.hpp +332 -0
- data/sassc-2.4.0/ext/libsass/src/memory.hpp +12 -0
- data/sassc-2.4.0/ext/libsass/src/operation.hpp +223 -0
- data/sassc-2.4.0/ext/libsass/src/operators.cpp +267 -0
- data/sassc-2.4.0/ext/libsass/src/operators.hpp +30 -0
- data/sassc-2.4.0/ext/libsass/src/ordered_map.hpp +112 -0
- data/sassc-2.4.0/ext/libsass/src/output.cpp +320 -0
- data/sassc-2.4.0/ext/libsass/src/output.hpp +47 -0
- data/sassc-2.4.0/ext/libsass/src/parser.cpp +2965 -0
- data/sassc-2.4.0/ext/libsass/src/parser.hpp +394 -0
- data/sassc-2.4.0/ext/libsass/src/parser_selectors.cpp +189 -0
- data/sassc-2.4.0/ext/libsass/src/permutate.hpp +164 -0
- data/sassc-2.4.0/ext/libsass/src/plugins.cpp +188 -0
- data/sassc-2.4.0/ext/libsass/src/plugins.hpp +57 -0
- data/sassc-2.4.0/ext/libsass/src/position.cpp +165 -0
- data/sassc-2.4.0/ext/libsass/src/position.hpp +147 -0
- data/sassc-2.4.0/ext/libsass/src/prelexer.cpp +1780 -0
- data/sassc-2.4.0/ext/libsass/src/prelexer.hpp +484 -0
- data/sassc-2.4.0/ext/libsass/src/remove_placeholders.cpp +86 -0
- data/sassc-2.4.0/ext/libsass/src/remove_placeholders.hpp +37 -0
- data/sassc-2.4.0/ext/libsass/src/sass.cpp +156 -0
- data/sassc-2.4.0/ext/libsass/src/sass.hpp +147 -0
- data/sassc-2.4.0/ext/libsass/src/sass2scss.cpp +895 -0
- data/sassc-2.4.0/ext/libsass/src/sass_context.cpp +741 -0
- data/sassc-2.4.0/ext/libsass/src/sass_context.hpp +129 -0
- data/sassc-2.4.0/ext/libsass/src/sass_functions.cpp +210 -0
- data/sassc-2.4.0/ext/libsass/src/sass_functions.hpp +50 -0
- data/sassc-2.4.0/ext/libsass/src/sass_values.cpp +362 -0
- data/sassc-2.4.0/ext/libsass/src/sass_values.hpp +82 -0
- data/sassc-2.4.0/ext/libsass/src/settings.hpp +19 -0
- data/sassc-2.4.0/ext/libsass/src/source.cpp +69 -0
- data/sassc-2.4.0/ext/libsass/src/source.hpp +95 -0
- data/sassc-2.4.0/ext/libsass/src/source_data.hpp +32 -0
- data/sassc-2.4.0/ext/libsass/src/source_map.cpp +202 -0
- data/sassc-2.4.0/ext/libsass/src/source_map.hpp +65 -0
- data/sassc-2.4.0/ext/libsass/src/stylesheet.cpp +22 -0
- data/sassc-2.4.0/ext/libsass/src/stylesheet.hpp +57 -0
- data/sassc-2.4.0/ext/libsass/src/to_value.cpp +114 -0
- data/sassc-2.4.0/ext/libsass/src/to_value.hpp +46 -0
- data/sassc-2.4.0/ext/libsass/src/units.cpp +507 -0
- data/sassc-2.4.0/ext/libsass/src/units.hpp +110 -0
- data/sassc-2.4.0/ext/libsass/src/utf8/checked.h +336 -0
- data/sassc-2.4.0/ext/libsass/src/utf8/core.h +332 -0
- data/sassc-2.4.0/ext/libsass/src/utf8/unchecked.h +235 -0
- data/sassc-2.4.0/ext/libsass/src/utf8.h +34 -0
- data/sassc-2.4.0/ext/libsass/src/utf8_string.cpp +104 -0
- data/sassc-2.4.0/ext/libsass/src/utf8_string.hpp +38 -0
- data/sassc-2.4.0/ext/libsass/src/util.cpp +723 -0
- data/sassc-2.4.0/ext/libsass/src/util.hpp +105 -0
- data/sassc-2.4.0/ext/libsass/src/util_string.cpp +125 -0
- data/sassc-2.4.0/ext/libsass/src/util_string.hpp +73 -0
- data/sassc-2.4.0/ext/libsass/src/values.cpp +140 -0
- data/sassc-2.4.0/ext/libsass/src/values.hpp +12 -0
- data/sassc-2.4.0/lib/sassc/dependency.rb +17 -0
- data/sassc-2.4.0/lib/sassc/engine.rb +141 -0
- data/sassc-2.4.0/lib/sassc/error.rb +37 -0
- data/sassc-2.4.0/lib/sassc/functions_handler.rb +73 -0
- data/sassc-2.4.0/lib/sassc/import_handler.rb +50 -0
- data/sassc-2.4.0/lib/sassc/importer.rb +31 -0
- data/sassc-2.4.0/lib/sassc/native/native_context_api.rb +147 -0
- data/sassc-2.4.0/lib/sassc/native/native_functions_api.rb +159 -0
- data/sassc-2.4.0/lib/sassc/native/sass2scss_api.rb +10 -0
- data/sassc-2.4.0/lib/sassc/native/sass_input_style.rb +13 -0
- data/sassc-2.4.0/lib/sassc/native/sass_output_style.rb +12 -0
- data/sassc-2.4.0/lib/sassc/native/sass_value.rb +97 -0
- data/sassc-2.4.0/lib/sassc/native/string_list.rb +10 -0
- data/sassc-2.4.0/lib/sassc/native.rb +64 -0
- data/sassc-2.4.0/lib/sassc/sass_2_scss.rb +9 -0
- data/sassc-2.4.0/lib/sassc/script/functions.rb +8 -0
- data/sassc-2.4.0/lib/sassc/script/value/bool.rb +32 -0
- data/sassc-2.4.0/lib/sassc/script/value/color.rb +95 -0
- data/sassc-2.4.0/lib/sassc/script/value/list.rb +136 -0
- data/sassc-2.4.0/lib/sassc/script/value/map.rb +69 -0
- data/sassc-2.4.0/lib/sassc/script/value/number.rb +389 -0
- data/sassc-2.4.0/lib/sassc/script/value/string.rb +96 -0
- data/sassc-2.4.0/lib/sassc/script/value.rb +137 -0
- data/sassc-2.4.0/lib/sassc/script/value_conversion/base.rb +13 -0
- data/sassc-2.4.0/lib/sassc/script/value_conversion/bool.rb +13 -0
- data/sassc-2.4.0/lib/sassc/script/value_conversion/color.rb +18 -0
- data/sassc-2.4.0/lib/sassc/script/value_conversion/list.rb +25 -0
- data/sassc-2.4.0/lib/sassc/script/value_conversion/map.rb +21 -0
- data/sassc-2.4.0/lib/sassc/script/value_conversion/number.rb +13 -0
- data/sassc-2.4.0/lib/sassc/script/value_conversion/string.rb +17 -0
- data/sassc-2.4.0/lib/sassc/script/value_conversion.rb +69 -0
- data/sassc-2.4.0/lib/sassc/script.rb +17 -0
- data/sassc-2.4.0/lib/sassc/util/normalized_map.rb +117 -0
- data/sassc-2.4.0/lib/sassc/util.rb +231 -0
- data/sassc-2.4.0/lib/sassc/version.rb +5 -0
- data/sassc-2.4.0/lib/sassc.rb +205 -0
- data/sassc-2.4.0/sassc.gemspec +69 -0
- data/sassc-2.4.0/test/custom_importer_test.rb +127 -0
- data/sassc-2.4.0/test/engine_test.rb +314 -0
- data/sassc-2.4.0/test/error_test.rb +29 -0
- data/sassc-2.4.0/test/fixtures/paths.scss +10 -0
- data/sassc-2.4.0/test/functions_test.rb +340 -0
- data/sassc-2.4.0/test/native_test.rb +213 -0
- data/sassc-2.4.0/test/output_style_test.rb +107 -0
- data/sassc-2.4.0/test/sass_2_scss_test.rb +14 -0
- data/sassc-2.4.0/test/test_helper.rb +45 -0
- metadata +249 -0
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "test_helper"
|
|
4
|
+
|
|
5
|
+
module SassC
|
|
6
|
+
class EngineTest < MiniTest::Test
|
|
7
|
+
include TempFileTest
|
|
8
|
+
|
|
9
|
+
def render(data)
|
|
10
|
+
Engine.new(data).render
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def test_line_comments
|
|
14
|
+
template = <<-SCSS
|
|
15
|
+
.foo {
|
|
16
|
+
baz: bang; }
|
|
17
|
+
SCSS
|
|
18
|
+
expected_output = <<-CSS
|
|
19
|
+
/* line 1, stdin */
|
|
20
|
+
.foo {
|
|
21
|
+
baz: bang; }
|
|
22
|
+
CSS
|
|
23
|
+
output = Engine.new(template, line_comments: true).render
|
|
24
|
+
assert_equal expected_output, output
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def test_one_line_comments
|
|
28
|
+
assert_equal <<CSS, render(<<SCSS)
|
|
29
|
+
.foo {
|
|
30
|
+
baz: bang; }
|
|
31
|
+
CSS
|
|
32
|
+
.foo {// bar: baz;}
|
|
33
|
+
baz: bang; //}
|
|
34
|
+
}
|
|
35
|
+
SCSS
|
|
36
|
+
assert_equal <<CSS, render(<<SCSS)
|
|
37
|
+
.foo bar[val="//"] {
|
|
38
|
+
baz: bang; }
|
|
39
|
+
CSS
|
|
40
|
+
.foo bar[val="//"] {
|
|
41
|
+
baz: bang; //}
|
|
42
|
+
}
|
|
43
|
+
SCSS
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def test_variables
|
|
47
|
+
assert_equal <<CSS, render(<<SCSS)
|
|
48
|
+
blat {
|
|
49
|
+
a: foo; }
|
|
50
|
+
CSS
|
|
51
|
+
$var: foo;
|
|
52
|
+
|
|
53
|
+
blat {a: $var}
|
|
54
|
+
SCSS
|
|
55
|
+
|
|
56
|
+
assert_equal <<CSS, render(<<SCSS)
|
|
57
|
+
foo {
|
|
58
|
+
a: 2;
|
|
59
|
+
b: 6; }
|
|
60
|
+
CSS
|
|
61
|
+
foo {
|
|
62
|
+
$var: 2;
|
|
63
|
+
$another-var: 4;
|
|
64
|
+
a: $var;
|
|
65
|
+
b: $var + $another-var;}
|
|
66
|
+
SCSS
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def test_precision
|
|
70
|
+
template = <<-SCSS
|
|
71
|
+
$var: 1;
|
|
72
|
+
.foo {
|
|
73
|
+
baz: $var / 3; }
|
|
74
|
+
SCSS
|
|
75
|
+
expected_output = <<-CSS
|
|
76
|
+
.foo {
|
|
77
|
+
baz: 0.33333333; }
|
|
78
|
+
CSS
|
|
79
|
+
output = Engine.new(template, precision: 8).render
|
|
80
|
+
assert_equal expected_output, output
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def test_precision_not_specified
|
|
84
|
+
template = <<-SCSS
|
|
85
|
+
$var: 1;
|
|
86
|
+
.foo {
|
|
87
|
+
baz: $var / 3; }
|
|
88
|
+
SCSS
|
|
89
|
+
expected_output = <<-CSS
|
|
90
|
+
.foo {
|
|
91
|
+
baz: 0.3333333333; }
|
|
92
|
+
CSS
|
|
93
|
+
output = Engine.new(template).render
|
|
94
|
+
assert_equal expected_output, output
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def test_dependency_filenames_are_reported
|
|
98
|
+
base = temp_dir("").to_s
|
|
99
|
+
|
|
100
|
+
temp_file("not_included.scss", "$size: 30px;")
|
|
101
|
+
temp_file("import_parent.scss", "$size: 30px;")
|
|
102
|
+
temp_file("import.scss", "@import 'import_parent'; $size: 30px;")
|
|
103
|
+
temp_file("styles.scss", "@import 'import.scss'; .hi { width: $size; }")
|
|
104
|
+
|
|
105
|
+
engine = Engine.new(File.read("styles.scss"))
|
|
106
|
+
engine.render
|
|
107
|
+
deps = engine.dependencies
|
|
108
|
+
|
|
109
|
+
expected = ["/import.scss", "/import_parent.scss"]
|
|
110
|
+
assert_equal expected, deps.map { |dep| dep.options[:filename].gsub(base, "") }.sort
|
|
111
|
+
assert_equal expected, deps.map { |dep| dep.filename.gsub(base, "") }.sort
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def test_no_dependencies
|
|
115
|
+
engine = Engine.new("$size: 30px;")
|
|
116
|
+
engine.render
|
|
117
|
+
deps = engine.dependencies
|
|
118
|
+
assert_equal [], deps
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def test_not_rendered_error
|
|
122
|
+
engine = Engine.new("$size: 30px;")
|
|
123
|
+
assert_raises(NotRenderedError) { engine.dependencies }
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def test_source_map
|
|
127
|
+
temp_dir('admin')
|
|
128
|
+
|
|
129
|
+
temp_file('admin/text-color.scss', <<SCSS)
|
|
130
|
+
p {
|
|
131
|
+
color: red;
|
|
132
|
+
}
|
|
133
|
+
SCSS
|
|
134
|
+
temp_file('style.scss', <<SCSS)
|
|
135
|
+
@import 'admin/text-color';
|
|
136
|
+
|
|
137
|
+
p {
|
|
138
|
+
padding: 20px;
|
|
139
|
+
}
|
|
140
|
+
SCSS
|
|
141
|
+
engine = Engine.new(File.read('style.scss'), {
|
|
142
|
+
source_map_file: "style.scss.map",
|
|
143
|
+
source_map_contents: true
|
|
144
|
+
})
|
|
145
|
+
engine.render
|
|
146
|
+
|
|
147
|
+
assert_equal <<MAP.strip, engine.source_map
|
|
148
|
+
{
|
|
149
|
+
\t"version": 3,
|
|
150
|
+
\t"file": "stdin.css",
|
|
151
|
+
\t"sources": [
|
|
152
|
+
\t\t"stdin",
|
|
153
|
+
\t\t"admin/text-color.scss"
|
|
154
|
+
\t],
|
|
155
|
+
\t"sourcesContent": [
|
|
156
|
+
\t\t"@import 'admin/text-color';\\n\\np {\\n padding: 20px;\\n}\\n",
|
|
157
|
+
\t\t"p {\\n color: red;\\n}\\n"
|
|
158
|
+
\t],
|
|
159
|
+
\t"names": [],
|
|
160
|
+
\t"mappings": "ACAA,AAAA,CAAC,CAAC;EACA,KAAK,EAAE,GAAG,GACX;;ADAD,AAAA,CAAC,CAAC;EACA,OAAO,EAAE,IAAI,GACd"
|
|
161
|
+
}
|
|
162
|
+
MAP
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def test_no_source_map
|
|
166
|
+
engine = Engine.new("$size: 30px;")
|
|
167
|
+
engine.render
|
|
168
|
+
assert_raises(NotRenderedError) { engine.source_map }
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
def test_omit_source_map_url
|
|
172
|
+
temp_file('style.scss', <<SCSS)
|
|
173
|
+
p {
|
|
174
|
+
padding: 20px;
|
|
175
|
+
}
|
|
176
|
+
SCSS
|
|
177
|
+
engine = Engine.new(File.read('style.scss'), {
|
|
178
|
+
source_map_file: "style.scss.map",
|
|
179
|
+
source_map_contents: true,
|
|
180
|
+
omit_source_map_url: true
|
|
181
|
+
})
|
|
182
|
+
output = engine.render
|
|
183
|
+
|
|
184
|
+
refute_match /sourceMappingURL/, output
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
def test_load_paths
|
|
188
|
+
temp_dir("included_1")
|
|
189
|
+
temp_dir("included_2")
|
|
190
|
+
|
|
191
|
+
temp_file("included_1/import_parent.scss", "$s: 30px;")
|
|
192
|
+
temp_file("included_2/import.scss", "@import 'import_parent'; $size: $s;")
|
|
193
|
+
temp_file("styles.scss", "@import 'import.scss'; .hi { width: $size; }")
|
|
194
|
+
|
|
195
|
+
assert_equal ".hi {\n width: 30px; }\n", Engine.new(
|
|
196
|
+
File.read("styles.scss"),
|
|
197
|
+
load_paths: [ "included_1", "included_2" ]
|
|
198
|
+
).render
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
def test_global_load_paths
|
|
202
|
+
temp_dir("included_1")
|
|
203
|
+
temp_dir("included_2")
|
|
204
|
+
|
|
205
|
+
temp_file("included_1/import_parent.scss", "$s: 30px;")
|
|
206
|
+
temp_file("included_2/import.scss", "@import 'import_parent'; $size: $s;")
|
|
207
|
+
temp_file("styles.scss", "@import 'import.scss'; .hi { width: $size; }")
|
|
208
|
+
|
|
209
|
+
::SassC.load_paths << "included_1"
|
|
210
|
+
::SassC.load_paths << "included_2"
|
|
211
|
+
|
|
212
|
+
assert_equal ".hi {\n width: 30px; }\n", Engine.new(
|
|
213
|
+
File.read("styles.scss"),
|
|
214
|
+
).render
|
|
215
|
+
::SassC.load_paths.clear
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
def test_env_load_paths
|
|
219
|
+
expected_load_paths = [ "included_1", "included_2" ]
|
|
220
|
+
::SassC.instance_eval { @load_paths = nil }
|
|
221
|
+
ENV['SASS_PATH'] = expected_load_paths.join(File::PATH_SEPARATOR)
|
|
222
|
+
assert_equal expected_load_paths, ::SassC.load_paths
|
|
223
|
+
::SassC.load_paths.clear
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
def test_load_paths_not_configured
|
|
227
|
+
temp_file("included_1/import_parent.scss", "$s: 30px;")
|
|
228
|
+
temp_file("included_2/import.scss", "@import 'import_parent'; $size: $s;")
|
|
229
|
+
temp_file("styles.scss", "@import 'import.scss'; .hi { width: $size; }")
|
|
230
|
+
|
|
231
|
+
assert_raises(SyntaxError) do
|
|
232
|
+
Engine.new(File.read("styles.scss")).render
|
|
233
|
+
end
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
def test_sass_variation
|
|
237
|
+
sass = <<SASS
|
|
238
|
+
$size: 30px
|
|
239
|
+
.foo
|
|
240
|
+
width: $size
|
|
241
|
+
SASS
|
|
242
|
+
|
|
243
|
+
css = <<CSS
|
|
244
|
+
.foo {
|
|
245
|
+
width: 30px; }
|
|
246
|
+
CSS
|
|
247
|
+
|
|
248
|
+
assert_equal css, Engine.new(sass, syntax: :sass).render
|
|
249
|
+
assert_equal css, Engine.new(sass, syntax: "sass").render
|
|
250
|
+
assert_raises(SyntaxError) { Engine.new(sass).render }
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
def test_encoding_matches_input
|
|
254
|
+
input = String.new("$size: 30px;")
|
|
255
|
+
input.force_encoding("UTF-8")
|
|
256
|
+
output = Engine.new(input).render
|
|
257
|
+
assert_equal input.encoding, output.encoding
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
def test_inline_source_maps
|
|
261
|
+
template = <<-SCSS
|
|
262
|
+
.foo {
|
|
263
|
+
baz: bang; }
|
|
264
|
+
SCSS
|
|
265
|
+
expected_output = <<-CSS
|
|
266
|
+
/* line 1, stdin */
|
|
267
|
+
.foo {
|
|
268
|
+
baz: bang; }
|
|
269
|
+
CSS
|
|
270
|
+
|
|
271
|
+
output = Engine.new(template, {
|
|
272
|
+
source_map_file: ".",
|
|
273
|
+
source_map_embed: true,
|
|
274
|
+
source_map_contents: true
|
|
275
|
+
}).render
|
|
276
|
+
|
|
277
|
+
assert_match /sourceMappingURL/, output
|
|
278
|
+
assert_match /.foo/, output
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
def test_empty_template
|
|
282
|
+
output = Engine.new('').render
|
|
283
|
+
assert_equal '', output
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
def test_empty_template_returns_a_new_object
|
|
287
|
+
input = String.new
|
|
288
|
+
output = Engine.new(input).render
|
|
289
|
+
assert !input.equal?(output), 'empty template must return a new object'
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
def test_empty_template_encoding_matches_input
|
|
293
|
+
input = String.new.force_encoding("ISO-8859-1")
|
|
294
|
+
output = Engine.new(input).render
|
|
295
|
+
assert_equal input.encoding, output.encoding
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
def test_handling_of_frozen_strings
|
|
299
|
+
output = Engine.new("body { background-color: red; }".freeze).render
|
|
300
|
+
assert_equal output, "body {\n background-color: red; }\n"
|
|
301
|
+
end
|
|
302
|
+
|
|
303
|
+
def test_import_plain_css
|
|
304
|
+
temp_file("test.css", ".something{color: red}")
|
|
305
|
+
expected_output = <<-CSS
|
|
306
|
+
.something {
|
|
307
|
+
color: red; }
|
|
308
|
+
CSS
|
|
309
|
+
|
|
310
|
+
output = Engine.new("@import 'test'").render
|
|
311
|
+
assert_equal expected_output, output
|
|
312
|
+
end
|
|
313
|
+
end
|
|
314
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "test_helper"
|
|
4
|
+
|
|
5
|
+
module SassC
|
|
6
|
+
class ErrorTest < MiniTest::Test
|
|
7
|
+
def render(data, opts={})
|
|
8
|
+
Engine.new(data, opts).render
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def test_first_backtrace_is_sass
|
|
12
|
+
filename = "app/assets/stylesheets/application.scss"
|
|
13
|
+
|
|
14
|
+
begin
|
|
15
|
+
template = <<-SCSS
|
|
16
|
+
.foo {
|
|
17
|
+
baz: bang;
|
|
18
|
+
padding top: 10px;
|
|
19
|
+
}
|
|
20
|
+
SCSS
|
|
21
|
+
|
|
22
|
+
render(template, filename: filename)
|
|
23
|
+
rescue SassC::SyntaxError => err
|
|
24
|
+
expected = "#{filename}:3"
|
|
25
|
+
assert_equal expected, err.backtrace.first
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
div {
|
|
2
|
+
url: url(asset-path("foo.svg"));
|
|
3
|
+
url: url(image-path("foo.png"));
|
|
4
|
+
url: url(video-path("foo.mov"));
|
|
5
|
+
url: url(audio-path("foo.mp3"));
|
|
6
|
+
url: url(font-path("foo.woff"));
|
|
7
|
+
url: url(javascript-path('foo.js'));
|
|
8
|
+
url: url(javascript-path("foo.js"));
|
|
9
|
+
url: url(stylesheet-path("foo.css"));
|
|
10
|
+
}
|
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "test_helper"
|
|
4
|
+
require "stringio"
|
|
5
|
+
|
|
6
|
+
module SassC
|
|
7
|
+
class FunctionsTest < MiniTest::Test
|
|
8
|
+
include FixtureHelper
|
|
9
|
+
|
|
10
|
+
def setup
|
|
11
|
+
@real_stderr, $stderr = $stderr, StringIO.new
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def teardown
|
|
15
|
+
$stderr = @real_stderr
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def test_functions_may_return_sass_string_type
|
|
19
|
+
assert_sass <<-SCSS, <<-CSS
|
|
20
|
+
div { url: url(sass_return_path("foo.svg")); }
|
|
21
|
+
SCSS
|
|
22
|
+
div { url: url("foo.svg"); }
|
|
23
|
+
CSS
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def test_functions_work_with_varying_quotes_and_string_types
|
|
27
|
+
assert_sass <<-SCSS, <<-CSS
|
|
28
|
+
div {
|
|
29
|
+
url: url(asset-path("foo.svg"));
|
|
30
|
+
url: url(image-path("foo.png"));
|
|
31
|
+
url: url(video-path("foo.mov"));
|
|
32
|
+
url: url(audio-path("foo.mp3"));
|
|
33
|
+
url: url(font-path("foo.woff"));
|
|
34
|
+
url: url(javascript-path('foo.js'));
|
|
35
|
+
url: url(javascript-path("foo.js"));
|
|
36
|
+
url: url(stylesheet-path("foo.css"));
|
|
37
|
+
}
|
|
38
|
+
SCSS
|
|
39
|
+
div {
|
|
40
|
+
url: url(asset-path("foo.svg"));
|
|
41
|
+
url: url(image-path("foo.png"));
|
|
42
|
+
url: url(video-path("foo.mov"));
|
|
43
|
+
url: url(audio-path("foo.mp3"));
|
|
44
|
+
url: url(font-path("foo.woff"));
|
|
45
|
+
url: url("/js/foo.js");
|
|
46
|
+
url: url("/js/foo.js");
|
|
47
|
+
url: url(/css/foo.css);
|
|
48
|
+
}
|
|
49
|
+
CSS
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def test_function_with_no_return_value
|
|
53
|
+
assert_sass <<-SCSS, <<-CSS
|
|
54
|
+
div {url: url(no-return-path('foo.svg'));}
|
|
55
|
+
SCSS
|
|
56
|
+
div { url: url(); }
|
|
57
|
+
CSS
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def test_function_that_returns_a_color
|
|
61
|
+
assert_sass <<-SCSS, <<-CSS
|
|
62
|
+
div { background: returns-a-color(); }
|
|
63
|
+
SCSS
|
|
64
|
+
div { background: black; }
|
|
65
|
+
CSS
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def test_function_that_returns_a_number
|
|
69
|
+
assert_sass <<-SCSS, <<-CSS
|
|
70
|
+
div { width: returns-a-number(); }
|
|
71
|
+
SCSS
|
|
72
|
+
div { width: -312rem; }
|
|
73
|
+
CSS
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def test_function_that_takes_a_number
|
|
77
|
+
assert_sass <<-SCSS, <<-CSS
|
|
78
|
+
div { display: inspect-number(42.1px); }
|
|
79
|
+
SCSS
|
|
80
|
+
div { display: 42.1px; }
|
|
81
|
+
CSS
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def test_function_that_returns_a_bool
|
|
85
|
+
assert_sass <<-SCSS, <<-CSS
|
|
86
|
+
div { width: returns-a-bool(); }
|
|
87
|
+
SCSS
|
|
88
|
+
div { width: true; }
|
|
89
|
+
CSS
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def test_function_that_takes_a_bool
|
|
93
|
+
assert_sass <<-SCSS, <<-CSS
|
|
94
|
+
div { display: inspect-bool(true)}
|
|
95
|
+
SCSS
|
|
96
|
+
div { display: true; }
|
|
97
|
+
CSS
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def test_function_with_optional_arguments
|
|
101
|
+
assert_sass <<-SCSS, <<-EXPECTED_CSS
|
|
102
|
+
div {
|
|
103
|
+
url: optional_arguments('first');
|
|
104
|
+
url: optional_arguments('second', 'qux');
|
|
105
|
+
}
|
|
106
|
+
SCSS
|
|
107
|
+
div {
|
|
108
|
+
url: "first/bar";
|
|
109
|
+
url: "second/qux";
|
|
110
|
+
}
|
|
111
|
+
EXPECTED_CSS
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def test_functions_may_accept_sass_color_type
|
|
115
|
+
assert_sass <<-SCSS, <<-EXPECTED_CSS
|
|
116
|
+
div { color: nice_color_argument(red); }
|
|
117
|
+
SCSS
|
|
118
|
+
div { color: rgb(255, 0, 0); }
|
|
119
|
+
EXPECTED_CSS
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def test_function_with_unsupported_tag
|
|
123
|
+
skip('What are other unsupported tags?')
|
|
124
|
+
engine = Engine.new("div {url: function_with_unsupported_tag(());}")
|
|
125
|
+
|
|
126
|
+
exception = assert_raises(SassC::SyntaxError) do
|
|
127
|
+
engine.render
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
assert_match /Sass argument of type sass_list unsupported/, exception.message
|
|
131
|
+
assert_equal "[SassC::FunctionsHandler] Sass argument of type sass_list unsupported", stderr_output
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def test_function_with_error
|
|
135
|
+
engine = Engine.new("div {url: function_that_raises_errors();}")
|
|
136
|
+
|
|
137
|
+
exception = assert_raises(SassC::SyntaxError) do
|
|
138
|
+
engine.render
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
assert_match /Error: error in C function function_that_raises_errors/, exception.message
|
|
142
|
+
assert_match /Intentional wrong thing happened somewhere inside the custom function/, exception.message
|
|
143
|
+
assert_match /\[SassC::FunctionsHandler\] Intentional wrong thing happened somewhere inside the custom function/, stderr_output
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def test_function_that_returns_a_sass_value
|
|
147
|
+
assert_sass <<-SCSS, <<-CSS
|
|
148
|
+
div { background: returns-sass-value(); }
|
|
149
|
+
SCSS
|
|
150
|
+
div { background: black; }
|
|
151
|
+
CSS
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def test_function_that_returns_a_sass_map
|
|
155
|
+
assert_sass <<-SCSS, <<-CSS
|
|
156
|
+
$my-map: returns-sass-map();
|
|
157
|
+
div { background: map-get( $my-map, color ); }
|
|
158
|
+
SCSS
|
|
159
|
+
div { background: black; }
|
|
160
|
+
CSS
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def test_function_that_takes_a_sass_map
|
|
164
|
+
assert_sass <<-SCSS, <<-CSS
|
|
165
|
+
div { background-color: map-get( inspect-map(( color: black, number: 1.23px, string: "abc", map: ( x: 'y' ))), color ); }
|
|
166
|
+
SCSS
|
|
167
|
+
div { background-color: black; }
|
|
168
|
+
CSS
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
def test_function_that_returns_a_sass_list
|
|
172
|
+
assert_sass <<-SCSS, <<-CSS
|
|
173
|
+
$my-list: returns-sass-list();
|
|
174
|
+
div { width: nth( $my-list, 2 ); }
|
|
175
|
+
SCSS
|
|
176
|
+
div { width: 20; }
|
|
177
|
+
CSS
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def test_function_that_takes_a_sass_list
|
|
181
|
+
assert_sass <<-SCSS, <<-CSS
|
|
182
|
+
div { width: nth(inspect-list((10 20 30)), 2); }
|
|
183
|
+
SCSS
|
|
184
|
+
div { width: 20; }
|
|
185
|
+
CSS
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def test_concurrency
|
|
189
|
+
10.times do
|
|
190
|
+
threads = []
|
|
191
|
+
10.times do |i|
|
|
192
|
+
threads << Thread.new(i) do |id|
|
|
193
|
+
out = Engine.new("div { url: inspect_options(); }", {test_key1: 'test_value', test_key2: id}).render
|
|
194
|
+
assert_match /test_key1/, out
|
|
195
|
+
assert_match /test_key2/, out
|
|
196
|
+
assert_match /test_value/, out
|
|
197
|
+
assert_match /#{id}/, out
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
threads.each(&:join)
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
def test_pass_custom_functions_as_a_parameter
|
|
205
|
+
out = Engine.new("div { url: test-function(); }", {functions: ExternalFunctions}).render
|
|
206
|
+
assert_match /custom_function/, out
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
def test_pass_incompatible_type_to_custom_functions
|
|
210
|
+
assert_raises(TypeError) do
|
|
211
|
+
Engine.new("div { url: test-function(); }", {functions: Class.new}).render
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
private
|
|
216
|
+
|
|
217
|
+
def assert_sass(sass, expected_css)
|
|
218
|
+
engine = Engine.new(sass)
|
|
219
|
+
assert_equal expected_css.strip.gsub!(/\s+/, " "), # poor man's String#squish
|
|
220
|
+
engine.render.strip.gsub!(/\s+/, " ")
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
def stderr_output
|
|
224
|
+
$stderr.string.gsub("\u0000\n", '').chomp
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
module Script::Functions
|
|
228
|
+
|
|
229
|
+
def javascript_path(path)
|
|
230
|
+
SassC::Script::Value::String.new("/js/#{path.value}", :string)
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
def stylesheet_path(path)
|
|
234
|
+
SassC::Script::Value::String.new("/css/#{path.value}", :identifier)
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
def no_return_path(path)
|
|
238
|
+
nil
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
def sass_return_path(path)
|
|
242
|
+
SassC::Script::Value::String.new("#{path.value}", :string)
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
def optional_arguments(path, optional = nil)
|
|
246
|
+
optional ||= SassC::Script::Value::String.new("bar")
|
|
247
|
+
SassC::Script::Value::String.new("#{path.value}/#{optional.value}", :string)
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
def function_that_raises_errors
|
|
251
|
+
raise StandardError, "Intentional wrong thing happened somewhere inside the custom function"
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
def function_with_unsupported_tag(value)
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
def nice_color_argument(color)
|
|
258
|
+
return SassC::Script::Value::String.new(color.to_s, :identifier)
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
def returns_a_color
|
|
262
|
+
return SassC::Script::Value::Color.new(red: 0, green: 0, blue: 0)
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
def returns_a_number
|
|
266
|
+
return SassC::Script::Value::Number.new(-312,'rem')
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
def returns_a_bool
|
|
270
|
+
return SassC::Script::Value::Bool.new(true)
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
def inspect_bool ( argument )
|
|
274
|
+
raise StandardError.new "passed value is not a Sass::Script::Value::Bool" unless argument.is_a? SassC::Script::Value::Bool
|
|
275
|
+
return argument
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
def inspect_number ( argument )
|
|
279
|
+
raise StandardError.new "passed value is not a Sass::Script::Value::Number" unless argument.is_a? SassC::Script::Value::Number
|
|
280
|
+
return argument
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
def inspect_map ( argument )
|
|
284
|
+
argument.to_h.each_pair do |key, value|
|
|
285
|
+
raise StandardError.new "key #{key.inspect} is not a string" unless key.is_a? SassC::Script::Value::String
|
|
286
|
+
|
|
287
|
+
valueClass = case key.value
|
|
288
|
+
when 'string'
|
|
289
|
+
SassC::Script::Value::String
|
|
290
|
+
when 'number'
|
|
291
|
+
SassC::Script::Value::Number
|
|
292
|
+
when 'color'
|
|
293
|
+
SassC::Script::Value::Color
|
|
294
|
+
when 'map'
|
|
295
|
+
SassC::Script::Value::Map
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
raise StandardError.new "unknown key #{key.inspect}" unless valueClass
|
|
299
|
+
raise StandardError.new "value for #{key.inspect} is not a #{valueClass}" unless value.is_a? valueClass
|
|
300
|
+
end
|
|
301
|
+
return argument
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
def inspect_list(argument)
|
|
305
|
+
raise StandardError.new "passed value is not a Sass::Script::Value::List" unless argument.is_a? SassC::Script::Value::List
|
|
306
|
+
return argument
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
def inspect_options
|
|
310
|
+
SassC::Script::Value::String.new(self.options.inspect, :string)
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
def returns_sass_value
|
|
314
|
+
return SassC::Script::Value::Color.new(red: 0, green: 0, blue: 0)
|
|
315
|
+
end
|
|
316
|
+
|
|
317
|
+
def returns_sass_map
|
|
318
|
+
key = SassC::Script::Value::String.new("color", "string")
|
|
319
|
+
value = SassC::Script::Value::Color.new(red: 0, green: 0, blue: 0)
|
|
320
|
+
values = {}
|
|
321
|
+
values[key] = value
|
|
322
|
+
map = SassC::Script::Value::Map.new values
|
|
323
|
+
return map
|
|
324
|
+
end
|
|
325
|
+
|
|
326
|
+
def returns_sass_list
|
|
327
|
+
numbers = [10, 20, 30].map { |n| SassC::Script::Value::Number.new(n, '') }
|
|
328
|
+
SassC::Script::Value::List.new(numbers, separator: :space)
|
|
329
|
+
end
|
|
330
|
+
|
|
331
|
+
end
|
|
332
|
+
|
|
333
|
+
module ExternalFunctions
|
|
334
|
+
def test_function
|
|
335
|
+
SassC::Script::Value::String.new("custom_function", :string)
|
|
336
|
+
end
|
|
337
|
+
end
|
|
338
|
+
|
|
339
|
+
end
|
|
340
|
+
end
|