sass 3.1.16 → 3.1.17

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,3 @@
1
1
  module Listen
2
- VERSION = '0.4.1'
2
+ VERSION = '0.4.2'
3
3
  end
@@ -1,21 +1,34 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Listen::DirectoryRecord do
4
- let(:base_directory) { Dir.tmpdir }
4
+ let(:base_directory) { File.dirname(__FILE__) }
5
5
 
6
6
  subject { described_class.new(base_directory) }
7
7
 
8
+ describe '.generate_default_ignoring_patterns' do
9
+ it 'creates regexp patterns from the default ignored directories and extensions' do
10
+ described_class.generate_default_ignoring_patterns.should include(
11
+ %r{^(?:\.rbx|\.bundle|\.git|\.svn|log|tmp|vendor)/},
12
+ %r{(?:\.DS_Store)$}
13
+ )
14
+ end
15
+
16
+ it 'memoizes the generated results' do
17
+ described_class.generate_default_ignoring_patterns.should equal described_class.generate_default_ignoring_patterns
18
+ end
19
+ end
20
+
8
21
  describe '#initialize' do
9
22
  it 'sets the base directory' do
10
23
  subject.directory.should eq base_directory
11
24
  end
12
25
 
13
- it 'sets the default ignored paths' do
14
- subject.ignored_paths.should =~ described_class::DEFAULT_IGNORED_PATHS
26
+ it 'sets the default ignoring patterns' do
27
+ subject.ignoring_patterns.should =~ described_class.generate_default_ignoring_patterns
15
28
  end
16
29
 
17
- it 'sets the default filters' do
18
- subject.filters.should eq []
30
+ it 'sets the default filtering patterns' do
31
+ subject.filtering_patterns.should eq []
19
32
  end
20
33
 
21
34
  it 'raises an error when the passed path does not exist' do
@@ -29,39 +42,76 @@ describe Listen::DirectoryRecord do
29
42
 
30
43
  describe '#ignore' do
31
44
  it 'adds the passed paths to the list of ignoted paths in the record' do
32
- subject.ignore('.old', '.pid')
33
- subject.ignored_paths.should include('.old', '.pid')
45
+ subject.ignore(%r{^\.old/}, %r{\.pid$})
46
+ subject.ignoring_patterns.should include(%r{^\.old/}, %r{\.pid$})
34
47
  end
35
48
  end
36
49
 
37
50
  describe '#filter' do
38
51
  it 'adds the passed regexps to the list of filters that determine the stored paths' do
39
52
  subject.filter(%r{\.(?:jpe?g|gif|png)}, %r{\.(?:mp3|ogg|a3c)})
40
- subject.filters.should include(%r{\.(?:jpe?g|gif|png)}, %r{\.(?:mp3|ogg|a3c)})
53
+ subject.filtering_patterns.should include(%r{\.(?:jpe?g|gif|png)}, %r{\.(?:mp3|ogg|a3c)})
41
54
  end
42
55
  end
43
56
 
44
57
  describe '#ignored?' do
58
+ before { subject.stub(:relative_to_base) { |path| path } }
59
+
60
+ it 'tests paths relative to the base directory' do
61
+ subject.should_receive(:relative_to_base).with('file.txt')
62
+ subject.ignored?('file.txt')
63
+ end
64
+
65
+ it 'returns true when the passed path is a default ignored path' do
66
+ subject.ignored?('tmp/some_process.pid').should be_true
67
+ subject.ignored?('dir/.DS_Store').should be_true
68
+ subject.ignored?('.git/config').should be_true
69
+ end
70
+
71
+ it 'returns false when the passed path is not a default ignored path' do
72
+ subject.ignored?('nested/tmp/some_process.pid').should be_false
73
+ subject.ignored?('nested/.git').should be_false
74
+ subject.ignored?('dir/.DS_Store/file').should be_false
75
+ subject.ignored?('file.git').should be_false
76
+ end
77
+
45
78
  it 'returns true when the passed path is ignored' do
46
- subject.ignore('.pid')
47
- subject.ignored?('/tmp/some_process.pid').should be_true
79
+ subject.ignore(%r{\.pid$})
80
+ subject.ignored?('dir/some_process.pid').should be_true
48
81
  end
