sass 3.2.0.alpha.101 → 3.2.0.alpha.102
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.
- data/REVISION +1 -1
- data/Rakefile +2 -2
- data/VERSION +1 -1
- data/lib/sass/plugin/compiler.rb +25 -32
- data/lib/sass/plugin/listener.rb +59 -0
- data/lib/sass/script/lexer.rb +1 -1
- data/lib/sass/script/list.rb +1 -0
- data/test/sass/conversion_test.rb +10 -0
- data/test/sass/scss/css_test.rb +9 -0
- data/vendor/listen/CHANGELOG.md +72 -0
- data/vendor/listen/Gemfile +35 -0
- data/vendor/listen/Guardfile +8 -0
- data/vendor/listen/LICENSE +20 -0
- data/vendor/listen/README.md +297 -0
- data/vendor/listen/Rakefile +47 -0
- data/vendor/listen/Vagrantfile +96 -0
- data/vendor/listen/lib/listen.rb +38 -0
- data/vendor/listen/lib/listen/adapter.rb +159 -0
- data/vendor/listen/lib/listen/adapters/darwin.rb +84 -0
- data/vendor/listen/lib/listen/adapters/linux.rb +99 -0
- data/vendor/listen/lib/listen/adapters/polling.rb +66 -0
- data/vendor/listen/lib/listen/adapters/windows.rb +82 -0
- data/vendor/listen/lib/listen/directory_record.rb +257 -0
- data/vendor/listen/lib/listen/listener.rb +186 -0
- data/vendor/listen/lib/listen/multi_listener.rb +121 -0
- data/vendor/listen/lib/listen/turnstile.rb +28 -0
- data/vendor/listen/lib/listen/version.rb +3 -0
- data/vendor/listen/listen.gemspec +26 -0
- data/vendor/listen/spec/listen/adapter_spec.rb +142 -0
- data/vendor/listen/spec/listen/adapters/darwin_spec.rb +31 -0
- data/vendor/listen/spec/listen/adapters/linux_spec.rb +30 -0
- data/vendor/listen/spec/listen/adapters/polling_spec.rb +68 -0
- data/vendor/listen/spec/listen/adapters/windows_spec.rb +24 -0
- data/vendor/listen/spec/listen/directory_record_spec.rb +807 -0
- data/vendor/listen/spec/listen/listener_spec.rb +151 -0
- data/vendor/listen/spec/listen/multi_listener_spec.rb +151 -0
- data/vendor/listen/spec/listen/turnstile_spec.rb +56 -0
- data/vendor/listen/spec/listen_spec.rb +73 -0
- data/vendor/listen/spec/spec_helper.rb +16 -0
- data/vendor/listen/spec/support/adapter_helper.rb +538 -0
- data/vendor/listen/spec/support/directory_record_helper.rb +35 -0
- data/vendor/listen/spec/support/fixtures_helper.rb +29 -0
- data/vendor/listen/spec/support/listeners_helper.rb +133 -0
- data/vendor/listen/spec/support/platform_helper.rb +11 -0
- metadata +41 -5
| @@ -0,0 +1,151 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Listen::Listener do
         | 
| 4 | 
            +
              let(:adapter)           { mock(Listen::Adapter, :start => true).as_null_object }
         | 
| 5 | 
            +
              let(:watched_directory) { Dir.tmpdir }
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              subject { described_class.new(watched_directory) }
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              before do
         | 
| 10 | 
            +
                Listen::Adapter.stub(:select_and_initialize) { adapter }
         | 
| 11 | 
            +
                # Don't build a record of the files inside the base directory.
         | 
| 12 | 
            +
                subject.directory_record.stub(:build)
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              it_should_behave_like 'a listener to changes on a file-system'
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              describe '#initialize' do
         | 
| 18 | 
            +
                context 'with no options' do
         | 
| 19 | 
            +
                  it 'sets the directory' do
         | 
