haml 3.1.8 → 3.2.0.alpha.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of haml might be problematic. Click here for more details.
- data/CONTRIBUTING +1 -1
- data/README.md +2 -2
- data/REVISION +1 -1
- data/Rakefile +16 -41
- data/VERSION +1 -1
- data/VERSION_NAME +1 -1
- data/lib/haml/buffer.rb +1 -5
- data/lib/haml/compiler.rb +7 -8
- data/lib/haml/exec.rb +1 -1
- data/lib/haml/helpers.rb +3 -5
- data/lib/haml/helpers/action_view_mods.rb +5 -21
- data/lib/haml/parser.rb +1 -1
- data/lib/haml/template.rb +1 -3
- data/lib/haml/util.rb +1 -1
- data/test/haml/engine_test.rb +12 -51
- data/test/haml/helper_test.rb +8 -25
- data/test/haml/html2haml_test.rb +1 -1
- data/test/haml/results/whitespace_handling.xhtml +50 -46
- data/test/haml/template_test.rb +2 -28
- data/test/haml/templates/partial_layout.haml +1 -4
- data/test/linked_rails.rb +4 -4
- data/vendor/sass/VERSION +1 -1
- data/vendor/sass/doc-src/SASS_CHANGELOG.md +2 -115
- data/vendor/sass/doc-src/SASS_REFERENCE.md +4 -12
- data/vendor/sass/lib/sass.rb +0 -1
- data/vendor/sass/lib/sass/cache_stores/base.rb +1 -3
- data/vendor/sass/lib/sass/cache_stores/filesystem.rb +0 -2
- data/vendor/sass/lib/sass/css.rb +1 -2
- data/vendor/sass/lib/sass/engine.rb +23 -39
- data/vendor/sass/lib/sass/environment.rb +0 -11
- data/vendor/sass/lib/sass/exec.rb +1 -14
- data/vendor/sass/lib/sass/importers/base.rb +1 -2
- data/vendor/sass/lib/sass/importers/filesystem.rb +13 -18
- data/vendor/sass/lib/sass/less.rb +2 -2
- data/vendor/sass/lib/sass/plugin.rb +8 -4
- data/vendor/sass/lib/sass/plugin/compiler.rb +17 -42
- data/vendor/sass/lib/sass/plugin/configuration.rb +2 -0
- data/vendor/sass/lib/sass/railtie.rb +1 -1
- data/vendor/sass/lib/sass/script/funcall.rb +1 -14
- data/vendor/sass/lib/sass/script/functions.rb +1 -44
- data/vendor/sass/lib/sass/script/interpolation.rb +0 -9
- data/vendor/sass/lib/sass/script/lexer.rb +1 -6
- data/vendor/sass/lib/sass/script/list.rb +0 -7
- data/vendor/sass/lib/sass/script/literal.rb +0 -5
- data/vendor/sass/lib/sass/script/node.rb +0 -8
- data/vendor/sass/lib/sass/script/number.rb +5 -28
- data/vendor/sass/lib/sass/script/operation.rb +0 -8
- data/vendor/sass/lib/sass/script/parser.rb +5 -12
- data/vendor/sass/lib/sass/script/string_interpolation.rb +0 -9
- data/vendor/sass/lib/sass/script/unary_operation.rb +0 -7
- data/vendor/sass/lib/sass/script/variable.rb +0 -5
- data/vendor/sass/lib/sass/scss/parser.rb +38 -78
- data/vendor/sass/lib/sass/scss/rx.rb +1 -2
- data/vendor/sass/lib/sass/scss/static_parser.rb +2 -2
- data/vendor/sass/lib/sass/shared.rb +1 -1
- data/vendor/sass/lib/sass/tree/comment_node.rb +11 -24
- data/vendor/sass/lib/sass/tree/debug_node.rb +1 -1
- data/vendor/sass/lib/sass/tree/each_node.rb +1 -1
- data/vendor/sass/lib/sass/tree/extend_node.rb +1 -1
- data/vendor/sass/lib/sass/tree/for_node.rb +2 -2
- data/vendor/sass/lib/sass/tree/function_node.rb +1 -1
- data/vendor/sass/lib/sass/tree/if_node.rb +14 -1
- data/vendor/sass/lib/sass/tree/mixin_def_node.rb +1 -1
- data/vendor/sass/lib/sass/tree/mixin_node.rb +2 -2
- data/vendor/sass/lib/sass/tree/node.rb +5 -2
- data/vendor/sass/lib/sass/tree/prop_node.rb +9 -2
- data/vendor/sass/lib/sass/tree/return_node.rb +1 -1
- data/vendor/sass/lib/sass/tree/rule_node.rb +2 -9
- data/vendor/sass/lib/sass/tree/variable_node.rb +1 -1
- data/vendor/sass/lib/sass/tree/visitors/check_nesting.rb +18 -17
- data/vendor/sass/lib/sass/tree/visitors/convert.rb +5 -10
- data/vendor/sass/lib/sass/tree/visitors/perform.rb +19 -50
- data/vendor/sass/lib/sass/tree/visitors/to_css.rb +15 -9
- data/vendor/sass/lib/sass/tree/warn_node.rb +1 -1
- data/vendor/sass/lib/sass/tree/while_node.rb +1 -1
- data/vendor/sass/lib/sass/util.rb +6 -58
- data/vendor/sass/sass.gemspec +1 -2
- data/vendor/sass/test/sass/cache_test.rb +0 -15
- data/vendor/sass/test/sass/conversion_test.rb +6 -2
- data/vendor/sass/test/sass/css2sass_test.rb +0 -9
- data/vendor/sass/test/sass/engine_test.rb +26 -124
- data/vendor/sass/test/sass/functions_test.rb +0 -13
- data/vendor/sass/test/sass/importer_test.rb +0 -110
- data/vendor/sass/test/sass/plugin_test.rb +13 -16
- data/vendor/sass/test/sass/script_conversion_test.rb +0 -2
- data/vendor/sass/test/sass/script_test.rb +0 -18
- data/vendor/sass/test/sass/scss/css_test.rb +1 -7
- data/vendor/sass/test/sass/scss/scss_test.rb +13 -37
- data/vendor/sass/test/sass/test_helper.rb +1 -1
- data/vendor/sass/test/sass/util_test.rb +0 -12
- data/vendor/sass/vendor/fssm/LICENSE +1 -1
- data/vendor/sass/vendor/fssm/README.markdown +27 -55
- data/vendor/sass/vendor/fssm/Rakefile +54 -6
- data/vendor/sass/vendor/fssm/VERSION.yml +5 -0
- data/vendor/sass/vendor/fssm/example.rb +3 -6
- data/vendor/sass/vendor/fssm/fssm.gemspec +70 -17
- data/vendor/sass/vendor/fssm/lib/fssm.rb +3 -7
- data/vendor/sass/vendor/fssm/lib/fssm/backends/fsevents.rb +1 -1
- data/vendor/sass/vendor/fssm/lib/fssm/backends/inotify.rb +2 -2
- data/vendor/sass/vendor/fssm/lib/fssm/backends/polling.rb +2 -2
- data/vendor/sass/vendor/fssm/lib/fssm/backends/rubycocoa/fsevents.rb +10 -10
- data/vendor/sass/vendor/fssm/lib/fssm/monitor.rb +9 -19
- data/vendor/sass/vendor/fssm/lib/fssm/path.rb +21 -24
- data/vendor/sass/vendor/fssm/lib/fssm/pathname.rb +479 -13
- data/vendor/sass/vendor/fssm/lib/fssm/state/directory.rb +11 -29
- data/vendor/sass/vendor/fssm/lib/fssm/state/file.rb +1 -1
- data/vendor/sass/vendor/fssm/lib/fssm/support.rb +12 -41
- data/vendor/sass/vendor/fssm/lib/fssm/tree.rb +6 -6
- data/vendor/sass/vendor/fssm/profile/prof-cache.rb +3 -3
- data/vendor/sass/vendor/fssm/profile/prof-pathname.rb +7 -7
- data/vendor/sass/vendor/fssm/spec/path_spec.rb +15 -36
- data/vendor/sass/vendor/fssm/spec/spec_helper.rb +6 -6
- metadata +78 -125
- data/lib/haml/helpers/rails_323_textarea_fix.rb +0 -41
- data/test/gemfiles/Gemfile.rails-2.0.x +0 -8
- data/test/gemfiles/Gemfile.rails-2.0.x.lock +0 -38
- data/test/gemfiles/Gemfile.rails-2.1.x +0 -8
- data/test/gemfiles/Gemfile.rails-2.1.x.lock +0 -38
- data/test/gemfiles/Gemfile.rails-2.2.x +0 -8
- data/test/gemfiles/Gemfile.rails-2.2.x.lock +0 -38
- data/test/gemfiles/Gemfile.rails-2.3.x +0 -8
- data/test/gemfiles/Gemfile.rails-2.3.x.lock +0 -40
- data/test/gemfiles/Gemfile.rails-3.0.x +0 -8
- data/test/gemfiles/Gemfile.rails-3.0.x.lock +0 -85
- data/test/gemfiles/Gemfile.rails-3.1.x +0 -8
- data/test/gemfiles/Gemfile.rails-3.1.x.lock +0 -97
- data/test/gemfiles/Gemfile.rails-3.2.x +0 -8
- data/test/gemfiles/Gemfile.rails-3.2.x.lock +0 -95
- data/test/gemfiles/Gemfile.rails-xss-2.3.x +0 -9
- data/test/gemfiles/Gemfile.rails-xss-2.3.x.lock +0 -42
- data/vendor/sass/lib/sass/logger.rb +0 -15
- data/vendor/sass/lib/sass/logger/base.rb +0 -32
- data/vendor/sass/lib/sass/logger/log_level.rb +0 -49
- data/vendor/sass/lib/sass/tree/visitors/deep_copy.rb +0 -87
- data/vendor/sass/lib/sass/tree/visitors/set_options.rb +0 -97
- data/vendor/sass/test/Gemfile +0 -4
- data/vendor/sass/test/Gemfile.lock +0 -19
- data/vendor/sass/test/sass/fixtures/test_staleness_check_across_importers.css +0 -1
- data/vendor/sass/test/sass/fixtures/test_staleness_check_across_importers.scss +0 -1
- data/vendor/sass/test/sass/logger_test.rb +0 -58
- data/vendor/sass/test/sass/templates/bork5.sass +0 -3
- data/vendor/sass/test/sass/templates/nested_bork5.sass +0 -2
- data/vendor/sass/vendor/fssm/Gemfile +0 -3
- data/vendor/sass/vendor/fssm/lib/fssm/backends/rbfsevent.rb +0 -42
- data/vendor/sass/vendor/fssm/lib/fssm/version.rb +0 -3
- data/vendor/sass/vendor/fssm/profile/prof-pathname-rubinius.rb +0 -35
- data/vendor/sass/vendor/fssm/spec/count_down_latch.rb +0 -151
- data/vendor/sass/vendor/fssm/spec/monitor_spec.rb +0 -202
@@ -965,19 +965,6 @@ MSG
|
|
965
965
|
assert_error_message("Separator name must be space, comma, or auto for `append'", "append(1, 2, baboon)")
|
966
966
|
end
|
967
967
|
|
968
|
-
def test_zip
|
969
|
-
assert_equal("1 3 5, 2 4 6", evaluate("zip(1 2, 3 4, 5 6)"))
|
970
|
-
assert_equal("1 4 7, 2 5 8", evaluate("zip(1 2 3, 4 5 6, 7 8)"))
|
971
|
-
end
|
972
|
-
|
973
|
-
def test_index
|
974
|
-
assert_equal("1", evaluate("index(1px solid blue, 1px)"))
|
975
|
-
assert_equal("2", evaluate("index(1px solid blue, solid)"))
|
976
|
-
assert_equal("3", evaluate("index(1px solid blue, #00f)"))
|
977
|
-
assert_equal("false", evaluate("index(1px solid blue, 1em)"))
|
978
|
-
assert_equal("false", evaluate("index(1px solid blue, notfound)"))
|
979
|
-
end
|
980
|
-
|
981
968
|
def test_if
|
982
969
|
assert_equal("1px", evaluate("if(true, 1px, 2px)"))
|
983
970
|
assert_equal("2px", evaluate("if(false, 1px, 2px)"))
|
@@ -2,8 +2,6 @@
|
|
2
2
|
require File.dirname(__FILE__) + '/../test_helper'
|
3
3
|
require File.dirname(__FILE__) + '/test_helper'
|
4
4
|
|
5
|
-
require 'sass/plugin'
|
6
|
-
|
7
5
|
class ImporterTest < Test::Unit::TestCase
|
8
6
|
|
9
7
|
class FruitImporter < Sass::Importers::Base
|
@@ -40,72 +38,6 @@ class ImporterTest < Test::Unit::TestCase
|
|
40
38
|
end
|
41
39
|
end
|
42
40
|
|
43
|
-
# This importer maps one import to another import
|
44
|
-
# based on the mappings passed to importer's constructor.
|
45
|
-
class IndirectImporter < Sass::Importers::Base
|
46
|
-
def initialize(mappings, mtimes)
|
47
|
-
@mappings = mappings
|
48
|
-
@mtimes = mtimes
|
49
|
-
end
|
50
|
-
def find_relative(uri, base, options)
|
51
|
-
nil
|
52
|
-
end
|
53
|
-
def find(name, options)
|
54
|
-
if @mappings.has_key?(name)
|
55
|
-
Sass::Engine.new(
|
56
|
-
%Q[@import "#{@mappings[name]}";],
|
57
|
-
options.merge(
|
58
|
-
:filename => name,
|
59
|
-
:syntax => :scss,
|
60
|
-
:importer => self
|
61
|
-
)
|
62
|
-
)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
def mtime(uri, options)
|
66
|
-
@mtimes.fetch(uri, @mtimes.has_key?(uri) ? Time.now : nil)
|
67
|
-
end
|
68
|
-
def key(uri, options)
|
69
|
-
[self.class.name, uri]
|
70
|
-
end
|
71
|
-
def to_s
|
72
|
-
"IndirectImporter(#{@mappings.keys.join(", ")})"
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
# This importer maps the import to single class
|
77
|
-
# based on the mappings passed to importer's constructor.
|
78
|
-
class ClassImporter < Sass::Importers::Base
|
79
|
-
def initialize(mappings, mtimes)
|
80
|
-
@mappings = mappings
|
81
|
-
@mtimes = mtimes
|
82
|
-
end
|
83
|
-
def find_relative(uri, base, options)
|
84
|
-
nil
|
85
|
-
end
|
86
|
-
def find(name, options)
|
87
|
-
if @mappings.has_key?(name)
|
88
|
-
Sass::Engine.new(
|
89
|
-
%Q[.#{name}{#{@mappings[name]}}],
|
90
|
-
options.merge(
|
91
|
-
:filename => name,
|
92
|
-
:syntax => :scss,
|
93
|
-
:importer => self
|
94
|
-
)
|
95
|
-
)
|
96
|
-
end
|
97
|
-
end
|
98
|
-
def mtime(uri, options)
|
99
|
-
@mtimes.fetch(uri, @mtimes.has_key?(uri) ? Time.now : nil)
|
100
|
-
end
|
101
|
-
def key(uri, options)
|
102
|
-
[self.class.name, uri]
|
103
|
-
end
|
104
|
-
def to_s
|
105
|
-
"ClassImporter(#{@mappings.keys.join(", ")})"
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
41
|
def test_can_resolve_generated_imports
|
110
42
|
scss_file = %Q{
|
111
43
|
$pear-color: green;
|
@@ -147,46 +79,4 @@ CSS
|
|
147
79
|
ensure
|
148
80
|
FileUtils.rm_rf(absolutize("tmp"))
|
149
81
|
end
|
150
|
-
|
151
|
-
def test_staleness_check_across_importers
|
152
|
-
file_system_importer = Sass::Importers::Filesystem.new(fixture_dir)
|
153
|
-
# Make sure the first import is older
|
154
|
-
indirect_importer = IndirectImporter.new({"apple" => "pear"}, {"apple" => Time.now - 1})
|
155
|
-
# Make css file is newer so the dependencies are the only way for the css file to be out of date.
|
156
|
-
FileUtils.touch(fixture_file("test_staleness_check_across_importers.css"))
|
157
|
-
# Make sure the first import is older
|
158
|
-
class_importer = ClassImporter.new({"pear" => %Q{color: green;}}, {"pear" => Time.now + 1})
|
159
|
-
|
160
|
-
options = {
|
161
|
-
:style => :compact,
|
162
|
-
:filename => fixture_file("test_staleness_check_across_importers.scss"),
|
163
|
-
:importer => file_system_importer,
|
164
|
-
:load_paths => [file_system_importer, indirect_importer, class_importer],
|
165
|
-
:syntax => :scss
|
166
|
-
}
|
167
|
-
|
168
|
-
assert_equal File.read(fixture_file("test_staleness_check_across_importers.css")),
|
169
|
-
Sass::Engine.new(File.read(fixture_file("test_staleness_check_across_importers.scss")), options).render
|
170
|
-
|
171
|
-
checker = Sass::Plugin::StalenessChecker.new(options)
|
172
|
-
|
173
|
-
assert checker.stylesheet_needs_update?(
|
174
|
-
fixture_file("test_staleness_check_across_importers.css"),
|
175
|
-
fixture_file("test_staleness_check_across_importers.scss"),
|
176
|
-
file_system_importer
|
177
|
-
)
|
178
|
-
end
|
179
|
-
|
180
|
-
def fixture_dir
|
181
|
-
File.join(File.dirname(__FILE__), "fixtures")
|
182
|
-
end
|
183
|
-
|
184
|
-
def fixture_file(path)
|
185
|
-
File.join(fixture_dir, path)
|
186
|
-
end
|
187
|
-
|
188
|
-
def test_absolute_files_across_template_locations
|
189
|
-
importer = Sass::Importers::Filesystem.new(absolutize 'templates')
|
190
|
-
assert_not_nil importer.mtime(absolutize('more_templates/more1.sass'), {})
|
191
|
-
end
|
192
82
|
end
|
@@ -183,7 +183,6 @@ CSS
|
|
183
183
|
|
184
184
|
def test_updating_stylesheets_callback
|
185
185
|
# Should run even when there's nothing to update
|
186
|
-
Sass::Plugin.options[:template_location] = nil
|
187
186
|
assert_callback :updating_stylesheets, []
|
188
187
|
end
|
189
188
|
|
@@ -197,25 +196,25 @@ CSS
|
|
197
196
|
assert_no_callback :updating_stylesheets
|
198
197
|
end
|
199
198
|
|
200
|
-
def
|
199
|
+
def test_updating_stylesheet_callback_for_updated_template
|
201
200
|
Sass::Plugin.options[:always_update] = false
|
202
201
|
touch 'basic'
|
203
|
-
assert_no_callback :
|
202
|
+
assert_no_callback :updating_stylesheet, template_loc("complex"), tempfile_loc("complex") do
|
204
203
|
assert_callbacks(
|
205
|
-
[:
|
206
|
-
[:
|
204
|
+
[:updating_stylesheet, template_loc("basic"), tempfile_loc("basic")],
|
205
|
+
[:updating_stylesheet, template_loc("import"), tempfile_loc("import")])
|
207
206
|
end
|
208
207
|
end
|
209
208
|
|
210
|
-
def
|
209
|
+
def test_updating_stylesheet_callback_for_fresh_template
|
211
210
|
Sass::Plugin.options[:always_update] = false
|
212
|
-
assert_no_callback :
|
211
|
+
assert_no_callback :updating_stylesheet
|
213
212
|
end
|
214
213
|
|
215
|
-
def
|
214
|
+
def test_updating_stylesheet_callback_for_error_template
|
216
215
|
Sass::Plugin.options[:always_update] = false
|
217
216
|
touch 'bork1'
|
218
|
-
assert_no_callback :
|
217
|
+
assert_no_callback :updating_stylesheet
|
219
218
|
end
|
220
219
|
|
221
220
|
def test_not_updating_stylesheet_callback_for_fresh_template
|
@@ -227,8 +226,8 @@ CSS
|
|
227
226
|
Sass::Plugin.options[:always_update] = false
|
228
227
|
assert_callback :not_updating_stylesheet, template_loc("complex"), tempfile_loc("complex") do
|
229
228
|
assert_no_callbacks(
|
230
|
-
[:
|
231
|
-
[:
|
229
|
+
[:updating_stylesheet, template_loc("basic"), tempfile_loc("basic")],
|
230
|
+
[:updating_stylesheet, template_loc("import"), tempfile_loc("import")])
|
232
231
|
end
|
233
232
|
end
|
234
233
|
|
@@ -348,11 +347,9 @@ CSS
|
|
348
347
|
|
349
348
|
def assert_callback(name, *expected_args)
|
350
349
|
run = false
|
351
|
-
received_args = nil
|
352
350
|
Sass::Plugin.send("on_#{name}") do |*args|
|
353
|
-
|
354
|
-
|
355
|
-
ea.respond_to?(:call) ? ea.call(ra) : ea == ra
|
351
|
+
run ||= expected_args.zip(args).all? do |ea, a|
|
352
|
+
ea.respond_to?(:call) ? ea.call(a) : ea == a
|
356
353
|
end
|
357
354
|
end
|
358
355
|
|
@@ -362,7 +359,7 @@ CSS
|
|
362
359
|
check_for_updates!
|
363
360
|
end
|
364
361
|
|
365
|
-
assert run, "Expected #{name} callback to be run with arguments:\n #{expected_args.inspect}
|
362
|
+
assert run, "Expected #{name} callback to be run with arguments:\n #{expected_args.inspect}"
|
366
363
|
end
|
367
364
|
|
368
365
|
def assert_no_callback(name, *unexpected_args)
|
@@ -223,8 +223,6 @@ RUBY
|
|
223
223
|
assert_renders '#{1 + 2}, #{3 + 4}'
|
224
224
|
assert_renders '#{1 + 2} ,#{3 + 4}'
|
225
225
|
assert_renders '#{1 + 2},#{3 + 4}'
|
226
|
-
assert_renders '#{1 + 2}, #{3 + 4}, #{5 + 6}'
|
227
|
-
assert_renders '3, #{3 + 4}, 11'
|
228
226
|
|
229
227
|
assert_renders '3 / #{3 + 4}'
|
230
228
|
assert_renders '3 /#{3 + 4}'
|
@@ -7,14 +7,6 @@ module Sass::Script::Functions::UserFunctions
|
|
7
7
|
val.options[:foo]
|
8
8
|
Sass::Script::String.new("Options defined!")
|
9
9
|
end
|
10
|
-
|
11
|
-
def arg_error
|
12
|
-
assert_options
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
module Sass::Script::Functions
|
17
|
-
include Sass::Script::Functions::UserFunctions
|
18
10
|
end
|
19
11
|
|
20
12
|
class SassScriptTest < Test::Unit::TestCase
|
@@ -138,8 +130,6 @@ class SassScriptTest < Test::Unit::TestCase
|
|
138
130
|
assert_equal '3, 7', resolve('#{1 + 2}, #{3 + 4}')
|
139
131
|
assert_equal '3 ,7', resolve('#{1 + 2} ,#{3 + 4}')
|
140
132
|
assert_equal '3,7', resolve('#{1 + 2},#{3 + 4}')
|
141
|
-
assert_equal '3, 7, 11', resolve('#{1 + 2}, #{3 + 4}, #{5 + 6}')
|
142
|
-
assert_equal '3, 7, 11', resolve('3, #{3 + 4}, 11')
|
143
133
|
|
144
134
|
assert_equal '3 / 7', resolve('3 / #{3 + 4}')
|
145
135
|
assert_equal '3 /7', resolve('3 /#{3 + 4}')
|
@@ -424,14 +414,6 @@ SASS
|
|
424
414
|
assert_raise_message(Sass::SyntaxError, "() isn't a valid CSS value.") {resolve("nth(append((), ()), 1)")}
|
425
415
|
end
|
426
416
|
|
427
|
-
def test_deep_argument_error_not_unwrapped
|
428
|
-
assert_raise_message(ArgumentError, 'wrong number of arguments (0 for 1)') {resolve("arg-error()")}
|
429
|
-
end
|
430
|
-
|
431
|
-
def test_shallow_argument_error_unwrapped
|
432
|
-
assert_raise_message(Sass::SyntaxError, "wrong number of arguments (1 for 0) for `arg-error'") {resolve("arg-error(1)")}
|
433
|
-
end
|
434
|
-
|
435
417
|
# Regression Tests
|
436
418
|
|
437
419
|
def test_funcall_has_higher_precedence_than_color_name
|
@@ -800,12 +800,6 @@ SCSS
|
|
800
800
|
assert_selector_parses('E*:hover')
|
801
801
|
end
|
802
802
|
|
803
|
-
def test_spaceless_combo_selectors
|
804
|
-
assert_equal "E > F {\n a: b; }\n", render("E>F { a: b;} ")
|
805
|
-
assert_equal "E ~ F {\n a: b; }\n", render("E~F { a: b;} ")
|
806
|
-
assert_equal "E + F {\n a: b; }\n", render("E+F { a: b;} ")
|
807
|
-
end
|
808
|
-
|
809
803
|
## Errors
|
810
804
|
|
811
805
|
def test_invalid_directives
|
@@ -915,7 +909,7 @@ SCSS
|
|
915
909
|
end
|
916
910
|
|
917
911
|
def render(scss, options = {})
|
918
|
-
tree = Sass::SCSS::CssParser.new(scss
|
912
|
+
tree = Sass::SCSS::CssParser.new(scss).parse
|
919
913
|
tree.options = Sass::Engine::DEFAULT_OPTIONS.merge(options)
|
920
914
|
tree.render
|
921
915
|
end
|
@@ -118,11 +118,11 @@ SCSS
|
|
118
118
|
def test_warn_directive
|
119
119
|
expected_warning = <<EXPECTATION
|
120
120
|
WARNING: this is a warning
|
121
|
-
|
121
|
+
on line 2 of test_warn_directive_inline.scss
|
122
122
|
|
123
123
|
WARNING: this is a mixin
|
124
|
-
|
125
|
-
|
124
|
+
on line 1 of test_warn_directive_inline.scss, in `foo'
|
125
|
+
from line 3 of test_warn_directive_inline.scss
|
126
126
|
EXPECTATION
|
127
127
|
assert_warning expected_warning do
|
128
128
|
assert_equal <<CSS, render(<<SCSS)
|
@@ -892,8 +892,7 @@ SCSS
|
|
892
892
|
end
|
893
893
|
|
894
894
|
def test_uses_property_exception_with_star_hack
|
895
|
-
|
896
|
-
Sass::Util.silence_warnings {render <<SCSS}
|
895
|
+
render <<SCSS
|
897
896
|
foo {
|
898
897
|
*bar:baz [fail]; }
|
899
898
|
SCSS
|
@@ -1030,10 +1029,11 @@ SCSS
|
|
1030
1029
|
end
|
1031
1030
|
|
1032
1031
|
def test_parent_in_mid_selector_error
|
1033
|
-
assert_raise_message(Sass::SyntaxError, <<MESSAGE
|
1032
|
+
assert_raise_message(Sass::SyntaxError, <<MESSAGE) {render <<SCSS}
|
1034
1033
|
Invalid CSS after ".foo": expected "{", was "&.bar"
|
1035
1034
|
|
1036
|
-
|
1035
|
+
In Sass 3, the parent selector & can only be used where element names are valid,
|
1036
|
+
since it could potentially be replaced by an element name.
|
1037
1037
|
MESSAGE
|
1038
1038
|
flim {
|
1039
1039
|
.foo&.bar {a: b}
|
@@ -1042,10 +1042,11 @@ SCSS
|
|
1042
1042
|
end
|
1043
1043
|
|
1044
1044
|
def test_parent_in_mid_selector_error
|
1045
|
-
assert_raise_message(Sass::SyntaxError, <<MESSAGE
|
1045
|
+
assert_raise_message(Sass::SyntaxError, <<MESSAGE) {render <<SCSS}
|
1046
1046
|
Invalid CSS after " .foo.bar": expected "{", was "& {a: b}"
|
1047
1047
|
|
1048
|
-
|
1048
|
+
In Sass 3, the parent selector & can only be used where element names are valid,
|
1049
|
+
since it could potentially be replaced by an element name.
|
1049
1050
|
MESSAGE
|
1050
1051
|
flim {
|
1051
1052
|
.foo.bar& {a: b}
|
@@ -1054,10 +1055,11 @@ SCSS
|
|
1054
1055
|
end
|
1055
1056
|
|
1056
1057
|
def test_double_parent_selector_error
|
1057
|
-
assert_raise_message(Sass::SyntaxError, <<MESSAGE
|
1058
|
+
assert_raise_message(Sass::SyntaxError, <<MESSAGE) {render <<SCSS}
|
1058
1059
|
Invalid CSS after " &": expected "{", was "& {a: b}"
|
1059
1060
|
|
1060
|
-
|
1061
|
+
In Sass 3, the parent selector & can only be used where element names are valid,
|
1062
|
+
since it could potentially be replaced by an element name.
|
1061
1063
|
MESSAGE
|
1062
1064
|
flim {
|
1063
1065
|
&& {a: b}
|
@@ -1095,24 +1097,6 @@ SCSS
|
|
1095
1097
|
|
1096
1098
|
# Regression
|
1097
1099
|
|
1098
|
-
def test_prop_name_interpolation_after_hyphen
|
1099
|
-
assert_equal <<CSS, render(<<SCSS)
|
1100
|
-
a {
|
1101
|
-
-foo-bar: b; }
|
1102
|
-
CSS
|
1103
|
-
a { -\#{"foo"}-bar: b; }
|
1104
|
-
SCSS
|
1105
|
-
end
|
1106
|
-
|
1107
|
-
def test_star_plus_and_parent
|
1108
|
-
assert_equal <<CSS, render(<<SCSS)
|
1109
|
-
* + html foo {
|
1110
|
-
a: b; }
|
1111
|
-
CSS
|
1112
|
-
foo {*+html & {a: b}}
|
1113
|
-
SCSS
|
1114
|
-
end
|
1115
|
-
|
1116
1100
|
def test_weird_added_space
|
1117
1101
|
assert_equal <<CSS, render(<<SCSS)
|
1118
1102
|
foo {
|
@@ -1260,14 +1244,6 @@ foo {
|
|
1260
1244
|
a: $var1;
|
1261
1245
|
b: $var2;
|
1262
1246
|
c: $var3; }
|
1263
|
-
SCSS
|
1264
|
-
end
|
1265
|
-
|
1266
|
-
def test_options_passed_to_script
|
1267
|
-
assert_equal <<CSS, render(<<SCSS, :style => :compressed)
|
1268
|
-
foo{color:#000}
|
1269
|
-
CSS
|
1270
|
-
foo {color: darken(black, 10%)}
|
1271
1247
|
SCSS
|
1272
1248
|
end
|
1273
1249
|
end
|
@@ -208,18 +208,6 @@ class UtilTest < Test::Unit::TestCase
|
|
208
208
|
assert(set_eql?(s1, s2))
|
209
209
|
end
|
210
210
|
|
211
|
-
def test_extract_and_inject_values
|
212
|
-
test = lambda {|arr| assert_equal(arr, with_extracted_values(arr) {|str| str})}
|
213
|
-
|
214
|
-
test[['foo bar']]
|
215
|
-
test[['foo {12} bar']]
|
216
|
-
test[['foo {{12} bar']]
|
217
|
-
test[['foo {{1', 12, '2} bar']]
|
218
|
-
test[['foo 1', 2, '{3', 4, 5, 6, '{7}', 8]]
|
219
|
-
test[['foo 1', [2, 3, 4], ' bar']]
|
220
|
-
test[['foo ', 1, "\n bar\n", [2, 3, 4], "\n baz"]]
|
221
|
-
end
|
222
|
-
|
223
211
|
def test_caller_info
|
224
212
|
assert_equal(["/tmp/foo.rb", 12, "fizzle"], caller_info("/tmp/foo.rb:12: in `fizzle'"))
|
225
213
|
assert_equal(["/tmp/foo.rb", 12, nil], caller_info("/tmp/foo.rb:12"))
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# FSSM ![project status](http://stillmaintained.com/ttilley/fssm.png) #
|
2
|
-
|
3
1
|
Monitor API
|
4
2
|
===========
|
5
3
|
|
@@ -14,70 +12,44 @@ Monitor with path
|
|
14
12
|
|
15
13
|
This form watches one path, and enters the run loop automatically. The first parameter is the path to watch, and the second parameter is an optional glob pattern or array of glob patterns that a file must match in order to trigger a callback. The default glob, if ommitted, is `'**/*'`.
|
16
14
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
15
|
+
FSSM.monitor('/some/directory/', '**/*') do
|
16
|
+
update {|base, relative|}
|
17
|
+
delete {|base, relative|}
|
18
|
+
create {|base, relative|}
|
19
|
+
end
|
22
20
|
|
23
21
|
Monitor with block
|
24
22
|
------------------
|
25
23
|
|
26
24
|
This form watches one or more paths, and enters the run loop automatically. The glob configuration call can be ommitted, and defaults to `'**/*'`.
|
27
25
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
26
|
+
FSSM.monitor do
|
27
|
+
path '/some/directory/' do
|
28
|
+
glob '**/*.yml'
|
29
|
+
|
30
|
+
update {|base, relative|}
|
31
|
+
delete {|base, relative|}
|
32
|
+
create {|base, relative|}
|
33
|
+
end
|
34
|
+
|
35
|
+
path '/some/other/directory/' do
|
36
|
+
update {|base, relative|}
|
37
|
+
delete {|base, relative|}
|
38
|
+
create {|base, relative|}
|
39
|
+
end
|
40
|
+
end
|
43
41
|
|
44
42
|
Monitor object
|
45
43
|
--------------
|
46
44
|
|
47
45
|
This form doesn't enter the run loop automatically.
|
48
46
|
|
49
|
-
|
50
|
-
|
51
|
-
monitor.path '/some/directory/' do
|
52
|
-
update {|base, relative|}
|
53
|
-
delete {|base, relative|}
|
54
|
-
create {|base, relative|}
|
55
|
-
end
|
56
|
-
|
57
|
-
monitor.run
|
58
|
-
|
59
|
-
Monitoring directories
|
60
|
-
----------------------
|
61
|
-
|
62
|
-
By default, FSSM monitors changes in files only. To enable monitoring of files and directories, pass option `directories => true` in a hash to the monitor. Please note that this may not work as expected in all backends. For example:
|
63
|
-
|
64
|
-
FSSM::Monitor.new(:directories => true)
|
65
|
-
FSSM.monitor(dir, file_glob, :directories => true)
|
66
|
-
|
67
|
-
When directories are monitored, there's an additional third argument to the callbacks. Instead of
|
68
|
-
|
69
|
-
FSSM.monitor('/some/directory/', '**/*') do
|
70
|
-
update {|base, relative|}
|
71
|
-
delete {|base, relative|}
|
72
|
-
create {|base, relative|}
|
73
|
-
end
|
74
|
-
|
75
|
-
you get this:
|
47
|
+
monitor = FSSM::Monitor.new
|
76
48
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
49
|
+
monitor.path '/some/directory/' do
|
50
|
+
update {|base, relative|}
|
51
|
+
delete {|base, relative|}
|
52
|
+
create {|base, relative|}
|
53
|
+
end
|
82
54
|
|
83
|
-
|
55
|
+
monitor.run
|