49
82
 
50
83
  it 'returns false when the passed path is not ignored' do
51
- subject.ignore('.pid')
52
- subject.ignored?('/tmp/some_file.txt').should be_false
84
+ subject.ignore(%r{\.pid$})
85
+ subject.ignored?('dir/some_file.txt').should be_false
53
86
  end
54
87
  end
55
88
 
56
- describe '#filterd?' do
57
- it 'returns true when the passed path is filtered' do
58
- subject.filter(%r{\.(?:jpe?g|gif|png)})
59
- subject.filtered?('/tmp/picture.jpeg').should be_true
89
+ describe '#filtered?' do
90
+ before { subject.stub(:relative_to_base) { |path| path } }
91
+
92
+ context 'when no filtering patterns are set' do
93
+ it 'returns true for any path' do
94
+ subject.filtered?('file.txt').should be_true
95
+ end
60
96
  end
61
97
 
62
- it 'returns false when the passed path is not filtered' do
63
- subject.filter(%r{\.(?:jpe?g|gif|png)})
64
- subject.filtered?('/tmp/song.mp3').should be_false
98
+ context 'when filtering patterns are set' do
99
+ before { subject.filter(%r{\.(?:jpe?g|gif|png)}) }
100
+
101
+ it 'tests paths relative to the base directory' do
102
+ subject.should_receive(:relative_to_base).with('file.txt')
103
+ subject.filtered?('file.txt')
104
+ end
105
+
106
+ it 'returns true when the passed path is filtered' do
107
+ subject.filter(%r{\.(?:jpe?g|gif|png)})
108
+ subject.filtered?('dir/picture.jpeg').should be_true
109
+ end
110
+
111
+ it 'returns false when the passed path is not filtered' do
112
+ subject.filter(%r{\.(?:jpe?g|gif|png)})
113
+ subject.filtered?('dir/song.mp3').should be_false
114
+ end
65
115
  end
66
116
  end
67
117
 
@@ -89,7 +139,7 @@ describe Listen::DirectoryRecord do
89
139
  touch 'ignored_directory/file.txt'
90
140
 
91
141
  record = described_class.new(path)
92
- record.ignore 'ignored_directory'
142
+ record.ignore %r{^ignored_directory/}
93
143
  record.build
94
144
 
95
145
  record.paths[path]['/a_ignored_directory'].should be_nil
@@ -103,7 +153,7 @@ describe Listen::DirectoryRecord do
103
153
  touch 'ignored_file.rb'
104
154
 
105
155
  record = described_class.new(path)
106
- record.ignore 'ignored_file.rb'
156
+ record.ignore %r{^ignored_file.rb$}
107
157
  record.build
108
158
 
109
159
  record.paths[path]['ignored_file.rb'].should be_nil
@@ -134,6 +184,17 @@ describe Listen::DirectoryRecord do
134
184
  end
135
185
  end
136
186
 
187
+ describe '#relative_to_base' do
188
+ it 'removes the path of the base-directory from the passed path' do
189
+ path = 'dir/to/app/file.rb'
190
+ subject.relative_to_base(File.join(base_directory, path)).should eq path
191
+ end
192
+
193
+ it 'returns nil when the passed path is not inside the base-directory' do
194
+ subject.relative_to_base('/tmp/some_random_path').should be_nil
195
+ end
196
+ end
197
+
137
198
  describe '#fetch_changes' do
138
199
  context 'with single file changes' do
139
200
  context 'when a file is created' do
@@ -211,7 +272,7 @@ describe Listen::DirectoryRecord do
211
272
  fixtures do |path|
212
273
  mkdir 'ignored_directory'
213
274
 
214
- modified, added, removed = changes(path, :ignore => 'ignored_directory', :recursive => true) do
275
+ modified, added, removed = changes(path, :ignore => %r{^ignored_directory/}, :recursive => true) do
215
276
  touch 'ignored_directory/new_file.rb'
216
277
  end
217
278
 
@@ -225,7 +286,7 @@ describe Listen::DirectoryRecord do
225
286
  fixtures do |path|