| 20 | 
            +
                    subject.directory.should eq watched_directory
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  it 'sets the option for using relative paths in the callback to the default one' do
         | 
| 24 | 
            +
                    subject.instance_variable_get(:@use_relative_paths).should eq described_class::DEFAULT_TO_RELATIVE_PATHS
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                context 'with custom options' do
         | 
| 29 | 
            +
                  subject { described_class.new(watched_directory, :ignore => '.ssh', :filter => [/.*\.rb/,/.*\.md/],
         | 
| 30 | 
            +
                                                :latency => 0.5, :force_polling => true, :relative_paths => true) }
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                  it 'passes the custom ignored paths to the directory record' do
         | 
| 33 | 
            +
                    subject.directory_record.ignored_paths.should =~ %w[.bundle .git .DS_Store log tmp vendor .ssh]
         | 
| 34 | 
            +
                  end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                  it 'passes the custom filters to the directory record' do
         | 
| 37 | 
            +
                    subject.directory_record.filters.should =~  [/.*\.rb/,/.*\.md/]
         | 
| 38 | 
            +
                  end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                  it 'sets the cutom option for using relative paths in the callback' do
         | 
| 41 | 
            +
                    subject.instance_variable_get(:@use_relative_paths).should be_true
         | 
| 42 | 
            +
                  end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                  it 'sets adapter_options' do
         | 
| 45 | 
            +
                    subject.instance_variable_get(:@adapter_options).should eq(:latency => 0.5, :force_polling => true)
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
              end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
              describe '#start' do
         | 
| 51 | 
            +
                it 'selects and initializes an adapter' do
         | 
| 52 | 
            +
                  Listen::Adapter.should_receive(:select_and_initialize).with(watched_directory, {}) { adapter }
         | 
| 53 | 
            +
                  subject.start
         | 
| 54 | 
            +
                end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                it 'builds the directory record' do
         | 
| 57 | 
            +
                  subject.directory_record.should_receive(:build)
         | 
| 58 | 
            +
                  subject.start
         | 
| 59 | 
            +
                end
         | 
| 60 | 
            +
              end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
              context 'with a started listener' do
         | 
| 63 | 
            +
                before do
         | 
| 64 | 
            +
                  subject.stub(:initialize_adapter) { adapter }
         | 
| 65 | 
            +
                  subject.start
         | 
| 66 | 
            +
                end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                describe '#unpause' do
         | 
| 69 | 
            +
                  it 'rebuilds the directory record' do
         | 
| 70 | 
            +
                    subject.directory_record.should_receive(:build)
         | 
| 71 | 
            +
                    subject.unpause
         | 
| 72 | 
            +
                  end
         | 
| 73 | 
            +
                end
         | 
| 74 | 
            +
              end
         | 
| 75 | 
            +
             | 
| 76 | 
            +
              describe '#ignore'do
         | 
| 77 | 
            +
                it 'delegates the work to the directory record' do
         | 
| 78 | 
            +
                  subject.directory_record.should_receive(:ignore).with 'some_directory'
         | 
| 79 | 
            +
                  subject.ignore 'some_directory'
         | 
| 80 | 
            +
                end
         | 
| 81 | 
            +
              end
         | 
| 82 | 
            +
             | 
| 83 | 
            +
              describe '#filter' do
         | 
| 84 | 
            +
                it 'delegates the work to the directory record' do
         | 
| 85 | 
            +
                  subject.directory_record.should_receive(:filter).with /\.txt$/
         | 
| 86 | 
            +
                  subject.filter /\.txt$/
         | 
| 87 | 
            +
                end
         | 
| 88 | 
            +
              end
         | 
| 89 | 
            +
             | 
| 90 | 
            +
             | 
| 91 | 
            +
              describe '#on_change' do
         | 
| 92 | 
            +
                let(:directories) { %w{dir1 dir2 dir3} }
         | 
