sassc 2.0.1 → 2.1.0.pre1

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.
Files changed (200) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.gitmodules +1 -1
  4. data/.travis.yml +7 -3
  5. data/CHANGELOG.md +3 -0
  6. data/CODE_OF_CONDUCT.md +1 -1
  7. data/README.md +1 -1
  8. data/Rakefile +23 -8
  9. data/ext/extconf.rb +39 -0
  10. data/ext/libsass/.gitignore +1 -0
  11. data/ext/libsass/GNUmakefile.am +23 -39
  12. data/ext/libsass/Makefile +56 -91
  13. data/ext/libsass/Makefile.conf +16 -2
  14. data/ext/libsass/configure.ac +8 -12
  15. data/ext/libsass/include/sass/base.h +1 -0
  16. data/ext/libsass/include/sass/context.h +1 -1
  17. data/ext/libsass/src/GNUmakefile.am +1 -5
  18. data/ext/libsass/src/ast.cpp +747 -2010
  19. data/ext/libsass/src/ast.hpp +239 -2383
  20. data/ext/libsass/src/{to_c.cpp → ast2c.cpp} +22 -16
  21. data/ext/libsass/src/ast2c.hpp +39 -0
  22. data/ext/libsass/src/ast_def_macros.hpp +62 -10
  23. data/ext/libsass/src/ast_fwd_decl.cpp +1 -0
  24. data/ext/libsass/src/ast_fwd_decl.hpp +43 -165
  25. data/ext/libsass/src/ast_sel_cmp.cpp +909 -0
  26. data/ext/libsass/src/ast_sel_unify.cpp +280 -0
  27. data/ext/libsass/src/ast_selectors.cpp +1475 -0
  28. data/ext/libsass/src/ast_selectors.hpp +568 -0
  29. data/ext/libsass/src/ast_supports.cpp +130 -0
  30. data/ext/libsass/src/ast_supports.hpp +121 -0
  31. data/ext/libsass/src/ast_values.cpp +967 -0
  32. data/ext/libsass/src/ast_values.hpp +489 -0
  33. data/ext/libsass/src/backtrace.cpp +4 -0
  34. data/ext/libsass/src/base64vlq.cpp +3 -0
  35. data/ext/libsass/src/bind.cpp +18 -17
  36. data/ext/libsass/src/bind.hpp +3 -1
  37. data/ext/libsass/src/c2ast.cpp +64 -0
  38. data/ext/libsass/src/c2ast.hpp +14 -0
  39. data/ext/libsass/src/cencode.c +2 -2
  40. data/ext/libsass/src/check_nesting.cpp +52 -56
  41. data/ext/libsass/src/check_nesting.hpp +35 -34
  42. data/ext/libsass/src/color_maps.cpp +156 -153
  43. data/ext/libsass/src/color_maps.hpp +152 -152
  44. data/ext/libsass/src/constants.cpp +15 -0
  45. data/ext/libsass/src/constants.hpp +13 -0
  46. data/ext/libsass/src/context.cpp +24 -14
  47. data/ext/libsass/src/context.hpp +6 -6
  48. data/ext/libsass/src/cssize.cpp +69 -71
  49. data/ext/libsass/src/cssize.hpp +50 -50
  50. data/ext/libsass/src/debugger.hpp +117 -110
  51. data/ext/libsass/src/emitter.cpp +13 -12
  52. data/ext/libsass/src/emitter.hpp +13 -9
  53. data/ext/libsass/src/environment.cpp +15 -1
  54. data/ext/libsass/src/environment.hpp +6 -0
  55. data/ext/libsass/src/error_handling.cpp +36 -59
  56. data/ext/libsass/src/error_handling.hpp +29 -16
  57. data/ext/libsass/src/eval.cpp +302 -323
  58. data/ext/libsass/src/eval.hpp +64 -55
  59. data/ext/libsass/src/expand.cpp +94 -88
  60. data/ext/libsass/src/expand.hpp +33 -37
  61. data/ext/libsass/src/extend.cpp +38 -36
  62. data/ext/libsass/src/extend.hpp +15 -15
  63. data/ext/libsass/src/file.cpp +34 -2
  64. data/ext/libsass/src/fn_colors.cpp +594 -0
  65. data/ext/libsass/src/fn_colors.hpp +85 -0
  66. data/ext/libsass/src/fn_lists.cpp +284 -0
  67. data/ext/libsass/src/fn_lists.hpp +34 -0
  68. data/ext/libsass/src/fn_maps.cpp +94 -0
  69. data/ext/libsass/src/fn_maps.hpp +30 -0
  70. data/ext/libsass/src/fn_miscs.cpp +256 -0
  71. data/ext/libsass/src/fn_miscs.hpp +40 -0
  72. data/ext/libsass/src/fn_numbers.cpp +220 -0
  73. data/ext/libsass/src/fn_numbers.hpp +45 -0
  74. data/ext/libsass/src/fn_selectors.cpp +235 -0
  75. data/ext/libsass/src/fn_selectors.hpp +35 -0
  76. data/ext/libsass/src/fn_strings.cpp +254 -0
  77. data/ext/libsass/src/fn_strings.hpp +34 -0
  78. data/ext/libsass/src/fn_utils.cpp +156 -0
  79. data/ext/libsass/src/fn_utils.hpp +56 -0
  80. data/ext/libsass/src/inspect.cpp +101 -152
  81. data/ext/libsass/src/inspect.hpp +69 -73
  82. data/ext/libsass/src/json.cpp +2 -2
  83. data/ext/libsass/src/lexer.cpp +6 -3
  84. data/ext/libsass/src/listize.cpp +9 -11
  85. data/ext/libsass/src/listize.hpp +11 -7
  86. data/ext/libsass/src/memory/SharedPtr.cpp +2 -83
  87. data/ext/libsass/src/memory/SharedPtr.hpp +127 -143
  88. data/ext/libsass/src/node.cpp +13 -10
  89. data/ext/libsass/src/node.hpp +3 -3
  90. data/ext/libsass/src/operation.hpp +184 -144
  91. data/ext/libsass/src/operators.cpp +43 -17
  92. data/ext/libsass/src/operators.hpp +5 -5
  93. data/ext/libsass/src/output.cpp +21 -18
  94. data/ext/libsass/src/output.hpp +14 -21
  95. data/ext/libsass/src/parser.cpp +215 -183
  96. data/ext/libsass/src/parser.hpp +28 -24
  97. data/ext/libsass/src/plugins.cpp +5 -1
  98. data/ext/libsass/src/position.cpp +3 -0
  99. data/ext/libsass/src/prelexer.cpp +9 -3
  100. data/ext/libsass/src/prelexer.hpp +9 -9
  101. data/ext/libsass/src/remove_placeholders.cpp +14 -11
  102. data/ext/libsass/src/remove_placeholders.hpp +8 -9
  103. data/ext/libsass/src/sass.cpp +9 -3
  104. data/ext/libsass/src/sass.hpp +12 -9
  105. data/ext/libsass/src/sass2scss.cpp +45 -14
  106. data/ext/libsass/src/sass_context.cpp +18 -15
  107. data/ext/libsass/src/sass_functions.cpp +6 -3
  108. data/ext/libsass/src/sass_functions.hpp +1 -1
  109. data/ext/libsass/src/sass_util.cpp +3 -0
  110. data/ext/libsass/src/sass_values.cpp +21 -13
  111. data/ext/libsass/src/source_map.cpp +5 -2
  112. data/ext/libsass/src/source_map.hpp +2 -2
  113. data/ext/libsass/src/subset_map.cpp +4 -1
  114. data/ext/libsass/src/to_value.cpp +23 -21
  115. data/ext/libsass/src/to_value.hpp +18 -22
  116. data/ext/libsass/src/units.cpp +4 -0
  117. data/ext/libsass/src/units.hpp +1 -0
  118. data/ext/libsass/src/utf8/checked.h +12 -10
  119. data/ext/libsass/src/utf8/core.h +3 -0
  120. data/ext/libsass/src/utf8_string.cpp +3 -0
  121. data/ext/libsass/src/util.cpp +67 -75
  122. data/ext/libsass/src/util.hpp +64 -19
  123. data/ext/libsass/src/util_string.cpp +75 -0
  124. data/ext/libsass/src/util_string.hpp +19 -0
  125. data/ext/libsass/src/values.cpp +22 -13
  126. data/ext/libsass/src/values.hpp +2 -2
  127. data/ext/libsass/win/libsass.targets +30 -4
  128. data/ext/libsass/win/libsass.vcxproj.filters +82 -4
  129. data/lib/sassc.rb +24 -0
  130. data/lib/sassc/engine.rb +2 -2
  131. data/lib/sassc/native.rb +8 -1
  132. data/lib/sassc/version.rb +1 -1
  133. data/sassc.gemspec +19 -11
  134. data/test/engine_test.rb +26 -1
  135. data/test/native_test.rb +1 -1
  136. metadata +66 -72
  137. data/ext/Rakefile +0 -3
  138. data/ext/libsass/.github/CONTRIBUTING.md +0 -65
  139. data/ext/libsass/.github/ISSUE_TEMPLATE.md +0 -54
  140. data/ext/libsass/.travis.yml +0 -64
  141. data/ext/libsass/Readme.md +0 -104
  142. data/ext/libsass/SECURITY.md +0 -10
  143. data/ext/libsass/appveyor.yml +0 -91
  144. data/ext/libsass/docs/README.md +0 -20
  145. data/ext/libsass/docs/api-context-example.md +0 -45
  146. data/ext/libsass/docs/api-context-internal.md +0 -163
  147. data/ext/libsass/docs/api-context.md +0 -295
  148. data/ext/libsass/docs/api-doc.md +0 -215
  149. data/ext/libsass/docs/api-function-example.md +0 -67
  150. data/ext/libsass/docs/api-function-internal.md +0 -8
  151. data/ext/libsass/docs/api-function.md +0 -74
  152. data/ext/libsass/docs/api-importer-example.md +0 -112
  153. data/ext/libsass/docs/api-importer-internal.md +0 -20
  154. data/ext/libsass/docs/api-importer.md +0 -86
  155. data/ext/libsass/docs/api-value-example.md +0 -55
  156. data/ext/libsass/docs/api-value-internal.md +0 -76
  157. data/ext/libsass/docs/api-value.md +0 -154
  158. data/ext/libsass/docs/build-on-darwin.md +0 -27
  159. data/ext/libsass/docs/build-on-gentoo.md +0 -55
  160. data/ext/libsass/docs/build-on-windows.md +0 -139
  161. data/ext/libsass/docs/build-shared-library.md +0 -35
  162. data/ext/libsass/docs/build-with-autotools.md +0 -78
  163. data/ext/libsass/docs/build-with-makefiles.md +0 -68
  164. data/ext/libsass/docs/build-with-mingw.md +0 -107
  165. data/ext/libsass/docs/build-with-visual-studio.md +0 -90
  166. data/ext/libsass/docs/build.md +0 -97
  167. data/ext/libsass/docs/compatibility-plan.md +0 -48
  168. data/ext/libsass/docs/contributing.md +0 -17
  169. data/ext/libsass/docs/custom-functions-internal.md +0 -122
  170. data/ext/libsass/docs/dev-ast-memory.md +0 -223
  171. data/ext/libsass/docs/implementations.md +0 -56
  172. data/ext/libsass/docs/plugins.md +0 -47
  173. data/ext/libsass/docs/setup-environment.md +0 -68
  174. data/ext/libsass/docs/source-map-internals.md +0 -51
  175. data/ext/libsass/docs/trace.md +0 -26
  176. data/ext/libsass/docs/triage.md +0 -17
  177. data/ext/libsass/docs/unicode.md +0 -39
  178. data/ext/libsass/extconf.rb +0 -6
  179. data/ext/libsass/script/bootstrap +0 -13
  180. data/ext/libsass/script/branding +0 -10
  181. data/ext/libsass/script/ci-build-libsass +0 -134
  182. data/ext/libsass/script/ci-build-plugin +0 -62
  183. data/ext/libsass/script/ci-install-compiler +0 -6
  184. data/ext/libsass/script/ci-install-deps +0 -20
  185. data/ext/libsass/script/ci-report-coverage +0 -42
  186. data/ext/libsass/script/spec +0 -5
  187. data/ext/libsass/script/tap-driver +0 -652
  188. data/ext/libsass/script/tap-runner +0 -1
  189. data/ext/libsass/script/test-leaks.pl +0 -103
  190. data/ext/libsass/src/functions.cpp +0 -2234
  191. data/ext/libsass/src/functions.hpp +0 -198
  192. data/ext/libsass/src/to_c.hpp +0 -39
  193. data/ext/libsass/test/test_node.cpp +0 -94
  194. data/ext/libsass/test/test_paths.cpp +0 -28
  195. data/ext/libsass/test/test_selector_difference.cpp +0 -25
  196. data/ext/libsass/test/test_specificity.cpp +0 -25
  197. data/ext/libsass/test/test_subset_map.cpp +0 -472
  198. data/ext/libsass/test/test_superselector.cpp +0 -69
  199. data/ext/libsass/test/test_unification.cpp +0 -31
  200. data/lib/tasks/libsass.rb +0 -33