226
287
  mkdir 'ignored_directory'
227
288
 
228
- modified, added, removed = changes(path, :paths => ["#{path}/ignored_directory"], :ignore => 'ignored_directory', :recursive => true) do
289
+ modified, added, removed = changes(path, :paths => ["#{path}/ignored_directory"], :ignore => %r{^ignored_directory/}, :recursive => true) do
229
290
  touch 'ignored_directory/new_file.rb'
230
291
  end
231
292
 
@@ -253,6 +314,39 @@ describe Listen::DirectoryRecord do
253
314
  end
254
315
  end
255
316
  end
317
+
318
+ context 'given a directory with subdirectories' do
319
+ it 'detects the added file' do
320
+ fixtures do |path|
321
+ mkdir_p 'a_directory/subdirectory'
322
+
323
+ modified, added, removed = changes(path, :recursive => true) do
324
+ touch 'a_directory/subdirectory/new_file.rb'
325
+ end
326
+
327
+ added.should =~ %w(a_directory/subdirectory/new_file.rb)
328
+ modified.should be_empty
329
+ removed.should be_empty
330
+ end
331
+ end
332
+
333
+ context 'with an ignored directory' do
334
+ it "doesn't detect added files in neither the directory nor the subdirectory" do
335
+ fixtures do |path|
336
+ mkdir_p 'ignored_directory/subdirectory'
337
+
338
+ modified, added, removed = changes(path, :ignore => %r{^ignored_directory/}, :recursive => true) do
339
+ touch 'ignored_directory/new_file.rb'
340
+ touch 'ignored_directory/subdirectory/new_file.rb'
341
+ end
342
+
343
+ added.should be_empty
344
+ modified.should be_empty
345
+ removed.should be_empty
346
+ end
347
+ end
348
+ end
349
+ end
256
350
  end
257
351
 
258
352
  context 'when a file is modified' do
@@ -261,7 +355,7 @@ describe Listen::DirectoryRecord do
261
355
  touch 'existing_file.txt'
262
356
 
263
357
  modified, added, removed = changes(path) do
264
- sleep 1.5 # make a diffrence in the mtime of the file
358
+ sleep 1.5 # make a difference in the mtime of the file
265
359
  touch 'existing_file.txt'
266
360
  end
267
361
 
@@ -272,13 +366,12 @@ describe Listen::DirectoryRecord do
272
366
  end
273
367
 
274
368
  context 'during the same second' do
275
- before { ensure_same_second }
276
-
277
369
  it 'always detects the modified file the first time' do
278
370
  fixtures do |path|
279
371
  touch 'existing_file.txt'
280
372
 
281
373
  modified, added, removed = changes(path) do
374
+ small_time_difference
282
375
  touch 'existing_file.txt'
283
376
  end
284
377
 
@@ -306,7 +399,7 @@ describe Listen::DirectoryRecord do
306
399
  end
307
400
  end
308
401
 
309
- it "detects the modified file the second time if the content have changed" do
402
+ it 'detects the modified file the second time if the content have changed' do
310
403
  fixtures do |path|
311
404
  touch 'existing_file.txt'
312
405
 
@@ -315,6 +408,7 @@ describe Listen::DirectoryRecord do
315
408
  end
316
409
 
317
410
  modified, added, removed = changes(path, :use_last_record => true) do
411
+ small_time_difference
318
412
  open('existing_file.txt', 'w') { |f| f.write('foo') }
319
413
  end
320
414
 
@@ -331,6 +425,7 @@ describe Listen::DirectoryRecord do
331
425
  touch '.hidden'
332
426
 
333
427
  modified, added, removed = changes(path) do
428
+ small_time_difference
334
429
  touch '.hidden'
335
430
  end
336
431
 
@@ -345,7 +440,7 @@ describe Listen::DirectoryRecord do
345
440
  it 'does not detect the mode change' do
346
441
  fixtures do |path|
347
442
  touch 'run.rb'
348
- sleep 1.5 # make a diffrence in the mtime of the file
443
+ sleep 1.5 # make a difference in the mtime of the file
349
444
 
350
445
  modified, added, removed = changes(path) do