| 93 | 
            +
                let(:changes)     { {:modified => [], :added => [], :removed => []} }
         | 
| 94 | 
            +
                let(:callback)    { Proc.new { @called = true } }
         | 
| 95 | 
            +
             | 
| 96 | 
            +
                before do
         | 
| 97 | 
            +
                  @called = false
         | 
| 98 | 
            +
                  subject.directory_record.stub(:fetch_changes => changes)
         | 
| 99 | 
            +
                end
         | 
| 100 | 
            +
             | 
| 101 | 
            +
                it 'fetches the changes of the directory record' do
         | 
| 102 | 
            +
                  subject.directory_record.should_receive(:fetch_changes).with(
         | 
| 103 | 
            +
                    directories, hash_including(:relative_paths => described_class::DEFAULT_TO_RELATIVE_PATHS)
         | 
| 104 | 
            +
                  )
         | 
| 105 | 
            +
                  subject.on_change(directories)
         | 
| 106 | 
            +
                end
         | 
| 107 | 
            +
             | 
| 108 | 
            +
                context 'with relative paths option set to true' do
         | 
| 109 | 
            +
                  subject { described_class.new(watched_directory, :relative_paths => true) }
         | 
| 110 | 
            +
             | 
| 111 | 
            +
                  it 'fetches the changes of the directory record' do
         | 
| 112 | 
            +
                    subject.directory_record.should_receive(:fetch_changes).with(directories, hash_including(:relative_paths => true))
         | 
| 113 | 
            +
                    subject.on_change(directories)
         | 
| 114 | 
            +
                  end
         | 
| 115 | 
            +
                end
         | 
| 116 | 
            +
             | 
| 117 | 
            +
                context 'with no changes to report' do
         | 
| 118 | 
            +
                  if RUBY_VERSION[/^1.8/]
         | 
| 119 | 
            +
                    it 'does not run the callback' do
         | 
| 120 | 
            +
                        subject.change(&callback)
         | 
| 121 | 
            +
                        subject.on_change(directories)
         | 
| 122 | 
            +
                        @called.should be_false
         | 
| 123 | 
            +
                    end
         | 
| 124 | 
            +
                  else
         | 
| 125 | 
            +
                    it 'does not run the callback' do
         | 
| 126 | 
            +
                      callback.should_not_receive(:call)
         | 
| 127 | 
            +
                      subject.change(&callback)
         | 
| 128 | 
            +
                      subject.on_change(directories)
         | 
| 129 | 
            +
                    end
         | 
| 130 | 
            +
                  end
         | 
| 131 | 
            +
                end
         | 
| 132 | 
            +
             | 
| 133 | 
            +
                context 'with changes to report' do
         | 
| 134 | 
            +
                  let(:changes)     { {:modified => %w{path1}, :added => [], :removed => %w{path2}} }
         | 
| 135 | 
            +
             | 
| 136 | 
            +
                  if RUBY_VERSION[/^1.8/]
         | 
| 137 | 
            +
                    it 'runs the callback passing it the changes' do
         | 
| 138 | 
            +
                      subject.change(&callback)
         | 
| 139 | 
            +
                      subject.on_change(directories)
         | 
| 140 | 
            +
                      @called.should be_true
         | 
| 141 | 
            +
                    end
         | 
| 142 | 
            +
                  else
         | 
| 143 | 
            +
                    it 'runs the callback passing it the changes' do
         | 
| 144 | 
            +
                      callback.should_receive(:call).with(changes[:modified], changes[:added], changes[:removed])
         | 
| 145 | 
            +
                      subject.change(&callback)
         | 
| 146 | 
            +
                      subject.on_change(directories)
         | 
| 147 | 
            +
                    end
         | 
| 148 | 
            +
                  end
         | 
| 149 | 
            +
                end
         | 
| 150 | 
            +
              end
         | 
| 151 | 
            +
            end
         | 
| @@ -0,0 +1,151 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Listen::MultiListener do
         | 