@@ -1,198 +0,0 @@
1
- #ifndef SASS_FUNCTIONS_H
2
- #define SASS_FUNCTIONS_H
3
-
4
- #include "listize.hpp"
5
- #include "position.hpp"
6
- #include "environment.hpp"
7
- #include "ast_fwd_decl.hpp"
8
- #include "sass/functions.h"
9
-
10
- #define BUILT_IN(name) Expression_Ptr \
11
- name(Env& env, Env& d_env, Context& ctx, Signature sig, ParserState pstate, Backtraces traces, std::vector<Selector_List_Obj> selector_stack)
12
-
13
- namespace Sass {
14
- struct Backtrace;
15
- typedef const char* Signature;
16
- typedef Expression_Ptr (*Native_Function)(Env&, Env&, Context&, Signature, ParserState, Backtraces, std::vector<Selector_List_Obj>);
17
-
18
- Definition_Ptr make_native_function(Signature, Native_Function, Context& ctx);
19
- Definition_Ptr make_c_function(Sass_Function_Entry c_func, Context& ctx);
20
-
21
- std::string function_name(Signature);
22
-
23
- namespace Functions {
24
-
25
- extern Signature rgb_sig;
26
- extern Signature rgba_4_sig;
27
- extern Signature rgba_2_sig;
28
- extern Signature red_sig;
29
- extern Signature green_sig;
30
- extern Signature blue_sig;
31
- extern Signature mix_sig;
32
- extern Signature hsl_sig;
33
- extern Signature hsla_sig;
34
- extern Signature hue_sig;
35
- extern Signature saturation_sig;
36
- extern Signature lightness_sig;
37
- extern Signature adjust_hue_sig;
38
- extern Signature lighten_sig;
39
- extern Signature darken_sig;
40
- extern Signature saturate_sig;
41
- extern Signature desaturate_sig;
42
- extern Signature grayscale_sig;
43
- extern Signature complement_sig;
44
- extern Signature invert_sig;
45
- extern Signature alpha_sig;
46
- extern Signature opacity_sig;
47
- extern Signature opacify_sig;
48
- extern Signature fade_in_sig;
49
- extern Signature transparentize_sig;
50
- extern Signature fade_out_sig;
51
- extern Signature adjust_color_sig;
52
- extern Signature scale_color_sig;
53
- extern Signature change_color_sig;
54
- extern Signature ie_hex_str_sig;
55
- extern Signature unquote_sig;
56
- extern Signature quote_sig;
57
- extern Signature str_length_sig;
58
- extern Signature str_insert_sig;
59
- extern Signature str_index_sig;
60
- extern Signature str_slice_sig;
61
- extern Signature to_upper_case_sig;
62
- extern Signature to_lower_case_sig;
63
- extern Signature percentage_sig;
64
- extern Signature round_sig;
65
- extern Signature ceil_sig;
66
- extern Signature floor_sig;
67
- extern Signature abs_sig;
68
- extern Signature min_sig;
69
- extern Signature max_sig;
70
- extern Signature inspect_sig;
71
- extern Signature random_sig;
72
- extern Signature length_sig;
73
- extern Signature nth_sig;
74
- extern Signature index_sig;
75
- extern Signature join_sig;
76
- extern Signature append_sig;
77
- extern Signature zip_sig;
78
- extern Signature list_separator_sig;
79
- extern Signature type_of_sig;
80
- extern Signature unit_sig;
81
- extern Signature unitless_sig;
82
- extern Signature comparable_sig;
83
- extern Signature variable_exists_sig;
84
- extern Signature global_variable_exists_sig;
85
- extern Signature function_exists_sig;
86
- extern Signature mixin_exists_sig;
87
- extern Signature feature_exists_sig;
88
- extern Signature call_sig;
89
- extern Signature not_sig;
90
- extern Signature if_sig;
91
- extern Signature map_get_sig;
92
- extern Signature map_merge_sig;
93
- extern Signature map_remove_sig;
94
- extern Signature map_keys_sig;
95
- extern Signature map_values_sig;
96
- extern Signature map_has_key_sig;
97
- extern Signature keywords_sig;
98
- extern Signature set_nth_sig;
99
- extern Signature unique_id_sig;
100
- extern Signature selector_nest_sig;
101
- extern Signature selector_append_sig;
102
- extern Signature selector_extend_sig;
103
- extern Signature selector_replace_sig;
104
- extern Signature selector_unify_sig;
105
- extern Signature is_superselector_sig;
106
- extern Signature simple_selectors_sig;
107
- extern Signature selector_parse_sig;
108
- extern Signature is_bracketed_sig;
109
- extern Signature content_exists_sig;
110
- extern Signature get_function_sig;
111
-
112
- BUILT_IN(rgb);
113
- BUILT_IN(rgba_4);
114
- BUILT_IN(rgba_2);
115
- BUILT_IN(red);
116
- BUILT_IN(green);
117
- BUILT_IN(blue);
118
- BUILT_IN(mix);
119
- BUILT_IN(hsl);
120
- BUILT_IN(hsla);
121
- BUILT_IN(hue);
122
- BUILT_IN(saturation);
123
- BUILT_IN(lightness);
124
- BUILT_IN(adjust_hue);
125
- BUILT_IN(lighten);
126
- BUILT_IN(darken);
127
- BUILT_IN(saturate);
128
- BUILT_IN(desaturate);
129
- BUILT_IN(grayscale);
130
- BUILT_IN(complement);
131
- BUILT_IN(invert);
132
- BUILT_IN(alpha);
133
- BUILT_IN(opacify);
134
- BUILT_IN(transparentize);
135
- BUILT_IN(adjust_color);
136
- BUILT_IN(scale_color);
137
- BUILT_IN(change_color);
138
- BUILT_IN(ie_hex_str);
139
- BUILT_IN(sass_unquote);
140
- BUILT_IN(sass_quote);
141
- BUILT_IN(str_length);
142
- BUILT_IN(str_insert);
143
- BUILT_IN(str_index);
144
- BUILT_IN(str_slice);
145
- BUILT_IN(to_upper_case);
146
- BUILT_IN(to_lower_case);
147
- BUILT_IN(percentage);
148
- BUILT_IN(round);
149
- BUILT_IN(ceil);
150
- BUILT_IN(floor);
151
- BUILT_IN(abs);
152
- BUILT_IN(min);
153
- BUILT_IN(max);
154
- BUILT_IN(inspect);
155
- BUILT_IN(random);
156
- BUILT_IN(length);
157
- BUILT_IN(nth);
158
- BUILT_IN(index);
159
- BUILT_IN(join);
160
- BUILT_IN(append);
161
- BUILT_IN(zip);
162
- BUILT_IN(list_separator);
163
- BUILT_IN(type_of);
164
- BUILT_IN(unit);
165
- BUILT_IN(unitless);
166
- BUILT_IN(comparable);
167
- BUILT_IN(variable_exists);
168
- BUILT_IN(global_variable_exists);
169
- BUILT_IN(function_exists);
170
- BUILT_IN(mixin_exists);
171
- BUILT_IN(feature_exists);
172
- BUILT_IN(call);
173
- BUILT_IN(sass_not);
174
- BUILT_IN(sass_if);
175
- BUILT_IN(map_get);
176
- BUILT_IN(map_merge);
177
- BUILT_IN(map_remove);
178
- BUILT_IN(map_keys);
179
- BUILT_IN(map_values);
180
- BUILT_IN(map_has_key);
181
- BUILT_IN(keywords);
182
- BUILT_IN(set_nth);
183
- BUILT_IN(unique_id);
184
- BUILT_IN(selector_nest);
185
- BUILT_IN(selector_append);
186
- BUILT_IN(selector_extend);
187
- BUILT_IN(selector_replace);
188
- BUILT_IN(selector_unify);
189
- BUILT_IN(is_superselector);
190
- BUILT_IN(simple_selectors);
191
- BUILT_IN(selector_parse);
192
- BUILT_IN(is_bracketed);
193
- BUILT_IN(content_exists);
194
- BUILT_IN(get_function);
195
- }
196
- }
197
-
198
- #endif
@@ -1,39 +0,0 @@
1
- #ifndef SASS_TO_C_H
2
- #define SASS_TO_C_H
3
-
4
- #include "ast_fwd_decl.hpp"
5
- #include "operation.hpp"
6
- #include "sass/values.h"
7
-
8
- namespace Sass {
9
-
10
- class To_C : public Operation_CRTP<union Sass_Value*, To_C> {
11
- // override this to define a catch-all
12
- union Sass_Value* fallback_impl(AST_Node_Ptr n);
13
-
14
- public:
15
-
16
- To_C() { }
17
- ~To_C() { }
18
-
19
- union Sass_Value* operator()(Boolean_Ptr);
20
- union Sass_Value* operator()(Number_Ptr);
21
- union Sass_Value* operator()(Color_Ptr);
22
- union Sass_Value* operator()(String_Constant_Ptr);
23
- union Sass_Value* operator()(String_Quoted_Ptr);
24
- union Sass_Value* operator()(Custom_Warning_Ptr);
25
- union Sass_Value* operator()(Custom_Error_Ptr);
26
- union Sass_Value* operator()(List_Ptr);
27
- union Sass_Value* operator()(Map_Ptr);
28
- union Sass_Value* operator()(Null_Ptr);
29
- union Sass_Value* operator()(Arguments_Ptr);
30
- union Sass_Value* operator()(Argument_Ptr);
31
-
32
- // dispatch to fallback implementation
33
- union Sass_Value* fallback(AST_Node_Ptr x)
34
- { return fallback_impl(x); }
35
- };
36
-
37
- }
38
-
39
- #endif
@@ -1,94 +0,0 @@
1
- #include <assert.h>
2
- #include <sstream>
3
-
4
- #include "node.hpp"
5
- #include "parser.hpp"
6
-
7
-
8
- #define STATIC_ARRAY_SIZE(array) (sizeof((array))/sizeof((array[0])))
9
-
10
-
11
- namespace Sass {
12
-
13
- Context ctx = Context::Data();
14
-
15
- const char* const ROUNDTRIP_TESTS[] = {
16
- NULL,
17
- "~",
18
- "CMPD",
19
- "~ CMPD",
20
- "CMPD >",
21
- "> > CMPD",
22
- "CMPD ~ ~",
23
- "> + CMPD1.CMPD2 > ~",
24
- "> + CMPD1.CMPD2 CMPD3.CMPD4 > ~",
25
- "+ CMPD1 CMPD2 ~ CMPD3 + CMPD4 > CMPD5 > ~"
26
- };
27
-
28
-
29
-
30
- static Complex_Selector* createComplexSelector(std::string src) {
31
- std::string temp(src);
32
- temp += ";";
33
- return (*Parser::from_c_str(temp.c_str(), ctx, "", Position()).parse_selector_list())[0];
34
- }
35
-
36
-
37
- void roundtripTest(const char* toTest) {
38
-
39
- // Create the initial selector
40
-
41
- Complex_Selector* pOrigSelector = NULL;
42
- if (toTest) {
43
- pOrigSelector = createComplexSelector(toTest);
44
- }
45
-
46
- std::string expected(pOrigSelector ? pOrigSelector->to_string() : "NULL");
47
-
48
-
49
- // Roundtrip the selector into a node and back
50
-
51
- Node node = complexSelectorToNode(pOrigSelector, ctx);
52
-
53
- std::stringstream nodeStringStream;
54
- nodeStringStream << node;
55
- std::string nodeString = nodeStringStream.str();
56
- cout << "ASNODE: " << node << endl;
57
-
58
- Complex_Selector* pNewSelector = nodeToComplexSelector(node, ctx);
59
-
60
- // Show the result
61
-
62
- std::string result(pNewSelector ? pNewSelector->to_string() : "NULL");
63
-
64
- cout << "SELECTOR: " << expected << endl;
65
- cout << "NEW SELECTOR: " << result << endl;
66
-
67
-
68
- // Test that they are equal using the equality operator
69
-
70
- assert( (!pOrigSelector && !pNewSelector ) || (pOrigSelector && pNewSelector) );
71
- if (pOrigSelector) {
72
- assert( *pOrigSelector == *pNewSelector );
73
- }
74
-
75
-
76
- // Test that they are equal by comparing the string versions of the selectors
77
-
78
- assert(expected == result);
79
-
80
- }
81
-
82
-
83
- int main() {
84
- for (int index = 0; index < STATIC_ARRAY_SIZE(ROUNDTRIP_TESTS); index++) {
85
- const char* const toTest = ROUNDTRIP_TESTS[index];
86
- cout << "\nINPUT STRING: " << (toTest ? toTest : "NULL") << endl;
87
- roundtripTest(toTest);
88
- }
89
-
90
- cout << "\nTesting Done.\n";
91
- }
92
-
93
-
94
- }
@@ -1,28 +0,0 @@
1
- #include <iostream>
2
- #include "../paths.hpp"
3
-
4
- using namespace Sass;
5
-
6
- template<typename T>
7
- std::vector<T>& operator<<(std::vector<T>& v, const T& e)
8
- {
9
- v.push_back(e);
10
- return v;
11
- }
12
-
13
- int main()
14
- {
15
- std::vector<int> v1, v2, v3;
16
- v1 << 1 << 2;
17
- v2 << 3;
18
- v3 << 4 << 5 << 6;
19
-
20
- std::vector<std::vector<int> > ss;
21
- ss << v1 << v2 << v3;
22
-
23
- std::vector<std::vector<int> > ps = paths(ss);
24
- for (size_t i = 0, S = ps.size(); i < S; ++i) {
25
- std::cout << vector_to_string(ps[i]) << std::endl;
26
- }
27
- return 0;
28
- }
@@ -1,25 +0,0 @@
1
- #include "../ast.hpp"
2
- #include "../context.hpp"
3
- #include "../parser.hpp"
4
- #include <string>
5
- #include <iostream>
6
-
7
- using namespace Sass;
8
-
9
- Context ctx = Context::Data();
10
-
11
- Compound_Selector* selector(std::string src)
12
- { return Parser::from_c_str(src.c_str(), ctx, "", Position()).parse_compound_selector(); }
13
-
14
- void diff(std::string s, std::string t)
15
- {
16
- std::cout << s << " - " << t << " = " << selector(s + ";")->minus(selector(t + ";"), ctx)->to_string() << std::endl;
17
- }
18
-
19
- int main()
20
- {
21
- diff(".a.b.c", ".c.b");
22
- diff(".a.b.c", ".fludge.b");
23
-
24
- return 0;
25
- }
@@ -1,25 +0,0 @@
1
- #include "../ast.hpp"
2
- #include "../context.hpp"
3
- #include "../parser.hpp"
4
- #include <string>
5
- #include <iostream>
6
-
7
- using namespace Sass;
8
-
9
- Context ctx = Context::Data();
10
-
11
- Selector* selector(std::string src)
12
- { return Parser::from_c_str(src.c_str(), ctx, "", Position()).parse_selector_list(); }
13
-
14
- void spec(std::string sel)
15
- { std::cout << sel << "\t::\t" << selector(sel + ";")->specificity() << std::endl; }
16
-
17
- int main()
18
- {
19
- spec("foo bar hux");
20
- spec(".foo .bar hux");
21
- spec("#foo .bar[hux='mux']");
22
- spec("a b c d e f");
23
-
24
- return 0;
25
- }
@@ -1,472 +0,0 @@
1
- #include <string>
2
- #include <iostream>
3
- #include <assert.h>
4
- #include "../subset_map.hpp"
5
-
6
- Subset_Map<std::string, std::string> ssm;
7
-
8
- string toString(std::vector<std::string> v);
9
- string toString(std::vector<std::pair<std::string, std::vector<std::string>>> v);
10
- void assertEqual(string std::sExpected, std::string sResult);
11
-
12
- void setup() {
13
- ssm.clear();
14
-
15
- //@ssm[Set[1, 2]] = "Foo"
16
- std::vector<std::string> s1;
17
- s1.push_back("1");
18
- s1.push_back("2");
19
- ssm.put(s1, "Foo");
20
-
21
- //@ssm[Set["fizz", "fazz"]] = "Bar"
22
- std::vector<std::string> s2;
23
- s2.push_back("fizz");
24
- s2.push_back("fazz");
25
- ssm.put(s2, "Bar");
26
-
27
- //@ssm[Set[:foo, :bar]] = "Baz"
28
- std::vector<std::string> s3;
29
- s3.push_back(":foo");
30
- s3.push_back(":bar");
31
- ssm.put(s3, "Baz");
32
-
33
- //@ssm[Set[:foo, :bar, :baz]] = "Bang"
34
- std::vector<std::string> s4;
35
- s4.push_back(":foo");
36
- s4.push_back(":bar");
37
- s4.push_back(":baz");
38
- ssm.put(s4, "Bang");
39
-
40
- //@ssm[Set[:bip, :bop, :blip]] = "Qux"
41
- std::vector<std::string> s5;
42
- s5.push_back(":bip");
43
- s5.push_back(":bop");
44
- s5.push_back(":blip");
45
- ssm.put(s5, "Qux");
46
-
47
- //@ssm[Set[:bip, :bop]] = "Thram"
48
- std::vector<std::string> s6;
49
- s6.push_back(":bip");
50
- s6.push_back(":bop");
51
- ssm.put(s6, "Thram");
52
- }
53
-
54
- void testEqualKeys() {
55
- std::cout << "testEqualKeys" << std::endl;
56
-
57
- //assert_equal [["Foo", Set[1, 2]]], @ssm.get(Set[1, 2])
58
- std::vector<std::string> k1;
59
- k1.push_back("1");
60
- k1.push_back("2");
61
- assertEqual("[[Foo, Set[1, 2]]]", toString(ssm.get_kv(k1)));
62
-
63
- //assert_equal [["Bar", Set["fizz", "fazz"]]], @ssm.get(Set["fizz", "fazz"])
64
- std::vector<std::string> k2;
65
- k2.push_back("fizz");
66
- k2.push_back("fazz");
67
- assertEqual("[[Bar, Set[fizz, fazz]]]", toString(ssm.get_kv(k2)));
68
-
69
- std::cout << std::endl;
70
- }
71
-
72
- void testSubsetKeys() {
73
- std::cout << "testSubsetKeys" << std::endl;
74
-
75
- //assert_equal [["Foo", Set[1, 2]]], @ssm.get(Set[1, 2, "fuzz"])
76
- std::vector<std::string> k1;
77
- k1.push_back("1");
78
- k1.push_back("2");
79
- k1.push_back("fuzz");
80
- assertEqual("[[Foo, Set[1, 2]]]", toString(ssm.get_kv(k1)));
81
-
82
- //assert_equal [["Bar", Set["fizz", "fazz"]]], @ssm.get(Set["fizz", "fazz", 3])
83
- std::vector<std::string> k2;
84
- k2.push_back("fizz");
85
- k2.push_back("fazz");
86
- k2.push_back("3");
87
- assertEqual("[[Bar, Set[fizz, fazz]]]", toString(ssm.get_kv(k2)));
88
-
89
- std::cout << std::endl;
90
- }
91
-
92
- void testSupersetKeys() {
93
- std::cout << "testSupersetKeys" << std::endl;
94
-
95
- //assert_equal [], @ssm.get(Set[1])
96
- std::vector<std::string> k1;
97
- k1.push_back("1");
98
- assertEqual("[]", toString(ssm.get_kv(k1)));
99
-
100
- //assert_equal [], @ssm.get(Set[2])
101
- std::vector<std::string> k2;
102
- k2.push_back("2");
103
- assertEqual("[]", toString(ssm.get_kv(k2)));
104
-
105
- //assert_equal [], @ssm.get(Set["fizz"])
106
- std::vector<std::string> k3;
107
- k3.push_back("fizz");
108
- assertEqual("[]", toString(ssm.get_kv(k3)));
109
-
110
- //assert_equal [], @ssm.get(Set["fazz"])
111
- std::vector<std::string> k4;
112
- k4.push_back("fazz");
113
- assertEqual("[]", toString(ssm.get_kv(k4)));
114
-
115
- std::cout << std::endl;
116
- }
117
-
118
- void testDisjointKeys() {
119
- std::cout << "testDisjointKeys" << std::endl;
120
-
121
- //assert_equal [], @ssm.get(Set[3, 4])
122
- std::vector<std::string> k1;
123
- k1.push_back("3");
124
- k1.push_back("4");
125
- assertEqual("[]", toString(ssm.get_kv(k1)));
126
-
127
- //assert_equal [], @ssm.get(Set["fuzz", "frizz"])
128
- std::vector<std::string> k2;
129
- k2.push_back("fuzz");
130
- k2.push_back("frizz");
131
- assertEqual("[]", toString(ssm.get_kv(k2)));
132
-
133
- //assert_equal [], @ssm.get(Set["gran", 15])
134
- std::vector<std::string> k3;
135
- k3.push_back("gran");
136
- k3.push_back("15");
137
- assertEqual("[]", toString(ssm.get_kv(k3)));
138
-
139
- std::cout << std::endl;
140
- }
141
-
142
- void testSemiDisjointKeys() {
143
- std::cout << "testSemiDisjointKeys" << std::endl;
144
-
145
- //assert_equal [], @ssm.get(Set[2, 3])
146
- std::vector<std::string> k1;
147
- k1.push_back("2");
148
- k1.push_back("3");
149
- assertEqual("[]", toString(ssm.get_kv(k1)));
150
-
151
- //assert_equal [], @ssm.get(Set["fizz", "fuzz"])
152
- std::vector<std::string> k2;
153
- k2.push_back("fizz");
154
- k2.push_back("fuzz");
155
- assertEqual("[]", toString(ssm.get_kv(k2)));
156
-
157
- //assert_equal [], @ssm.get(Set[1, "fazz"])
158
- std::vector<std::string> k3;
159
- k3.push_back("1");
160
- k3.push_back("fazz");
161
- assertEqual("[]", toString(ssm.get_kv(k3)));
162
-
163
- std::cout << std::endl;
164
- }
165
-
166
- void testEmptyKeySet() {
167
- std::cout << "testEmptyKeySet" << std::endl;
168
-
169
- //assert_raises(ArgumentError) {@ssm[Set[]] = "Fail"}
170
- std::vector<std::string> s1;
171
- try {
172
- ssm.put(s1, "Fail");
173
- }
174
- catch (const char* &e) {
175
- assertEqual("internal error: subset map keys may not be empty", e);
176
- }
177
- }
178
-
179
- void testEmptyKeyGet() {
180
- std::cout << "testEmptyKeyGet" << std::endl;
181
-
182
- //assert_equal [], @ssm.get(Set[])
183
- std::vector<std::string> k1;
184
- assertEqual("[]", toString(ssm.get_kv(k1)));
185
-
186
- std::cout << std::endl;
187
- }
188
- void testMultipleSubsets() {
189
- std::cout << "testMultipleSubsets" << std::endl;
190
-
191
- //assert_equal [["Foo", Set[1, 2]], ["Bar", Set["fizz", "fazz"]]], @ssm.get(Set[1, 2, "fizz", "fazz"])
192
- std::vector<std::string> k1;
193
- k1.push_back("1");
194
- k1.push_back("2");
195
- k1.push_back("fizz");
196
- k1.push_back("fazz");
197
- assertEqual("[[Foo, Set[1, 2]], [Bar, Set[fizz, fazz]]]", toString(ssm.get_kv(k1)));
198
-
199
- //assert_equal [["Foo", Set[1, 2]], ["Bar", Set["fizz", "fazz"]]], @ssm.get(Set[1, 2, 3, "fizz", "fazz", "fuzz"])
200
- std::vector<std::string> k2;
201
- k2.push_back("1");
202
- k2.push_back("2");
203
- k2.push_back("3");
204
- k2.push_back("fizz");
205
- k2.push_back("fazz");
206
- k2.push_back("fuzz");
207
- assertEqual("[[Foo, Set[1, 2]], [Bar, Set[fizz, fazz]]]", toString(ssm.get_kv(k2)));
208
-
209
- //assert_equal [["Baz", Set[:foo, :bar]]], @ssm.get(Set[:foo, :bar])
210
- std::vector<std::string> k3;
211
- k3.push_back(":foo");
212
- k3.push_back(":bar");
213
- assertEqual("[[Baz, Set[:foo, :bar]]]", toString(ssm.get_kv(k3)));
214
-
215
- //assert_equal [["Baz", Set[:foo, :bar]], ["Bang", Set[:foo, :bar, :baz]]], @ssm.get(Set[:foo, :bar, :baz])
216
- std::vector<std::string> k4;
217
- k4.push_back(":foo");
218
- k4.push_back(":bar");
219
- k4.push_back(":baz");
220
- assertEqual("[[Baz, Set[:foo, :bar]], [Bang, Set[:foo, :bar, :baz]]]", toString(ssm.get_kv(k4)));
221
-
222
- std::cout << std::endl;
223
- }
224
- void testBracketBracket() {
225
- std::cout << "testBracketBracket" << std::endl;
226
-
227
- //assert_equal ["Foo"], @ssm[Set[1, 2, "fuzz"]]
228
- std::vector<std::string> k1;
229
- k1.push_back("1");
230
- k1.push_back("2");
231
- k1.push_back("fuzz");
232
- assertEqual("[Foo]", toString(ssm.get_v(k1)));
233
-
234
- //assert_equal ["Baz", "Bang"], @ssm[Set[:foo, :bar, :baz]]
235
- std::vector<std::string> k2;
236
- k2.push_back(":foo");
237
- k2.push_back(":bar");
238
- k2.push_back(":baz");
239
- assertEqual("[Baz, Bang]", toString(ssm.get_v(k2)));
240
-
241
- std::cout << std::endl;
242
- }
243
-
244
- void testKeyOrder() {
245
- std::cout << "testEqualKeys" << std::endl;
246
-
247
- //assert_equal [["Foo", Set[1, 2]]], @ssm.get(Set[2, 1])
248
- std::vector<std::string> k1;
249
- k1.push_back("2");
250
- k1.push_back("1");
251
- assertEqual("[[Foo, Set[1, 2]]]", toString(ssm.get_kv(k1)));
252
-
253
- std::cout << std::endl;
254
- }
255
-
256
- void testOrderPreserved() {
257
- std::cout << "testOrderPreserved" << std::endl;
258
- //@ssm[Set[10, 11, 12]] = 1
259
- std::vector<std::string> s1;
260
- s1.push_back("10");
261
- s1.push_back("11");
262
- s1.push_back("12");
263
- ssm.put(s1, "1");
264
-
265
- //@ssm[Set[10, 11]] = 2
266
- std::vector<std::string> s2;
267
- s2.push_back("10");
268
- s2.push_back("11");
269
- ssm.put(s2, "2");
270
-
271
- //@ssm[Set[11]] = 3
272
- std::vector<std::string> s3;
273
- s3.push_back("11");
274
- ssm.put(s3, "3");
275
-
276
- //@ssm[Set[11, 12]] = 4
277
- std::vector<std::string> s4;
278
- s4.push_back("11");
279
- s4.push_back("12");
280
- ssm.put(s4, "4");
281
-
282
- //@ssm[Set[9, 10, 11, 12, 13]] = 5
283
- std::vector<std::string> s5;
284
- s5.push_back("9");
285
- s5.push_back("10");
286
- s5.push_back("11");
287
- s5.push_back("12");
288
- s5.push_back("13");
289
- ssm.put(s5, "5");
290
-
291
- //@ssm[Set[10, 13]] = 6
292
- std::vector<std::string> s6;
293
- s6.push_back("10");
294
- s6.push_back("13");
295
- ssm.put(s6, "6");
296
-
297
- //assert_equal([[1, Set[10, 11, 12]], [2, Set[10, 11]], [3, Set[11]], [4, Set[11, 12]], [5, Set[9, 10, 11, 12, 13]], [6, Set[10, 13]]], @ssm.get(Set[9, 10, 11, 12, 13]))
298
- std::vector<std::string> k1;
299
- k1.push_back("9");
300
- k1.push_back("10");
301
- k1.push_back("11");
302
- k1.push_back("12");
303
- k1.push_back("13");
304
- assertEqual("[[1, Set[10, 11, 12]], [2, Set[10, 11]], [3, Set[11]], [4, Set[11, 12]], [5, Set[9, 10, 11, 12, 13]], [6, Set[10, 13]]]", toString(ssm.get_kv(k1)));
305
-
306
- std::cout << std::endl;
307
- }
308
- void testMultipleEqualValues() {
309
- std::cout << "testMultipleEqualValues" << std::endl;
310
- //@ssm[Set[11, 12]] = 1
311
- std::vector<std::string> s1;
312
- s1.push_back("11");
313
- s1.push_back("12");
314
- ssm.put(s1, "1");
315
-
316
- //@ssm[Set[12, 13]] = 2
317
- std::vector<std::string> s2;
318
- s2.push_back("12");
319
- s2.push_back("13");
320
- ssm.put(s2, "2");
321
-
322
- //@ssm[Set[13, 14]] = 1
323
- std::vector<std::string> s3;
324
- s3.push_back("13");
325
- s3.push_back("14");
326
- ssm.put(s3, "1");
327
-
328
- //@ssm[Set[14, 15]] = 1
329
- std::vector<std::string> s4;
330
- s4.push_back("14");
331
- s4.push_back("15");
332
- ssm.put(s4, "1");
333
-
334
- //assert_equal([[1, Set[11, 12]], [2, Set[12, 13]], [1, Set[13, 14]], [1, Set[14, 15]]], @ssm.get(Set[11, 12, 13, 14, 15]))
335
- std::vector<std::string> k1;
336
- k1.push_back("11");
337
- k1.push_back("12");
338
- k1.push_back("13");
339
- k1.push_back("14");
340
- k1.push_back("15");
341
- assertEqual("[[1, Set[11, 12]], [2, Set[12, 13]], [1, Set[13, 14]], [1, Set[14, 15]]]", toString(ssm.get_kv(k1)));
342
-
343
- std::cout << std::endl;
344
- }
345
-
346
- int main()
347
- {
348
- std::vector<std::string> s1;
349
- s1.push_back("1");
350
- s1.push_back("2");
351
-
352
- std::vector<std::string> s2;
353
- s2.push_back("2");
354
- s2.push_back("3");
355
-
356
- std::vector<std::string> s3;
357
- s3.push_back("3");
358
- s3.push_back("4");
359
-
360
- ssm.put(s1, "value1");
361
- ssm.put(s2, "value2");
362
- ssm.put(s3, "value3");
363
-
364
- std::vector<std::string> s4;
365
- s4.push_back("1");
366
- s4.push_back("2");
367
- s4.push_back("3");
368
-
369
- std::vector<std::pair<string, std::vector<std::string> > > fetched(ssm.get_kv(s4));
370
-
371
- std::cout << "PRINTING RESULTS:" << std::endl;
372
- for (size_t i = 0, S = fetched.size(); i < S; ++i) {
373
- std::cout << fetched[i].first << std::endl;
374
- }
375
-
376
- Subset_Map<string, string> ssm2;
377
- ssm2.put(s1, "foo");
378
- ssm2.put(s2, "bar");
379
- ssm2.put(s4, "hux");
380
-
381
- std::vector<std::pair<string, std::vector<std::string> > > fetched2(ssm2.get_kv(s4));
382
-
383
- std::cout << std::endl << "PRINTING RESULTS:" << std::endl;
384
- for (size_t i = 0, S = fetched2.size(); i < S; ++i) {
385
- std::cout << fetched2[i].first << std::endl;
386
- }
387
-
388
- std::cout << "TRYING ON A SELECTOR-LIKE OBJECT" << std::endl;
389
-
390
- Subset_Map<string, string> sel_ssm;
391
- std::vector<std::string> target;
392
- target.push_back("desk");
393
- target.push_back(".wood");
394
-
395
- std::vector<std::string> actual;
396
- actual.push_back("desk");
397
- actual.push_back(".wood");
398
- actual.push_back(".mine");
399
-
400
- sel_ssm.put(target, "has-aquarium");
401
- std::vector<std::pair<string, std::vector<std::string> > > fetched3(sel_ssm.get_kv(actual));
402
- std::cout << "RESULTS:" << std::endl;
403
- for (size_t i = 0, S = fetched3.size(); i < S; ++i) {
404
- std::cout << fetched3[i].first << std::endl;
405
- }
406
-
407
- std::cout << std::endl;
408
-
409
- // BEGIN PORTED RUBY TESTS FROM /test/sass/util/subset_map_test.rb
410
-
411
- setup();
412
- testEqualKeys();
413
- testSubsetKeys();
414
- testSupersetKeys();
415
- testDisjointKeys();
416
- testSemiDisjointKeys();
417
- testEmptyKeySet();
418
- testEmptyKeyGet();
419
- testMultipleSubsets();
420
- testBracketBracket();
421
- testKeyOrder();
422
-
423
- setup();
424
- testOrderPreserved();
425
-
426
- setup();
427
- testMultipleEqualValues();
428
-
429
- return 0;
430
- }
431
-
432
- string toString(std::vector<std::pair<string, std::vector<std::string>>> v)
433
- {
434
- std::stringstream buffer;
435
- buffer << "[";
436
- for (size_t i = 0, S = v.size(); i < S; ++i) {
437
- buffer << "[" << v[i].first;
438
- buffer << ", Set[";
439
- for (size_t j = 0, S = v[i].second.size(); j < S; ++j) {
440
- buffer << v[i].second[j];
441
- if (j < S-1) {
442
- buffer << ", ";
443
- }
444
- }
445
- buffer << "]]";
446
- if (i < S-1) {
447
- buffer << ", ";
448
- }
449
- }
450
- buffer << "]";
451
- return buffer.str();
452
- }
453
-
454
- string toString(std::vector<std::string> v)
455
- {
456
- std::stringstream buffer;
457
- buffer << "[";
458
- for (size_t i = 0, S = v.size(); i < S; ++i) {
459
- buffer << v[i];
460
- if (i < S-1) {
461
- buffer << ", ";
462
- }
463
- }
464
- buffer << "]";
465
- return buffer.str();
466
- }
467
-
468
- void assertEqual(string sExpected, string sResult) {
469
- std::cout << "Expected: " << sExpected << std::endl;
470
- std::cout << "Result: " << sResult << std::endl;
471
- assert(sExpected == sResult);
472
- }