351
446
  chmod 0777, 'run.rb'
@@ -366,6 +461,7 @@ describe Listen::DirectoryRecord do
366
461
  touch 'a_directory/existing_file.txt'
367
462
 
368
463
  modified, added, removed = changes(path, :recursive => true) do
464
+ small_time_difference
369
465
  touch 'a_directory/existing_file.txt'
370
466
  end
371
467
 
@@ -383,6 +479,7 @@ describe Listen::DirectoryRecord do
383
479
  touch 'a_directory/existing_file.txt'
384
480
 
385
481
  modified, added, removed = changes(path, :recursive => false) do
482
+ small_time_difference
386
483
  touch 'a_directory/existing_file.txt'
387
484
  end
388
485
 
@@ -393,6 +490,43 @@ describe Listen::DirectoryRecord do
393
490
  end
394
491
  end
395
492
  end
493
+
494
+ context 'given a directory with subdirectories' do
495
+ it 'detects the modified file' do
496
+ fixtures do |path|
497
+ mkdir_p 'a_directory/subdirectory'
498
+ touch 'a_directory/subdirectory/existing_file.txt'
499
+
500
+ modified, added, removed = changes(path, :recursive => true) do
501
+ small_time_difference
502
+ touch 'a_directory/subdirectory/existing_file.txt'
503
+ end
504
+
505
+ added.should be_empty
506
+ modified.should =~ %w(a_directory/subdirectory/existing_file.txt)
507
+ removed.should be_empty
508
+ end
509
+ end
510
+
511
+ context 'with an ignored subdirectory' do
512
+ it "doesn't detect the modified files in neither the directory nor the subdirectory" do
513
+ fixtures do |path|
514
+ mkdir_p 'ignored_directory/subdirectory'
515
+ touch 'ignored_directory/existing_file.txt'
516
+ touch 'ignored_directory/subdirectory/existing_file.txt'
517
+
518
+ modified, added, removed = changes(path, :ignore => %r{^ignored_directory/}, :recursive => true) do
519
+ touch 'ignored_directory/existing_file.txt'
520
+ touch 'ignored_directory/subdirectory/existing_file.txt'
521
+ end
522
+
523
+ added.should be_empty
524
+ modified.should be_empty
525
+ removed.should be_empty
526
+ end
527
+ end
528
+ end
529
+ end
396
530
  end
397
531
 
398
532
  context 'when a file is moved' do
@@ -506,7 +640,43 @@ describe Listen::DirectoryRecord do
506
640
  end
507
641
  end
508
642
 
509
- context 'with all paths are passed as params' do
643
+ context 'given a directory with subdirectories' do
644
+ it 'detects a file movement between two subdirectories' do
645
+ fixtures do |path|
646
+ mkdir_p 'a_directory/subdirectory'
647
+ mkdir_p 'b_directory/subdirectory'
648
+ touch 'a_directory/subdirectory/move_me.txt'
649
+
650
+ modified, added, removed = changes(path, :recursive => true) do
651
+ mv 'a_directory/subdirectory/move_me.txt', 'b_directory/subdirectory'
652
+ end
653
+
654
+ added.should =~ %w(b_directory/subdirectory/move_me.txt)
655
+ modified.should be_empty
656
+ removed.should =~ %w(a_directory/subdirectory/move_me.txt)
657
+ end
658
+ end
659
+
660
+ context 'with an ignored subdirectory' do
661
+ it "doesn't detect the file movement between subdirectories" do
662
+ fixtures do |path|
663
+ mkdir_p 'a_ignored_directory/subdirectory'
664
+ mkdir_p 'b_ignored_directory/subdirectory'
665
+ touch 'a_ignored_directory/subdirectory/move_me.txt'
666
+
667
+ modified, added, removed = changes(path, :ignore => %r{^(?:a|b)_ignored_directory/}, :recursive => true) do
668
+ mv 'a_ignored_directory/subdirectory/move_me.txt', 'b_ignored_directory/subdirectory'
669
+ end
670
+
671
+ added.should be_empty
672
+ modified.should be_empty
673
+ removed.should be_empty
674
+ end
675
+ end
676
+ end
677
+ end
678
+
679
+ context 'with all paths passed as params' do
510
680
  it 'detects the file movement into the directory' do