| 4 | 
            +
              let(:adapter)             { mock(Listen::Adapter, :start => true).as_null_object }
         | 
| 5 | 
            +
              let(:watched_directories) { [File.dirname(__FILE__), Dir.tmpdir] }
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              subject { described_class.new(*watched_directories) }
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              before do
         | 
| 10 | 
            +
                Listen::Adapter.stub(:select_and_initialize) { adapter }
         | 
| 11 | 
            +
                # Don't build a record of the files inside the base directory.
         | 
| 12 | 
            +
                Listen::DirectoryRecord.any_instance.stub(:build)
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              it_should_behave_like 'a listener to changes on a file-system'
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              describe '#initialize' do
         | 
| 18 | 
            +
                context 'with no options' do
         | 
| 19 | 
            +
                  it 'sets the directories' do
         | 
| 20 | 
            +
                    subject.directories.should =~ watched_directories
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                context 'with custom options' do
         | 
| 25 | 
            +
                  subject do
         | 
| 26 | 
            +
                    args = watched_directories << {:ignore => '.ssh', :filter => [/.*\.rb/,/.*\.md/], :latency => 0.5, :force_polling => true}
         | 
| 27 | 
            +
                    described_class.new(*args)
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                  it 'passes the custom ignored paths to each directory record' do
         | 
| 31 | 
            +
                    subject.directories_records.each do |r|
         | 
| 32 | 
            +
                      r.ignored_paths.should =~ %w[.bundle .git .DS_Store log tmp vendor .ssh]
         | 
| 33 | 
            +
                    end
         | 
| 34 | 
            +
                  end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                  it 'passes the custom filters to each directory record' do
         | 
| 37 | 
            +
                    subject.directories_records.each do |r|
         | 
| 38 | 
            +
                      r.filters.should =~  [/.*\.rb/,/.*\.md/]
         | 
| 39 | 
            +
                    end
         | 
| 40 | 
            +
                  end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  it 'sets adapter_options' do
         | 
| 43 | 
            +
                    subject.instance_variable_get(:@adapter_options).should eq(:latency => 0.5, :force_polling => true)
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
                end
         | 
| 46 | 
            +
              end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
              describe '#start' do
         | 
| 49 | 
            +
                it 'selects and initializes an adapter' do
         | 
| 50 | 
            +
                  Listen::Adapter.should_receive(:select_and_initialize).with(watched_directories, {}) { adapter }
         | 
| 51 | 
            +
                  subject.start
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                it 'builds all directories records' do
         | 
| 55 | 
            +
                  subject.directories_records.each do |r|
         | 
| 56 | 
            +
                    r.should_receive(:build)
         | 
| 57 | 
            +
                  end
         | 
| 58 | 
            +
                  subject.start
         | 
| 59 | 
            +
                end
         | 
| 60 | 
            +
              end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
              context 'with a started listener' do
         | 
| 63 | 
            +
                before do
         | 
| 64 | 
            +
                  subject.stub(:initialize_adapter) { adapter }
         | 
| 65 | 
            +
                  subject.start
         | 
| 66 | 
            +
                end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                describe '#unpause' do
         | 
| 69 | 
            +
                  it 'rebuilds all directories records' do
         | 
| 70 | 
            +
                    subject.directories_records.each do |r|
         | 
| 71 | 
            +
                      r.should_receive(:build)
         | 
| 72 | 
            +
                    end
         | 
| 73 | 
            +
                    subject.unpause
         | 
| 74 | 
            +
                  end
         | 
| 75 | 
            +
                end
         | 
| 76 | 
            +
              end
         | 
| 77 | 
            +
             | 
| 78 | 
            +
              describe '#ignore'do
         | 
| 79 | 
            +
                it 'delegates the work to each directory record' do
         | 
| 80 | 
            +
                  subject.directories_records.each do |r|
         | 
| 81 | 
            +
                    r.should_receive(:ignore).with 'some_directory'
         | 
