sass 3.1.21 → 3.2.0.alpha.3

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 (180) hide show
  1. data/README.md +5 -4
  2. data/REVISION +1 -1
  3. data/Rakefile +6 -15
  4. data/VERSION +1 -1
  5. data/VERSION_NAME +1 -1
  6. data/lib/sass.rb +0 -1
  7. data/lib/sass/cache_stores/base.rb +1 -3
  8. data/lib/sass/cache_stores/filesystem.rb +0 -3
  9. data/lib/sass/css.rb +49 -145
  10. data/lib/sass/engine.rb +23 -47
  11. data/lib/sass/environment.rb +5 -30
  12. data/lib/sass/exec.rb +7 -30
  13. data/lib/sass/importers/base.rb +1 -2
  14. data/lib/sass/importers/filesystem.rb +13 -18
  15. data/lib/sass/less.rb +1 -1
  16. data/lib/sass/plugin.rb +8 -4
  17. data/lib/sass/plugin/compiler.rb +67 -93
  18. data/lib/sass/plugin/configuration.rb +2 -0
  19. data/lib/sass/plugin/staleness_checker.rb +4 -14
  20. data/lib/sass/repl.rb +3 -2
  21. data/lib/sass/script.rb +1 -0
  22. data/lib/sass/script/color.rb +9 -4
  23. data/lib/sass/script/funcall.rb +3 -16
  24. data/lib/sass/script/functions.rb +55 -98
  25. data/lib/sass/script/interpolation.rb +0 -9
  26. data/lib/sass/script/lexer.rb +4 -2
  27. data/lib/sass/script/list.rb +0 -8
  28. data/lib/sass/script/literal.rb +20 -5
  29. data/lib/sass/script/node.rb +0 -8
  30. data/lib/sass/script/number.rb +11 -35
  31. data/lib/sass/script/operation.rb +0 -16
  32. data/lib/sass/script/parser.rb +5 -12
  33. data/lib/sass/script/string_interpolation.rb +0 -9
  34. data/lib/sass/script/unary_operation.rb +0 -7
  35. data/lib/sass/script/variable.rb +1 -5
  36. data/lib/sass/scss/parser.rb +54 -191
  37. data/lib/sass/scss/rx.rb +3 -15
  38. data/lib/sass/scss/static_parser.rb +3 -3
  39. data/lib/sass/selector.rb +3 -15
  40. data/lib/sass/selector/abstract_sequence.rb +2 -11
  41. data/lib/sass/selector/comma_sequence.rb +3 -8
  42. data/lib/sass/selector/sequence.rb +11 -74
  43. data/lib/sass/selector/simple.rb +1 -7
  44. data/lib/sass/selector/simple_sequence.rb +8 -28
  45. data/lib/sass/shared.rb +5 -3
  46. data/lib/sass/tree/comment_node.rb +12 -25
  47. data/lib/sass/tree/debug_node.rb +1 -1
  48. data/lib/sass/tree/directive_node.rb +0 -5
  49. data/lib/sass/tree/each_node.rb +1 -1
  50. data/lib/sass/tree/extend_node.rb +1 -1
  51. data/lib/sass/tree/for_node.rb +2 -2
  52. data/lib/sass/tree/function_node.rb +1 -1
  53. data/lib/sass/tree/if_node.rb +14 -1
  54. data/lib/sass/tree/media_node.rb +4 -4
  55. data/lib/sass/tree/mixin_def_node.rb +1 -1
  56. data/lib/sass/tree/mixin_node.rb +2 -2
  57. data/lib/sass/tree/node.rb +26 -10
  58. data/lib/sass/tree/return_node.rb +1 -1
  59. data/lib/sass/tree/root_node.rb +1 -1
  60. data/lib/sass/tree/rule_node.rb +11 -9
  61. data/lib/sass/tree/variable_node.rb +1 -1
  62. data/lib/sass/tree/visitors/base.rb +1 -1
  63. data/lib/sass/tree/visitors/check_nesting.rb +36 -29
  64. data/lib/sass/tree/visitors/convert.rb +9 -16
  65. data/lib/sass/tree/visitors/cssize.rb +9 -40
  66. data/lib/sass/tree/visitors/perform.rb +23 -79
  67. data/lib/sass/tree/visitors/to_css.rb +21 -23
  68. data/lib/sass/tree/warn_node.rb +1 -1
  69. data/lib/sass/tree/while_node.rb +1 -1
  70. data/lib/sass/util.rb +9 -147
  71. data/lib/sass/version.rb +0 -14
  72. data/test/sass/cache_test.rb +0 -15
  73. data/test/sass/conversion_test.rb +8 -50
  74. data/test/sass/css2sass_test.rb +0 -33
  75. data/test/sass/engine_test.rb +32 -283
  76. data/test/sass/extend_test.rb +0 -315
  77. data/test/sass/functions_test.rb +23 -60
  78. data/test/sass/importer_test.rb +0 -110
  79. data/test/sass/more_results/more_import.css +2 -2
  80. data/test/sass/plugin_test.rb +13 -40
  81. data/test/sass/results/import.css +2 -2
  82. data/test/sass/results/import_charset.css +0 -1
  83. data/test/sass/results/import_charset_1_8.css +0 -1
  84. data/test/sass/results/import_charset_ibm866.css +0 -1
  85. data/test/sass/results/scss_import.css +2 -2
  86. data/test/sass/results/units.css +1 -1
  87. data/test/sass/script_conversion_test.rb +0 -2
  88. data/test/sass/script_test.rb +4 -28
  89. data/test/sass/scss/css_test.rb +1 -79
  90. data/test/sass/scss/scss_test.rb +16 -96
  91. data/test/sass/templates/import_charset.sass +0 -2
  92. data/test/sass/templates/import_charset_1_8.sass +0 -2
  93. data/test/sass/templates/import_charset_ibm866.sass +0 -2
  94. data/test/sass/test_helper.rb +1 -1
  95. data/test/sass/util_test.rb +0 -28
  96. data/test/test_helper.rb +0 -2
  97. data/vendor/{listen → fssm}/LICENSE +1 -1
  98. data/vendor/fssm/README.markdown +55 -0
  99. data/vendor/fssm/Rakefile +59 -0
  100. data/vendor/fssm/VERSION.yml +5 -0
  101. data/vendor/fssm/example.rb +9 -0
  102. data/vendor/fssm/fssm.gemspec +77 -0
  103. data/vendor/fssm/lib/fssm.rb +33 -0
  104. data/vendor/fssm/lib/fssm/backends/fsevents.rb +36 -0
  105. data/vendor/fssm/lib/fssm/backends/inotify.rb +26 -0
  106. data/vendor/fssm/lib/fssm/backends/polling.rb +25 -0
  107. data/vendor/fssm/lib/fssm/backends/rubycocoa/fsevents.rb +131 -0
  108. data/vendor/fssm/lib/fssm/monitor.rb +26 -0
  109. data/vendor/fssm/lib/fssm/path.rb +91 -0
  110. data/vendor/fssm/lib/fssm/pathname.rb +502 -0
  111. data/vendor/fssm/lib/fssm/state/directory.rb +57 -0
  112. data/vendor/fssm/lib/fssm/state/file.rb +24 -0
  113. data/vendor/fssm/lib/fssm/support.rb +63 -0
  114. data/vendor/fssm/lib/fssm/tree.rb +176 -0
  115. data/vendor/fssm/profile/prof-cache.rb +40 -0
  116. data/vendor/fssm/profile/prof-fssm-pathname.html +1231 -0
  117. data/vendor/fssm/profile/prof-pathname.rb +68 -0
  118. data/vendor/fssm/profile/prof-plain-pathname.html +988 -0
  119. data/vendor/fssm/profile/prof.html +2379 -0
  120. data/vendor/fssm/spec/path_spec.rb +75 -0
  121. data/vendor/fssm/spec/root/duck/quack.txt +0 -0
  122. data/vendor/fssm/spec/root/file.css +0 -0
  123. data/vendor/fssm/spec/root/file.rb +0 -0
  124. data/vendor/fssm/spec/root/file.yml +0 -0
  125. data/vendor/fssm/spec/root/moo/cow.txt +0 -0
  126. data/vendor/fssm/spec/spec_helper.rb +14 -0
  127. metadata +246 -281
  128. data/VERSION_DATE +0 -1
  129. data/lib/sass/logger.rb +0 -15
  130. data/lib/sass/logger/base.rb +0 -32
  131. data/lib/sass/logger/log_level.rb +0 -49
  132. data/lib/sass/tree/visitors/deep_copy.rb +0 -87
  133. data/lib/sass/tree/visitors/extend.rb +0 -42
  134. data/lib/sass/tree/visitors/set_options.rb +0 -97
  135. data/lib/sass/util/multibyte_string_scanner.rb +0 -134
  136. data/test/Gemfile +0 -4
  137. data/test/Gemfile.lock +0 -19
  138. data/test/sass/fixtures/test_staleness_check_across_importers.css +0 -1
  139. data/test/sass/fixtures/test_staleness_check_across_importers.scss +0 -1
  140. data/test/sass/logger_test.rb +0 -58
  141. data/test/sass/templates/_double_import_loop2.sass +0 -1
  142. data/test/sass/templates/bork5.sass +0 -3
  143. data/test/sass/templates/double_import_loop1.sass +0 -1
  144. data/test/sass/templates/nested_bork5.sass +0 -2
  145. data/test/sass/templates/single_import_loop.sass +0 -1
  146. data/test/sass/util/multibyte_string_scanner_test.rb +0 -147
  147. data/vendor/listen/CHANGELOG.md +0 -147
  148. data/vendor/listen/Gemfile +0 -23
  149. data/vendor/listen/Guardfile +0 -8
  150. data/vendor/listen/README.md +0 -312
  151. data/vendor/listen/Rakefile +0 -47
  152. data/vendor/listen/Vagrantfile +0 -96
  153. data/vendor/listen/lib/listen.rb +0 -38
  154. data/vendor/listen/lib/listen/adapter.rb +0 -167
  155. data/vendor/listen/lib/listen/adapters/darwin.rb +0 -84
  156. data/vendor/listen/lib/listen/adapters/linux.rb +0 -110
  157. data/vendor/listen/lib/listen/adapters/polling.rb +0 -66
  158. data/vendor/listen/lib/listen/adapters/windows.rb +0 -81
  159. data/vendor/listen/lib/listen/directory_record.rb +0 -318
  160. data/vendor/listen/lib/listen/listener.rb +0 -203
  161. data/vendor/listen/lib/listen/multi_listener.rb +0 -121
  162. data/vendor/listen/lib/listen/turnstile.rb +0 -28
  163. data/vendor/listen/lib/listen/version.rb +0 -3
  164. data/vendor/listen/listen.gemspec +0 -26
  165. data/vendor/listen/spec/listen/adapter_spec.rb +0 -142
  166. data/vendor/listen/spec/listen/adapters/darwin_spec.rb +0 -31
  167. data/vendor/listen/spec/listen/adapters/linux_spec.rb +0 -41
  168. data/vendor/listen/spec/listen/adapters/polling_spec.rb +0 -68
  169. data/vendor/listen/spec/listen/adapters/windows_spec.rb +0 -24
  170. data/vendor/listen/spec/listen/directory_record_spec.rb +0 -1138
  171. data/vendor/listen/spec/listen/listener_spec.rb +0 -155
  172. data/vendor/listen/spec/listen/multi_listener_spec.rb +0 -156
  173. data/vendor/listen/spec/listen/turnstile_spec.rb +0 -56
  174. data/vendor/listen/spec/listen_spec.rb +0 -73
  175. data/vendor/listen/spec/spec_helper.rb +0 -18
  176. data/vendor/listen/spec/support/adapter_helper.rb +0 -716
  177. data/vendor/listen/spec/support/directory_record_helper.rb +0 -55
  178. data/vendor/listen/spec/support/fixtures_helper.rb +0 -29
  179. data/vendor/listen/spec/support/listeners_helper.rb +0 -144
  180. data/vendor/listen/spec/support/platform_helper.rb +0 -11