511
681
  fixtures do |path|
512
682
  mkdir 'a_directory'
@@ -635,6 +805,42 @@ describe Listen::DirectoryRecord do
635
805
  end
636
806
  end
637
807
  end
808
+
809
+ context 'given a directory with subdirectories' do
810
+ it 'detects the file removal in subdirectories' do
811
+ fixtures do |path|
812
+ mkdir_p 'a_directory/subdirectory'
813
+ touch 'a_directory/subdirectory/do_not_use.rb'
814
+
815
+ modified, added, removed = changes(path, :recursive => true) do
816
+ rm 'a_directory/subdirectory/do_not_use.rb'
817
+ end
818
+
819
+ added.should be_empty
820
+ modified.should be_empty
821
+ removed.should =~ %w(a_directory/subdirectory/do_not_use.rb)
822
+ end
823
+ end
824
+
825
+ context 'with an ignored subdirectory' do
826
+ it "doesn't detect files removals in neither the directory nor its subdirectories" do
827
+ fixtures do |path|
828
+ mkdir_p 'ignored_directory/subdirectory'
829
+ touch 'ignored_directory/do_not_use.rb'
830
+ touch 'ignored_directory/subdirectory/do_not_use.rb'
831
+
832
+ modified, added, removed = changes(path, :ignore => %r{^ignored_directory/}, :recursive => true) do
833
+ rm 'ignored_directory/do_not_use.rb'
834
+ rm 'ignored_directory/subdirectory/do_not_use.rb'
835
+ end
836
+
837
+ added.should be_empty
838
+ modified.should be_empty
839
+ removed.should be_empty
840
+ end
841
+ end
842
+ end
843
+ end
638
844
  end
639
845
  end
640
846
 
@@ -662,9 +868,9 @@ describe Listen::DirectoryRecord do
662
868
  mkdir 'a_directory'
663
869
  touch 'a_directory/a_file.rb'
664
870
  touch 'a_directory/b_file.rb'
665
- sleep 1.5 # make files mtime old
666
871
 
667
872
  modified, added, removed = changes(path) do
873
+ small_time_difference
668
874
  touch 'b_file.rb'
669
875
  touch 'a_directory/a_file.rb'
670
876
  end
@@ -682,7 +888,6 @@ describe Listen::DirectoryRecord do
682
888
  mkdir 'a_directory'
683
889
  touch 'a_directory/a_file.rb'
684
890
  touch 'a_directory/b_file.rb'
685
- sleep 1.5 # make files mtime old
686
891
 
687
892
  modified, added, removed = changes(path) do
688
893
  rm 'b_file.rb'
@@ -751,16 +956,16 @@ describe Listen::DirectoryRecord do
751
956
  context 'with nested paths' do
752
957
  it 'detects removals without crashing - #18' do
753
958
  fixtures do |path|
754
- mkdir_p 'a_directory/b_directory'
755
- touch 'a_directory/b_directory/do_not_use.rb'
959
+ mkdir_p 'a_directory/subdirectory'
960
+ touch 'a_directory/subdirectory/do_not_use.rb'
756
961
 
757
- modified, added, removed = changes(path, :paths => [path, "#{path}/a_directory", "#{path}/b_directory"]) do
962
+ modified, added, removed = changes(path) do
758
963
  rm_r 'a_directory'
759
964
  end
760
965
 
761
966
  added.should be_empty
762
967
  modified.should be_empty
763
- removed.should =~ %w(a_directory/b_directory/do_not_use.rb)
968
+ removed.should =~ %w(a_directory/subdirectory/do_not_use.rb)
764
969
  end
765
970
  end
766
971
  end
@@ -790,6 +995,7 @@ describe Listen::DirectoryRecord do
790
995
  touch 'b_file.rb'
791
996
 
792
997
  modified, added, removed = changes(path, :relative_paths => false) do
998
+ small_time_difference
793
999
  rm 'a_file.rb'
794
1000
  touch 'b_file.rb'
795
1001
  touch 'c_file.rb'