| 82 | 
            +
                  end
         | 
| 83 | 
            +
                  subject.ignore 'some_directory'
         | 
| 84 | 
            +
                end
         | 
| 85 | 
            +
              end
         | 
| 86 | 
            +
             | 
| 87 | 
            +
              describe '#filter' do
         | 
| 88 | 
            +
                it 'delegates the work to each directory record' do
         | 
| 89 | 
            +
                  subject.directories_records.each do |r|
         | 
| 90 | 
            +
                    r.should_receive(:filter).with /\.txt$/
         | 
| 91 | 
            +
                  end
         | 
| 92 | 
            +
                  subject.filter /\.txt$/
         | 
| 93 | 
            +
                end
         | 
| 94 | 
            +
              end
         | 
| 95 | 
            +
             | 
| 96 | 
            +
              describe '#on_change' do
         | 
| 97 | 
            +
                let(:directories) { %w{dir1 dir2 dir3} }
         | 
| 98 | 
            +
                let(:changes)     { {:modified => [], :added => [], :removed => []} }
         | 
| 99 | 
            +
                let(:callback)    { Proc.new { @called = true } }
         | 
| 100 | 
            +
             | 
| 101 | 
            +
                before do
         | 
| 102 | 
            +
                  @called = false
         | 
| 103 | 
            +
                  subject.stub(:fetch_records_changes => changes)
         | 
| 104 | 
            +
                end
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                it 'fetches the changes of all directories records' do
         | 
| 107 | 
            +
                  subject.unstub(:fetch_records_changes)
         | 
| 108 | 
            +
             | 
| 109 | 
            +
                  subject.directories_records.each do |record|
         | 
| 110 | 
            +
                    record.should_receive(:fetch_changes).with(
         | 
| 111 | 
            +
                      directories, hash_including(:relative_paths => described_class::DEFAULT_TO_RELATIVE_PATHS)
         | 
| 112 | 
            +
                    ).and_return(changes)
         | 
| 113 | 
            +
                  end
         | 
| 114 | 
            +
                  subject.on_change(directories)
         | 
| 115 | 
            +
                end
         | 
| 116 | 
            +
             | 
| 117 | 
            +
                context 'with no changes to report' do
         | 
| 118 | 
            +
                  if RUBY_VERSION[/^1.8/]
         | 
| 119 | 
            +
                    it 'does not run the callback' do
         | 
| 120 | 
            +
                        subject.change(&callback)
         | 
| 121 | 
            +
                        subject.on_change(directories)
         | 
| 122 | 
            +
                        @called.should be_false
         | 
| 123 | 
            +
                    end
         | 
| 124 | 
            +
                  else
         | 
| 125 | 
            +
                    it 'does not run the callback' do
         | 
| 126 | 
            +
                      callback.should_not_receive(:call)
         | 
| 127 | 
            +
                      subject.change(&callback)
         | 
| 128 | 
            +
                      subject.on_change(directories)
         | 
| 129 | 
            +
                    end
         | 
| 130 | 
            +
                  end
         | 
| 131 | 
            +
                end
         | 
| 132 | 
            +
             | 
| 133 | 
            +
                context 'with changes to report' do
         | 
| 134 | 
            +
                  let(:changes)     { {:modified => %w{path1}, :added => [], :removed => %w{path2}} }
         | 
| 135 | 
            +
             | 
| 136 | 
            +
                  if RUBY_VERSION[/^1.8/]
         | 
| 137 | 
            +
                    it 'runs the callback passing it the changes' do
         | 
| 138 | 
            +
                      subject.change(&callback)
         | 
| 139 | 
            +
                      subject.on_change(directories)
         | 
| 140 | 
            +
                      @called.should be_true
         | 
| 141 | 
            +
                    end
         | 
| 142 | 
            +
                  else
         | 
| 143 | 
            +
                    it 'runs the callback passing it the changes' do
         | 