@@ -1,716 +0,0 @@
1
- # Adapter watch
2
- #
3
- # @param [Listen::Listener] listener the adapter listener
4
- # @param [String] path the path to watch
5
- #
6
- def watch(listener, *paths)
7
- callback = lambda { |changed_dirs, options| @called = true; listener.on_change(changed_dirs, options) }
8
- @adapter = Listen::Adapter.select_and_initialize(paths, { :latency => test_latency }, &callback)
9
- @adapter.start(false)
10
-
11
- yield
12
-
13
- t = Thread.new { sleep(test_latency * 5); @adapter.stop }
14
- @adapter.wait_for_callback
15
- ensure
16
- Thread.kill(t) if t
17
- @adapter.stop
18
- end
19
-
20
- shared_examples_for 'a filesystem adapter' do
21
- subject { described_class.new(File.dirname(__FILE__), &Proc.new {}) }
22
-
23
- describe '#start' do
24
- after { subject.stop }
25
-
26
- context 'with the blocking param set to true' do
27
- it 'blocks the current thread after starting the workers' do
28
- @called = false
29
- t = Thread.new { subject.start(true); @called = true }
30
- sleep(test_latency * 3)
31
- Thread.kill(t) if t
32
- @called.should be_false
33
- end
34
- end
35
-
36
- context 'with the blocking param set to false' do
37
- it 'does not block the current thread after starting the workers' do
38
- @called = false
39
- t = Thread.new { subject.start(false); @called = true }
40
- sleep(test_latency * 3)
41
- Thread.kill(t) if t
42
- @called.should be_true
43
- end
44
- end
45
- end
46
-
47
- describe '#started?' do
48
- context 'with a new adapter' do
49
- it 'returns false' do
50
- subject.should_not be_started
51
- end
52
- end
53
-
54
- context 'with a stopped adapter' do
55
- before { subject.start(false); subject.stop }
56
-
57
- it 'returns false' do
58
- subject.should_not be_started
59
- end
60
- end
61
-
62
- context 'with a started adapter' do
63
- before { subject.start(false) }
64
- after { subject.start }
65
-
66
- it 'returns true' do
67
- subject.should be_started
68
- end
69
- end
70
- end
71
- end
72
-
73
- shared_examples_for 'an adapter that call properly listener#on_change' do |*args|
74
- options = (args.first && args.first.is_a?(Hash)) ? args.first : {}
75
- let(:listener) { mock(Listen::Listener) }
76
- before { described_class.stub(:works?) { true } }
77
-
78
- context 'single file operations' do
79
- context 'when a file is created' do
80
- it 'detects the added file' do
81
- fixtures do |path|
82
- if options[:recursive]
83
- listener.should_receive(:on_change).once.with([path], :recursive => true)
84
- else
85
- listener.should_receive(:on_change).once.with([path], {})
86
- end
87
-
88
- watch(listener, path) do
89
- touch 'new_file.rb'
90
- end
91
- end
92
- end
93
-
94
- context 'given a symlink' do
95
- it 'detects the added file' do
96
- fixtures do |path|
97
- if options[:recursive]
98
- listener.should_receive(:on_change).once.with([path], :recursive => true)
99
- else
100
- listener.should_receive(:on_change).once.with([path], {})
101
- end
102
-
103
- touch 'new_file.rb'
104
-
105
- watch(listener, path) do
106
- ln_s 'new_file.rb', 'new_file_symlink.rb'
107
- end
108
- end
109
- end
110
- end
111
-
112
- context 'given a new created directory' do
113
- it 'detects the added file' do
114
- fixtures do |path|
115
- if options[:recursive]
116
- listener.should_receive(:on_change).once.with([path], :recursive => true)
117
- else
118
- listener.should_receive(:on_change).once.with do |array, options|
119
- array.should =~ [path, "#{path}/a_directory"]
120
- end
121
- end
122
-
123
- watch(listener, path) do
124
- mkdir 'a_directory'
125
- # Needed for INotify, because of :recursive rb-inotify custom flag?
126
- sleep 0.05 if @adapter.is_a?(Listen::Adapters::Linux)
127
- touch 'a_directory/new_file.rb'
128
- end
129
- end
130
- end
131
- end
132
-
133
- context 'given an existing directory' do
134
- it 'detects the added file' do
135
- fixtures do |path|
136
- if options[:recursive]
137
- listener.should_receive(:on_change).once.with([path], :recursive => true)
138
- else
139
- listener.should_receive(:on_change).once.with(["#{path}/a_directory"], {})
140
- end
141
-
142
- mkdir 'a_directory'
143
-
144
- watch(listener, path) do
145
- touch 'a_directory/new_file.rb'
146
- end
147
- end
148
- end
149
- end
150
-
151
- context 'given a directory with subdirectories' do
152
- it 'detects the added file' do
153
- fixtures do |path|
154
- if options[:recursive]
155
- listener.should_receive(:on_change).once.with([path], :recursive => true)
156
- else
157
- listener.should_receive(:on_change).once.with(["#{path}/a_directory/subdirectory"], {})
158
- end
159
-
160
- mkdir_p 'a_directory/subdirectory'
161
-
162
- watch(listener, path) do
163
- touch 'a_directory/subdirectory/new_file.rb'
164
- end
165
- end
166
- end
167
- end
168
- end
169
-
170
- context 'when a file is modified' do
171
- it 'detects the modified file' do
172
- fixtures do |path|
173
- if options[:recursive]
174
- listener.should_receive(:on_change).once.with([path], :recursive => true)
175
- else
176
- listener.should_receive(:on_change).once.with([path], {})
177
- end
178
-
179
- touch 'existing_file.txt'
180
-
181
- watch(listener, path) do
182
- touch 'existing_file.txt'
183
- end
184
- end
185
- end
186
-
187
- context 'given a symlink' do
188
- it 'detects the modified file' do
189
- fixtures do |path|
190
- if options[:recursive]
191
- listener.should_receive(:on_change).once.with([path], :recursive => true)
192
- else
193
- listener.should_receive(:on_change).once.with([path], {})
194
- end
195
-
196
- touch 'existing_file.rb'
197
- ln_s 'existing_file.rb', 'existing_file_symlink.rb'
198
-
199
- watch(listener, path) do
200
- touch 'existing_file.rb'
201
- end
202
- end
203
- end
204
- end
205
-
206
- context 'given a hidden file' do
207
- it 'detects the modified file' do
208
- fixtures do |path|
209
- if options[:recursive]
210
- listener.should_receive(:on_change).once.with([path], :recursive => true)
211
- else
212
- listener.should_receive(:on_change).once.with([path], {})
213
- end
214
-
215
- touch '.hidden'
216
-
217
- watch(listener, path) do
218
- touch '.hidden'
219
- end
220
- end
221
- end
222
- end
223
-
224
- unless options[:adapter] == :windows
225
- context 'given a file mode change' do
226
- it 'does not detect the mode change' do
227
- fixtures do |path|
228
- if options[:recursive]
229
- listener.should_receive(:on_change).once.with([path], :recursive => true)
230
- else
231
- listener.should_receive(:on_change).once.with([path], {})
232
- end
233
-
234
- touch 'run.rb'
235
-
236
- watch(listener, path) do
237
- chmod 0777, 'run.rb'
238
- end
239
- end
240
- end
241
- end
242
- end
243
-
244
- context 'given an existing directory' do
245
- it 'detects the modified file' do
246
- fixtures do |path|
247
- if options[:recursive]
248
- listener.should_receive(:on_change).once.with([path], :recursive => true)
249
- else
250
- listener.should_receive(:on_change).once.with(["#{path}/a_directory"], {})
251
- end
252
-
253
- mkdir 'a_directory'
254
- touch 'a_directory/existing_file.txt'
255
-
256
- watch(listener, path) do
257
- touch 'a_directory/existing_file.txt'
258
- end
259
- end
260
- end
261
- end
262
-
263
- context 'given a directory with subdirectories' do
264
- it 'detects the modified file' do
265
- fixtures do |path|
266
- if options[:recursive]
267
- listener.should_receive(:on_change).once.with([path], :recursive => true)
268
- else
269
- listener.should_receive(:on_change).once.with(["#{path}/a_directory/subdirectory"], {})
270
- end
271
-
272
- mkdir_p 'a_directory/subdirectory'
273
- touch 'a_directory/subdirectory/existing_file.txt'
274
-
275
- watch(listener, path) do
276
- touch 'a_directory/subdirectory/new_file.rb'
277
- end
278
- end
279
- end
280
- end
281
- end
282
-
283
- context 'when a file is moved' do
284
- it 'detects the file move' do
285
- fixtures do |path|
286
- if options[:recursive]
287
- listener.should_receive(:on_change).once.with([path], :recursive => true)
288
- else
289
- listener.should_receive(:on_change).once.with([path], {})
290
- end
291
-
292
- touch 'move_me.txt'
293
-
294
- watch(listener, path) do
295
- mv 'move_me.txt', 'new_name.txt'
296
- end
297
- end
298
- end
299
-
300
- context 'given a symlink' do
301
- it 'detects the file move' do
302
- fixtures do |path|
303
- if options[:recursive]
304
- listener.should_receive(:on_change).once.with([path], :recursive => true)
305
- else
306
- listener.should_receive(:on_change).once.with([path], {})
307
- end
308
-
309
- touch 'move_me.rb'
310
- ln_s 'move_me.rb', 'move_me_symlink.rb'
311
-
312
- watch(listener, path) do
313
- mv 'move_me_symlink.rb', 'new_symlink.rb'
314
- end
315
- end
316
- end
317
- end
318
-
319
- context 'given an existing directory' do
320
- it 'detects the file move into the directory' do
321
- fixtures do |path|
322
- if options[:recursive]
323
- listener.should_receive(:on_change).once.with([path], :recursive => true)
324
- else
325
- listener.should_receive(:on_change).once.with do |array, options|
326
- array.should =~ [path, "#{path}/a_directory"]
327
- end
328
- end
329
-
330
- mkdir 'a_directory'
331
- touch 'move_me.txt'
332
-
333
- watch(listener, path) do
334
- mv 'move_me.txt', 'a_directory/move_me.txt'
335
- end
336
- end
337
- end
338
-
339
- it 'detects a file move out of the directory' do
340
- fixtures do |path|
341
- if options[:recursive]
342
- listener.should_receive(:on_change).once.with([path], :recursive => true)
343
- else
344
- listener.should_receive(:on_change).once.with do |array, options|
345
- array.should =~ [path, "#{path}/a_directory"]
346
- end
347
- end
348
-
349
- mkdir 'a_directory'
350
- touch 'a_directory/move_me.txt'
351
-
352
- watch(listener, path) do
353
- mv 'a_directory/move_me.txt', 'i_am_here.txt'
354
- end
355
- end
356
- end
357
-
358
- it 'detects a file move between two directories' do
359
- fixtures do |path|
360
- if options[:recursive]
361
- listener.should_receive(:on_change).once.with([path], :recursive => true)
362
- else
363
- listener.should_receive(:on_change).once.with do |array, options|
364
- array.should =~ ["#{path}/from_directory", "#{path}/to_directory"]
365
- end
366
- end
367
-
368
- mkdir 'from_directory'
369
- touch 'from_directory/move_me.txt'
370
- mkdir 'to_directory'
371
-
372
- watch(listener, path) do
373
- mv 'from_directory/move_me.txt', 'to_directory/move_me.txt'
374
- end
375
- end
376
- end
377
- end
378
-
379
- context 'given a directory with subdirectories' do
380
- it 'detects files movements between subdirectories' do
381
- fixtures do |path|
382
- if options[:recursive]
383
- listener.should_receive(:on_change).once.with([path], :recursive => true)
384
- else
385
- listener.should_receive(:on_change).once.with do |array, options|
386
- array.should =~ ["#{path}/a_directory/subdirectory", "#{path}/b_directory/subdirectory"]
387
- end
388
- end
389
-
390
- mkdir_p 'a_directory/subdirectory'
391
- mkdir_p 'b_directory/subdirectory'
392
- touch 'a_directory/subdirectory/move_me.txt'
393
-
394
- watch(listener, path) do
395
- mv 'a_directory/subdirectory/move_me.txt', 'b_directory/subdirectory'
396
- end
397
- end
398
- end
399
- end
400
- end
401
-
402
- context 'when a file is deleted' do
403
- it 'detects the file removal' do
404
- fixtures do |path|
405
- if options[:recursive]
406
- listener.should_receive(:on_change).once.with([path], :recursive => true)
407
- else
408
- listener.should_receive(:on_change).once.with([path], {})
409
- end
410
-
411
- touch 'unnecessary.txt'
412
-
413
- watch(listener, path) do
414
- rm 'unnecessary.txt'
415
- end
416
- end
417
- end
418
-
419
- context 'given a symlink' do
420
- it 'detects the file removal' do
421
- fixtures do |path|
422
- if options[:recursive]
423
- listener.should_receive(:on_change).once.with([path], :recursive => true)
424
- else
425
- listener.should_receive(:on_change).once.with([path], {})
426
- end
427
-
428
- touch 'unnecessary.rb'
429
- ln_s 'unnecessary.rb', 'unnecessary_symlink.rb'
430
-
431
- watch(listener, path) do
432
- rm 'unnecessary_symlink.rb'
433
- end
434
- end
435
- end
436
- end
437
-
438
- context 'given an existing directory' do
439
- it 'detects the file removal' do
440
- fixtures do |path|
441
- if options[:recursive]
442
- listener.should_receive(:on_change).once.with([path], :recursive => true)
443
- else
444
- listener.should_receive(:on_change).once.with(["#{path}/a_directory"], {})
445
- end
446
-
447
- mkdir 'a_directory'
448
- touch 'a_directory/do_not_use.rb'
449
-
450
- watch(listener, path) do
451
- rm 'a_directory/do_not_use.rb'
452
- end
453
- end
454
- end
455
- end
456
-
457
- context 'given a directory with subdirectories' do
458
- it 'detects the file removal' do
459
- fixtures do |path|
460
- if options[:recursive]
461
- listener.should_receive(:on_change).once.with([path], :recursive => true)
462
- else
463
- listener.should_receive(:on_change).once.with(["#{path}/a_directory/subdirectory"], {})
464
- end
465
-
466
- mkdir_p 'a_directory/subdirectory'
467
- touch 'a_directory/subdirectory/do_not_use.rb'
468
-
469
- watch(listener, path) do
470
- rm 'a_directory/subdirectory/do_not_use.rb'
471
- end
472
- end
473
- end
474
- end
475
- end
476
- end
477
-
478
- context 'multiple file operations' do
479
- it 'detects the added files' do
480
- fixtures do |path|
481
- if options[:recursive]
482
- listener.should_receive(:on_change).at_least(:once).with([path], :recursive => true)
483
- else
484
- listener.should_receive(:on_change).once.with do |array, options|
485
- array.should =~ [path, "#{path}/a_directory"]
486
- end
487
- end
488
-
489
- watch(listener, path) do
490
- touch 'a_file.rb'
491
- touch 'b_file.rb'
492
- mkdir 'a_directory'
493
- # Needed for INotify, because of :recursive rb-inotify custom flag?
494
- # Also needed for the osx adapter
495
- sleep 0.05
496
- touch 'a_directory/a_file.rb'
497
- touch 'a_directory/b_file.rb'
498
- end
499
- end
500
- end
501
-
502
- it 'detects the modified files' do
503
- fixtures do |path|
504
- if options[:recursive]
505
- listener.should_receive(:on_change).once.with([path], :recursive => true)
506
- else
507
- listener.should_receive(:on_change).once.with do |array, options|
508
- array.should =~ [path, "#{path}/a_directory"]
509
- end
510
- end
511
-
512
- touch 'a_file.rb'
513
- touch 'b_file.rb'
514
- mkdir 'a_directory'
515
- touch 'a_directory/a_file.rb'
516
- touch 'a_directory/b_file.rb'
517
-
518
- watch(listener, path) do
519
- touch 'b_file.rb'
520
- touch 'a_directory/a_file.rb'
521
- end
522
- end
523
- end
524
-
525
- it 'detects the removed files' do
526
- fixtures do |path|
527
- if options[:recursive]
528
- listener.should_receive(:on_change).once.with([path], :recursive => true)
529
- else
530
- listener.should_receive(:on_change).once.with do |array, options|
531
- array.should =~ [path, "#{path}/a_directory"]
532
- end
533
- end
534
-
535
- touch 'a_file.rb'
536
- touch 'b_file.rb'
537
- mkdir 'a_directory'
538
- touch 'a_directory/a_file.rb'
539
- touch 'a_directory/b_file.rb'
540
-
541
- watch(listener, path) do
542
- rm 'b_file.rb'
543
- rm 'a_directory/a_file.rb'
544
- end
545
- end
546
- end
547
- end
548
-
549
- context 'single directory operations' do
550
- it 'detects a moved directory' do
551
- fixtures do |path|
552
- if options[:recursive]
553
- listener.should_receive(:on_change).once.with([path], :recursive => true)
554
- else
555
- listener.should_receive(:on_change).once.with([path], {})
556
- end
557
-
558
- mkdir 'a_directory'
559
- touch 'a_directory/a_file.rb'
560
- touch 'a_directory/b_file.rb'
561
-
562
- watch(listener, path) do
563
- mv 'a_directory', 'renamed'
564
- end
565
- end
566
- end
567
-
568
- it 'detects a removed directory' do
569
- fixtures do |path|
570
- if options[:recursive]
571
- listener.should_receive(:on_change).once.with([path], :recursive => true)
572
- else
573
- listener.should_receive(:on_change).once.with do |array, options|
574
- array.should =~ [path, "#{path}/a_directory"]
575
- end
576
- end
577
-
578
- mkdir 'a_directory'
579
- touch 'a_directory/a_file.rb'
580
- touch 'a_directory/b_file.rb'
581
-
582
- watch(listener, path) do
583
- rm_rf 'a_directory'
584
- end
585
- end
586
- end
587
- end
588
-
589
- context "paused adapter" do
590
- context 'when a file is created' do
591
- it "doesn't detects the added file" do
592
- fixtures do |path|
593
- watch(listener, path) do
594
- @adapter.paused = true
595
- touch 'new_file.rb'
596
- end
597
- @called.should be_nil
598
- end
599
- end
600
- end
601
- end
602
-
603
- context "when multiple directories are listened to" do
604
- context 'when files are added to one of multiple directories' do
605
- it 'detects added files' do
606
- fixtures(2) do |path1, path2|
607
- if options[:recursive]
608
- listener.should_receive(:on_change).once.with([path2], :recursive => true)
609
- else
610
- listener.should_receive(:on_change).once.with([path2], {})
611
- end
612
-
613
- watch(listener, path1, path2) do
614
- touch "#{path2}/new_file.rb"
615
- end
616
- end
617
- end
618
- end
619
-
620
- context 'when files are added to multiple directories' do
621
- it 'detects added files' do
622
- fixtures(2) do |path1, path2|
623
- if options[:recursive]
624
- listener.should_receive(:on_change).once.with do |directories, options|
625
- directories.should =~ [path1, path2] && options.should == {:recursive => true}
626
- end
627
- else
628
- listener.should_receive(:on_change).once.with do |directories, options|
629
- directories.should =~ [path1, path2] && options.should == {}
630
- end
631
- end
632
-
633
- watch(listener, path1, path2) do
634
- touch "#{path1}/new_file.rb"
635
- touch "#{path2}/new_file.rb"
636
- end
637
- end
638
- end
639
- end
640
-
641
- context 'given a new and an existing directory on multiple directories' do
642
- it 'detects the added file' do
643
- fixtures(2) do |path1, path2|
644
- if options[:recursive]
645
- listener.should_receive(:on_change).once.with do |directories, options|
646
- directories.should =~ [path1, path2] && options.should == {:recursive => true}
647
- end
648
- else
649
- listener.should_receive(:on_change).once.with do |directories, options|
650
- directories.should =~ [path2, "#{path2}/b_directory", "#{path1}/a_directory"] && options.should == {}
651
- end
652
- end
653
-
654
- mkdir "#{path1}/a_directory"
655
-
656
- watch(listener, path1, path2) do
657
- mkdir "#{path2}/b_directory"
658
- sleep 0.05
659
- touch "#{path1}/a_directory/new_file.rb"
660
- touch "#{path2}/b_directory/new_file.rb"
661
- end
662
- end
663
- end
664
- end
665
-
666
- context 'when a file is moved between the multiple watched directories' do
667
- it 'detects the movements of the file' do
668
- fixtures(3) do |path1, path2, path3|
669
- if options[:recursive]
670
- listener.should_receive(:on_change).once.with do |directories, options|
671
- directories.should =~ [path1, path2, path3] && options.should == {:recursive => true}
672
- end
673
- else
674
- listener.should_receive(:on_change).once.with do |directories, options|
675
- directories.should =~ ["#{path1}/from_directory", path2, "#{path3}/to_directory"] && options.should == {}
676
- end
677
- end
678
-
679
- mkdir "#{path1}/from_directory"
680
- touch "#{path1}/from_directory/move_me.txt"
681
- mkdir "#{path3}/to_directory"
682
-
683
- watch(listener, path1, path2, path3) do
684
- mv "#{path1}/from_directory/move_me.txt", "#{path2}/move_me.txt"
685
- mv "#{path2}/move_me.txt", "#{path3}/to_directory/move_me.txt"
686
- end
687
- end
688
- end
689
- end
690
-
691
- context 'when files are deleted from the multiple watched directories' do
692
- it 'detects the files removal' do
693
- fixtures(2) do |path1, path2|
694
- if options[:recursive]
695
- listener.should_receive(:on_change).once.with do |directories, options|
696
- directories.should =~ [path1, path2] && options.should == {:recursive => true}
697
- end
698
- else
699
- listener.should_receive(:on_change).once.with do |directories, options|
700
- directories.should =~ [path1, path2] && options.should == {}
701
- end
702
- end
703
-
704
- touch "#{path1}/unnecessary.txt"
705
- touch "#{path2}/unnecessary.txt"
706
-
707
- watch(listener, path1, path2) do
708
- rm "#{path1}/unnecessary.txt"
709
- rm "#{path2}/unnecessary.txt"
710
- end
711
- end
712
- end
713
- end
714
- end
715
-
716
- end