| 144 | 
            +
                      callback.should_receive(:call).with(changes[:modified], changes[:added], changes[:removed])
         | 
| 145 | 
            +
                      subject.change(&callback)
         | 
| 146 | 
            +
                      subject.on_change(directories)
         | 
| 147 | 
            +
                    end
         | 
| 148 | 
            +
                  end
         | 
| 149 | 
            +
                end
         | 
| 150 | 
            +
              end
         | 
| 151 | 
            +
            end
         | 
| @@ -0,0 +1,56 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            def run_in_two_threads(proc1, proc2)
         | 
| 4 | 
            +
              t1 = Thread.new &proc1
         | 
| 5 | 
            +
              sleep test_latency # t1 must run before t2
         | 
| 6 | 
            +
              t2 = Thread.new { proc2.call; Thread.kill t1 }
         | 
| 7 | 
            +
              t2.join(test_latency * 2)
         | 
| 8 | 
            +
            ensure
         | 
| 9 | 
            +
              Thread.kill t1 if t1
         | 
| 10 | 
            +
              Thread.kill t2 if t2
         | 
| 11 | 
            +
            end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            describe Listen::Turnstile do
         | 
| 14 | 
            +
              before { @called = false }
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              describe '#wait' do
         | 
| 17 | 
            +
                context 'without a signal' do
         | 
| 18 | 
            +
                  it 'blocks one thread indefinitely' do
         | 
| 19 | 
            +
                    run_in_two_threads lambda {
         | 
| 20 | 
            +
                      subject.wait
         | 
| 21 | 
            +
                      @called = true
         | 
| 22 | 
            +
                    }, lambda {
         | 
| 23 | 
            +
                      sleep test_latency
         | 
| 24 | 
            +
                    }
         | 
| 25 | 
            +
                    @called.should be_false
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                context 'with a signal' do
         | 
| 30 | 
            +
                  it 'blocks one thread until it recieves a signal from another thread' do
         | 
| 31 | 
            +
                    run_in_two_threads lambda {
         | 
| 32 | 
            +
                      subject.wait
         | 
| 33 | 
            +
                      @called = true
         | 
| 34 | 
            +
                    }, lambda {
         | 
| 35 | 
            +
                      subject.signal
         | 
| 36 | 
            +
                      sleep test_latency
         | 
| 37 | 
            +
                    }
         | 
| 38 | 
            +
                    @called.should be_true
         | 
| 39 | 
            +
                  end
         | 
| 40 | 
            +
                end
         | 
| 41 | 
            +
              end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
              describe '#signal' do
         | 
| 44 | 
            +
                context 'without a wait-call before' do
         | 
| 45 | 
            +
                  it 'does nothing' do
         | 
| 46 | 
            +
                    run_in_two_threads lambda {
         | 
| 47 | 
            +
                      subject.signal
         | 
| 48 | 
            +
                      @called = true
         | 
| 49 | 
            +
                    }, lambda {
         | 
| 50 | 
            +
                      sleep test_latency
         | 
| 51 | 
            +
                    }
         | 
| 52 | 
            +
                    @called.should be_true
         | 
| 53 | 
            +
                  end
         | 
| 54 | 
            +
                end
         | 
| 55 | 
            +
              end
         | 
| 56 | 
            +
            end
         | 
| @@ -0,0 +1,73 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Listen do
         | 
| 4 | 
            +
              describe '#to' do
         | 
| 5 | 
            +
                context 'with one path to listen to' do
         | 
| 6 | 
            +
                  let(:listener)       { mock(Listen::Listener) }
         | 
| 7 | 
            +
                  let(:listener_class) { Listen::Listener }
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  before { listener_class.stub(:new => listener) }
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  context 'without options' do
         | 
| 12 | 
            +
                    it 'creates an instance of Listner' do
         | 
| 13 | 
            +
                      listener_class.should_receive(:new).with('/path')
         | 
| 14 | 
            +
                      described_class.to('/path')
         | 
| 15 | 
            +
                    end
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  context 'with options' do
         | 
| 19 | 
            +
                    it 'creates an instance of Listner with the passed params' do
         | 
| 20 | 
            +
                      listener_class.should_receive(:new).with('/path', :filter => '**/*')
         | 
| 21 | 
            +
                      described_class.to('/path', :filter => '**/*')
         | 
| 22 | 
            +
                    end
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  context 'without a block' do
         | 
| 26 | 
            +
                    it 'returns the listener' do
         | 
| 27 | 
            +
                      described_class.to('/path', :filter => '**/*').should eq listener
         | 
| 28 | 
            +
                    end
         | 
| 29 | 
            +
                  end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                  context 'with a block' do
         | 
| 32 | 
            +
                    it 'starts the listner after creating it' do
         | 
| 33 | 
            +
                      listener.should_receive(:start)
         | 
| 34 | 
            +
                      described_class.to('/path', :filter => '**/*') { |modified, added, removed| }
         | 
| 35 | 
            +
                    end
         | 
| 36 | 
            +
                  end
         | 
| 37 | 
            +
                end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                context 'with multiple paths to listen to' do
         | 
| 40 | 
            +
                  let(:multi_listener)       { mock(Listen::MultiListener) }
         | 
| 41 | 
            +
                  let(:multi_listener_class) { Listen::MultiListener }
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                  before { multi_listener_class.stub(:new => multi_listener) }
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                  context 'without options' do
         | 
| 46 | 
            +
                    it 'creates an instance of MultiListner' do
         | 
| 47 | 
            +
                      multi_listener_class.should_receive(:new).with('path1', 'path2')
         | 
| 48 | 
            +
                      described_class.to('path1', 'path2')
         | 
| 49 | 
            +
                    end
         | 
| 50 | 
            +
                  end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                  context 'with options' do
         | 
| 53 | 
            +
                    it 'creates an instance of MultiListner with the passed params' do
         | 
| 54 | 
            +
                      multi_listener_class.should_receive(:new).with('path1', 'path2', :filter => '**/*')
         | 
| 55 | 
            +
                      described_class.to('path1', 'path2', :filter => '**/*')
         | 
| 56 | 
            +
                    end
         | 
| 57 | 
            +
                  end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                  context 'without a block' do
         | 
| 60 | 
            +
                    it 'returns a MultiListener instance created with the passed params' do
         | 
| 61 | 
            +
                      described_class.to('path1', 'path2', :filter => '**/*').should eq multi_listener
         | 
| 62 | 
            +
                    end
         | 
| 63 | 
            +
                  end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                  context 'with a block' do
         | 
| 66 | 
            +
                    it 'starts a MultiListener instance after creating it with the passed params' do
         | 
| 67 | 
            +
                      multi_listener.should_receive(:start)
         | 
| 68 | 
            +
                      described_class.to('path1', 'path2', :filter => '**/*') { |modified, added, removed| }
         | 
| 69 | 
            +
                    end
         | 
| 70 | 
            +
                  end
         | 
| 71 | 
            +
                end
         | 
| 72 | 
            +
              end
         | 
| 73 | 
            +
            end
         | 
| @@ -0,0 +1,16 @@ | |
| 1 | 
            +
            require 'listen'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            ENV["TEST_LATENCY"] ||= "0.1"
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
         | 
| 8 | 
            +
            RSpec.configure do |config|
         | 
| 9 | 
            +
              config.treat_symbols_as_metadata_keys_with_true_values = true
         | 
| 10 | 
            +
              config.run_all_when_everything_filtered = true
         | 
| 11 | 
            +
              config.filter_run :focus
         | 
| 12 | 
            +
            end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            def test_latency
         | 
| 15 | 
            +
              ENV["TEST_LATENCY"].to_f
         | 
| 16 | 
            +
            end
         |