guard-rubocop 1.0.1 → 1.4.0
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.
- checksums.yaml +5 -5
- data/.github/workflows/ci.yml +29 -0
- data/.gitignore +1 -0
- data/.rspec +1 -0
- data/.rubocop.yml +33 -4
- data/.rubocop_todo.yml +12 -0
- data/CHANGELOG.md +21 -0
- data/Gemfile +3 -3
- data/Guardfile +13 -9
- data/README.md +50 -7
- data/Rakefile +4 -17
- data/guard-rubocop.gemspec +16 -13
- data/lib/guard/rubocop.rb +10 -8
- data/lib/guard/rubocop/runner.rb +30 -14
- data/lib/guard/rubocop/templates/Guardfile +1 -1
- data/lib/guard/rubocop/version.rb +10 -12
- data/spec/guard/rubocop/runner_spec.rb +169 -79
- data/spec/guard/rubocop_spec.rb +29 -28
- data/spec/spec_helper.rb +21 -19
- data/spec/support/silence_output.rb +20 -7
- data/spec/support/simplecov.rb +19 -0
- metadata +43 -37
- data/.travis.yml +0 -8
- data/spec/.rubocop.yml +0 -5
| @@ -1,16 +1,14 @@ | |
| 1 | 
            -
            #  | 
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            -
             | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
               | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
                PATCH = 1
         | 
| 3 | 
            +
            # A workaround for declaring `class RuboCop`
         | 
| 4 | 
            +
            # before `class RuboCop < Guard` in rubocop.rb
         | 
| 5 | 
            +
            module GuardRuboCopVersion
         | 
| 6 | 
            +
              # http://semver.org/
         | 
| 7 | 
            +
              MAJOR = 1
         | 
| 8 | 
            +
              MINOR = 4
         | 
| 9 | 
            +
              PATCH = 0
         | 
| 11 10 |  | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
                end
         | 
| 11 | 
            +
              def self.to_s
         | 
| 12 | 
            +
                [MAJOR, MINOR, PATCH].join('.')
         | 
| 15 13 | 
             
              end
         | 
| 16 14 | 
             
            end
         | 
| @@ -1,9 +1,9 @@ | |
| 1 | 
            -
            #  | 
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            -
            require ' | 
| 3 | 
            +
            require 'launchy'
         | 
| 4 4 |  | 
| 5 | 
            -
            describe Guard:: | 
| 6 | 
            -
              subject(:runner) { Guard:: | 
| 5 | 
            +
            RSpec.describe Guard::RuboCop::Runner do
         | 
| 6 | 
            +
              subject(:runner) { Guard::RuboCop::Runner.new(options) }
         | 
| 7 7 | 
             
              let(:options) { {} }
         | 
| 8 8 |  | 
| 9 9 | 
             
              describe '#run' do
         | 
| @@ -25,14 +25,14 @@ describe Guard::Rubocop::Runner do | |
| 25 25 | 
             
                  before do
         | 
| 26 26 | 
             
                    allow(runner).to receive(:system).and_return(true)
         | 
| 27 27 | 
             
                  end
         | 
| 28 | 
            -
                  it { should  | 
| 28 | 
            +
                  it { should be_truthy }
         | 
| 29 29 | 
             
                end
         | 
| 30 30 |  | 
| 31 31 | 
             
                context 'when RuboCop exited with non 0 status' do
         | 
| 32 32 | 
             
                  before do
         | 
| 33 33 | 
             
                    allow(runner).to receive(:system).and_return(false)
         | 
| 34 34 | 
             
                  end
         | 
| 35 | 
            -
                  it { should  | 
| 35 | 
            +
                  it { should be_falsey }
         | 
| 36 36 | 
             
                end
         | 
| 37 37 |  | 
| 38 38 | 
             
                shared_examples 'notifies', :notifies do
         | 
| @@ -77,56 +77,95 @@ describe Guard::Rubocop::Runner do | |
| 77 77 |  | 
| 78 78 | 
             
                context 'when :notification option is true' do
         | 
| 79 79 | 
             
                  let(:options) { { notification: true } }
         | 
| 80 | 
            -
                  include_examples 'notification',  | 
| 80 | 
            +
                  include_examples 'notification', passed: true, failed: true
         | 
| 81 81 | 
             
                end
         | 
| 82 82 |  | 
| 83 83 | 
             
                context 'when :notification option is :failed' do
         | 
| 84 84 | 
             
                  let(:options) { { notification: :failed } }
         | 
| 85 | 
            -
                  include_examples 'notification',  | 
| 85 | 
            +
                  include_examples 'notification', passed: false, failed: true
         | 
| 86 86 | 
             
                end
         | 
| 87 87 |  | 
| 88 88 | 
             
                context 'when :notification option is false' do
         | 
| 89 89 | 
             
                  let(:options) { { notification: false } }
         | 
| 90 | 
            -
                  include_examples 'notification',  | 
| 90 | 
            +
                  include_examples 'notification', passed: false, failed: false
         | 
| 91 | 
            +
                end
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                context 'when :launchy option is present' do
         | 
| 94 | 
            +
                  let(:options) { { launchy: 'launchy_path' } }
         | 
| 95 | 
            +
             | 
| 96 | 
            +
                  before do
         | 
| 97 | 
            +
                    allow(File).to receive(:exist?).with('launchy_path').and_return(true)
         | 
| 98 | 
            +
                  end
         | 
| 99 | 
            +
             | 
| 100 | 
            +
                  it 'opens Launchy' do
         | 
| 101 | 
            +
                    expect(Launchy).to receive(:open).with('launchy_path')
         | 
| 102 | 
            +
                    runner.run(paths)
         | 
| 103 | 
            +
                  end
         | 
| 91 104 | 
             
                end
         | 
| 92 105 | 
             
              end
         | 
| 93 106 |  | 
| 94 107 | 
             
              describe '#build_command' do
         | 
| 95 108 | 
             
                subject(:build_command) { runner.build_command(paths) }
         | 
| 96 | 
            -
                let(:options) { { cli: %w | 
| 97 | 
            -
                let(:paths) { %w | 
| 109 | 
            +
                let(:options) { { cli: %w[--debug --rails] } }
         | 
| 110 | 
            +
                let(:paths) { %w[file1.rb file2.rb] }
         | 
| 98 111 |  | 
| 99 | 
            -
                context 'when : | 
| 100 | 
            -
                   | 
| 112 | 
            +
                context 'when :hide_stdout is not set' do
         | 
| 113 | 
            +
                  context 'and :cli option includes formatter for console' do
         | 
| 114 | 
            +
                    before { options[:cli] = %w[--format simple] }
         | 
| 101 115 |  | 
| 102 | 
            -
             | 
| 103 | 
            -
             | 
| 116 | 
            +
                    it 'does not add args for the default formatter for console' do
         | 
| 117 | 
            +
                      expect(build_command[0..2]).not_to eq(%w[rubocop --format progress])
         | 
| 118 | 
            +
                    end
         | 
| 119 | 
            +
                  end
         | 
| 120 | 
            +
             | 
| 121 | 
            +
                  context 'and :cli option does not include formatter for console' do
         | 
| 122 | 
            +
                    before { options[:cli] = %w[--format simple --out simple.txt] }
         | 
| 123 | 
            +
             | 
| 124 | 
            +
                    it 'adds args for the default formatter for console' do
         | 
| 125 | 
            +
                      expect(build_command[0..2]).to eq(%w[rubocop --format progress])
         | 
| 126 | 
            +
                    end
         | 
| 104 127 | 
             
                  end
         | 
| 105 128 | 
             
                end
         | 
| 106 129 |  | 
| 107 | 
            -
                context 'when : | 
| 108 | 
            -
                   | 
| 130 | 
            +
                context 'when :hide_stdout is set' do
         | 
| 131 | 
            +
                  before { options[:hide_stdout] = true }
         | 
| 132 | 
            +
             | 
| 133 | 
            +
                  context 'and :cli option includes formatter for console' do
         | 
| 134 | 
            +
                    before { options[:cli] = %w[--format simple] }
         | 
| 135 | 
            +
             | 
| 136 | 
            +
                    it 'does not add args for the default formatter for console' do
         | 
| 137 | 
            +
                      expect(build_command[0..2]).not_to eq(%w[rubocop --format progress])
         | 
| 138 | 
            +
                    end
         | 
| 139 | 
            +
                  end
         | 
| 140 | 
            +
             | 
| 141 | 
            +
                  context 'and :cli option does not include formatter for console' do
         | 
| 142 | 
            +
                    before { options[:cli] = %w[--format simple --out simple.txt] }
         | 
| 109 143 |  | 
| 110 | 
            -
             | 
| 111 | 
            -
             | 
| 144 | 
            +
                    it 'does not add args for the default formatter for console' do
         | 
| 145 | 
            +
                      expect(build_command[0..2]).not_to eq(%w[rubocop --format progress])
         | 
| 146 | 
            +
                    end
         | 
| 112 147 | 
             
                  end
         | 
| 113 148 | 
             
                end
         | 
| 114 149 |  | 
| 115 | 
            -
                it 'adds args for JSON formatter | 
| 116 | 
            -
                  expect(build_command[3..4]).to eq(%w | 
| 150 | 
            +
                it 'adds args for JSON formatter' do
         | 
| 151 | 
            +
                  expect(build_command[3..4]).to eq(%w[--format json])
         | 
| 117 152 | 
             
                end
         | 
| 118 153 |  | 
| 119 | 
            -
                it 'adds args for output file path of JSON formatter | 
| 154 | 
            +
                it 'adds args for output file path of JSON formatter' do
         | 
| 120 155 | 
             
                  expect(build_command[5]).to eq('--out')
         | 
| 121 156 | 
             
                  expect(build_command[6]).not_to be_empty
         | 
| 122 157 | 
             
                end
         | 
| 123 158 |  | 
| 159 | 
            +
                it 'adds --force-exclusion option' do
         | 
| 160 | 
            +
                  expect(build_command[7]).to eq('--force-exclusion')
         | 
| 161 | 
            +
                end
         | 
| 162 | 
            +
             | 
| 124 163 | 
             
                it 'adds args specified by user' do
         | 
| 125 | 
            -
                  expect(build_command[ | 
| 164 | 
            +
                  expect(build_command[8..9]).to eq(%w[--debug --rails])
         | 
| 126 165 | 
             
                end
         | 
| 127 166 |  | 
| 128 167 | 
             
                it 'adds the passed paths' do
         | 
| 129 | 
            -
                  expect(build_command[ | 
| 168 | 
            +
                  expect(build_command[10..-1]).to eq(%w[file1.rb file2.rb])
         | 
| 130 169 | 
             
                end
         | 
| 131 170 | 
             
              end
         | 
| 132 171 |  | 
| @@ -159,7 +198,7 @@ describe Guard::Rubocop::Runner do | |
| 159 198 | 
             
                  let(:options) { { cli: { key: 'value' } } }
         | 
| 160 199 |  | 
| 161 200 | 
             
                  it 'raises error' do
         | 
| 162 | 
            -
                    expect { runner.args_specified_by_user }.to raise_error
         | 
| 201 | 
            +
                    expect { runner.args_specified_by_user }.to raise_error(ArgumentError)
         | 
| 163 202 | 
             
                  end
         | 
| 164 203 | 
             
                end
         | 
| 165 204 | 
             
              end
         | 
| @@ -169,86 +208,86 @@ describe Guard::Rubocop::Runner do | |
| 169 208 |  | 
| 170 209 | 
             
                context 'when the passed args include a -f/--format' do
         | 
| 171 210 | 
             
                  context 'but does not include an -o/--output' do
         | 
| 172 | 
            -
                    let(:args) { %w | 
| 211 | 
            +
                    let(:args) { %w[--format simple --debug] }
         | 
| 173 212 |  | 
| 174 213 | 
             
                    it 'returns true' do
         | 
| 175 | 
            -
                      expect(include_formatter_for_console?).to  | 
| 214 | 
            +
                      expect(include_formatter_for_console?).to be_truthy
         | 
| 176 215 | 
             
                    end
         | 
| 177 216 | 
             
                  end
         | 
| 178 217 |  | 
| 179 218 | 
             
                  context 'and include an -o/--output just after the -f/--format' do
         | 
| 180 | 
            -
                    let(:args) { %w | 
| 219 | 
            +
                    let(:args) { %w[--format simple --out simple.txt] }
         | 
| 181 220 |  | 
| 182 221 | 
             
                    it 'returns false' do
         | 
| 183 | 
            -
                      expect(include_formatter_for_console?).to  | 
| 222 | 
            +
                      expect(include_formatter_for_console?).to be_falsey
         | 
| 184 223 | 
             
                    end
         | 
| 185 224 | 
             
                  end
         | 
| 186 225 |  | 
| 187 226 | 
             
                  context 'and include an -o/--output after the -f/--format across another arg' do
         | 
| 188 | 
            -
                    let(:args) { %w | 
| 227 | 
            +
                    let(:args) { %w[--format simple --debug --out simple.txt] }
         | 
| 189 228 |  | 
| 190 229 | 
             
                    it 'returns false' do
         | 
| 191 | 
            -
                      expect(include_formatter_for_console?).to  | 
| 230 | 
            +
                      expect(include_formatter_for_console?).to be_falsey
         | 
| 192 231 | 
             
                    end
         | 
| 193 232 | 
             
                  end
         | 
| 194 233 | 
             
                end
         | 
| 195 234 |  | 
| 196 235 | 
             
                context 'when the passed args include a -f with its arg without separator' do
         | 
| 197 236 | 
             
                  context 'but does not include an -o/--output' do
         | 
| 198 | 
            -
                    let(:args) { %w | 
| 237 | 
            +
                    let(:args) { %w[-fs --debug] }
         | 
| 199 238 |  | 
| 200 239 | 
             
                    it 'returns true' do
         | 
| 201 | 
            -
                      expect(include_formatter_for_console?).to  | 
| 240 | 
            +
                      expect(include_formatter_for_console?).to be_truthy
         | 
| 202 241 | 
             
                    end
         | 
| 203 242 | 
             
                  end
         | 
| 204 243 |  | 
| 205 244 | 
             
                  context 'and include an -o with its arg without separator just after the -f/--format' do
         | 
| 206 | 
            -
                    let(:args) { %w | 
| 245 | 
            +
                    let(:args) { %w[-fs -osimple.txt] }
         | 
| 207 246 |  | 
| 208 247 | 
             
                    it 'returns false' do
         | 
| 209 | 
            -
                      expect(include_formatter_for_console?).to  | 
| 248 | 
            +
                      expect(include_formatter_for_console?).to be_falsey
         | 
| 210 249 | 
             
                    end
         | 
| 211 250 | 
             
                  end
         | 
| 212 251 | 
             
                end
         | 
| 213 252 |  | 
| 214 253 | 
             
                context 'when the passed args include multiple -f/--format' do
         | 
| 215 254 | 
             
                  context 'and all -f/--format have associated -o/--out' do
         | 
| 216 | 
            -
                    let(:args) { %w | 
| 255 | 
            +
                    let(:args) { %w[--format simple --out simple.txt --format emacs --out emacs.txt] }
         | 
| 217 256 |  | 
| 218 257 | 
             
                    it 'returns false' do
         | 
| 219 | 
            -
                      expect(include_formatter_for_console?).to  | 
| 258 | 
            +
                      expect(include_formatter_for_console?).to be_falsey
         | 
| 220 259 | 
             
                    end
         | 
| 221 260 | 
             
                  end
         | 
| 222 261 |  | 
| 223 262 | 
             
                  context 'and any -f/--format has associated -o/--out' do
         | 
| 224 | 
            -
                    let(:args) { %w | 
| 263 | 
            +
                    let(:args) { %w[--format simple --format emacs --out emacs.txt] }
         | 
| 225 264 |  | 
| 226 265 | 
             
                    it 'returns true' do
         | 
| 227 | 
            -
                      expect(include_formatter_for_console?).to  | 
| 266 | 
            +
                      expect(include_formatter_for_console?).to be_truthy
         | 
| 228 267 | 
             
                    end
         | 
| 229 268 | 
             
                  end
         | 
| 230 269 |  | 
| 231 270 | 
             
                  context 'and no -f/--format has associated -o/--out' do
         | 
| 232 | 
            -
                    let(:args) { %w | 
| 271 | 
            +
                    let(:args) { %w[--format simple --format emacs] }
         | 
| 233 272 |  | 
| 234 273 | 
             
                    it 'returns true' do
         | 
| 235 | 
            -
                      expect(include_formatter_for_console?).to  | 
| 274 | 
            +
                      expect(include_formatter_for_console?).to be_truthy
         | 
| 236 275 | 
             
                    end
         | 
| 237 276 | 
             
                  end
         | 
| 238 277 | 
             
                end
         | 
| 239 278 |  | 
| 240 279 | 
             
                context 'when the passed args do not include -f/--format' do
         | 
| 241 | 
            -
                  let(:args) { %w | 
| 280 | 
            +
                  let(:args) { %w[--debug] }
         | 
| 242 281 |  | 
| 243 282 | 
             
                  it 'returns false' do
         | 
| 244 | 
            -
                    expect(include_formatter_for_console?).to  | 
| 283 | 
            +
                    expect(include_formatter_for_console?).to be_falsey
         | 
| 245 284 | 
             
                  end
         | 
| 246 285 | 
             
                end
         | 
| 247 286 | 
             
              end
         | 
| 248 287 |  | 
| 249 288 | 
             
              describe '#json_file_path' do
         | 
| 250 289 | 
             
                it 'is not world readable' do
         | 
| 251 | 
            -
                  expect(File.world_readable?(runner.json_file_path)).to  | 
| 290 | 
            +
                  expect(File.world_readable?(runner.json_file_path)).to be_falsey
         | 
| 252 291 | 
             
                end
         | 
| 253 292 | 
             
              end
         | 
| 254 293 |  | 
| @@ -265,10 +304,10 @@ describe Guard::Rubocop::Runner do | |
| 265 304 | 
             
                      },
         | 
| 266 305 | 
             
                      "files": [{
         | 
| 267 306 | 
             
                          "path": "lib/foo.rb",
         | 
| 268 | 
            -
                          " | 
| 307 | 
            +
                          "offenses": []
         | 
| 269 308 | 
             
                        }, {
         | 
| 270 309 | 
             
                          "path": "lib/bar.rb",
         | 
| 271 | 
            -
                          " | 
| 310 | 
            +
                          "offenses": [{
         | 
| 272 311 | 
             
                              "severity": "convention",
         | 
| 273 312 | 
             
                              "message": "Line is too long. [81/79]",
         | 
| 274 313 | 
             
                              "cop_name": "LineLength",
         | 
| @@ -289,7 +328,7 @@ describe Guard::Rubocop::Runner do | |
| 289 328 | 
             
                        }
         | 
| 290 329 | 
             
                      ],
         | 
| 291 330 | 
             
                      "summary": {
         | 
| 292 | 
            -
                        " | 
| 331 | 
            +
                        "offense_count": 2,
         | 
| 293 332 | 
             
                        "target_file_count": 2,
         | 
| 294 333 | 
             
                        "inspected_file_count": 2
         | 
| 295 334 | 
             
                      }
         | 
| @@ -301,32 +340,30 @@ describe Guard::Rubocop::Runner do | |
| 301 340 |  | 
| 302 341 | 
             
              describe '#result', :json_file do
         | 
| 303 342 | 
             
                it 'parses JSON file' do
         | 
| 304 | 
            -
                  expect(runner.result[:summary][: | 
| 343 | 
            +
                  expect(runner.result[:summary][:offense_count]).to eq(2)
         | 
| 305 344 | 
             
                end
         | 
| 306 345 | 
             
              end
         | 
| 307 346 |  | 
| 308 347 | 
             
              describe '#notify' do
         | 
| 309 348 | 
             
                before do
         | 
| 310 349 | 
             
                  allow(runner).to receive(:result).and_return(
         | 
| 311 | 
            -
                    {
         | 
| 312 | 
            -
                       | 
| 313 | 
            -
             | 
| 314 | 
            -
             | 
| 315 | 
            -
                        inspected_file_count: 2
         | 
| 316 | 
            -
                      }
         | 
| 350 | 
            +
                    summary: {
         | 
| 351 | 
            +
                      offense_count: 4,
         | 
| 352 | 
            +
                      target_file_count: 3,
         | 
| 353 | 
            +
                      inspected_file_count: 2
         | 
| 317 354 | 
             
                    }
         | 
| 318 355 | 
             
                  )
         | 
| 319 356 | 
             
                end
         | 
| 320 357 |  | 
| 321 358 | 
             
                it 'notifies summary' do
         | 
| 322 | 
            -
                  expect(Guard::Notifier).to receive(:notify) do |message,  | 
| 323 | 
            -
                    expect(message).to eq('2 files inspected, 4  | 
| 359 | 
            +
                  expect(Guard::Notifier).to receive(:notify) do |message, _options|
         | 
| 360 | 
            +
                    expect(message).to eq('2 files inspected, 4 offenses detected')
         | 
| 324 361 | 
             
                  end
         | 
| 325 362 | 
             
                  runner.notify(true)
         | 
| 326 363 | 
             
                end
         | 
| 327 364 |  | 
| 328 365 | 
             
                it 'notifies with title "RuboCop results"' do
         | 
| 329 | 
            -
                  expect(Guard::Notifier).to receive(:notify) do | | 
| 366 | 
            +
                  expect(Guard::Notifier).to receive(:notify) do |_message, options|
         | 
| 330 367 | 
             
                    expect(options[:title]).to eq('RuboCop results')
         | 
| 331 368 | 
             
                  end
         | 
| 332 369 | 
             
                  runner.notify(true)
         | 
| @@ -334,7 +371,7 @@ describe Guard::Rubocop::Runner do | |
| 334 371 |  | 
| 335 372 | 
             
                context 'when passed' do
         | 
| 336 373 | 
             
                  it 'shows success image' do
         | 
| 337 | 
            -
                    expect(Guard::Notifier).to receive(:notify) do | | 
| 374 | 
            +
                    expect(Guard::Notifier).to receive(:notify) do |_message, options|
         | 
| 338 375 | 
             
                      expect(options[:image]).to eq(:success)
         | 
| 339 376 | 
             
                    end
         | 
| 340 377 | 
             
                    runner.notify(true)
         | 
| @@ -343,7 +380,7 @@ describe Guard::Rubocop::Runner do | |
| 343 380 |  | 
| 344 381 | 
             
                context 'when failed' do
         | 
| 345 382 | 
             
                  it 'shows failed image' do
         | 
| 346 | 
            -
                    expect(Guard::Notifier).to receive(:notify) do | | 
| 383 | 
            +
                    expect(Guard::Notifier).to receive(:notify) do |_message, options|
         | 
| 347 384 | 
             
                      expect(options[:image]).to eq(:failed)
         | 
| 348 385 | 
             
                    end
         | 
| 349 386 | 
             
                    runner.notify(false)
         | 
| @@ -354,19 +391,17 @@ describe Guard::Rubocop::Runner do | |
| 354 391 | 
             
              describe '#summary_text' do
         | 
| 355 392 | 
             
                before do
         | 
| 356 393 | 
             
                  allow(runner).to receive(:result).and_return(
         | 
| 357 | 
            -
                    {
         | 
| 358 | 
            -
                       | 
| 359 | 
            -
             | 
| 360 | 
            -
             | 
| 361 | 
            -
                        inspected_file_count: inspected_file_count
         | 
| 362 | 
            -
                      }
         | 
| 394 | 
            +
                    summary: {
         | 
| 395 | 
            +
                      offense_count: offense_count,
         | 
| 396 | 
            +
                      target_file_count: target_file_count,
         | 
| 397 | 
            +
                      inspected_file_count: inspected_file_count
         | 
| 363 398 | 
             
                    }
         | 
| 364 399 | 
             
                  )
         | 
| 365 400 | 
             
                end
         | 
| 366 401 |  | 
| 367 402 | 
             
                subject(:summary_text) { runner.summary_text }
         | 
| 368 403 |  | 
| 369 | 
            -
                let(: | 
| 404 | 
            +
                let(:offense_count)        { 0 }
         | 
| 370 405 | 
             
                let(:target_file_count)    { 0 }
         | 
| 371 406 | 
             
                let(:inspected_file_count) { 0 }
         | 
| 372 407 |  | 
| @@ -391,31 +426,86 @@ describe Guard::Rubocop::Runner do | |
| 391 426 | 
             
                  end
         | 
| 392 427 | 
             
                end
         | 
| 393 428 |  | 
| 394 | 
            -
                context 'when no  | 
| 395 | 
            -
                  let(: | 
| 396 | 
            -
                  it 'includes "no  | 
| 397 | 
            -
                    expect(summary_text).to include 'no  | 
| 429 | 
            +
                context 'when no offenses are detected' do
         | 
| 430 | 
            +
                  let(:offense_count) { 0 }
         | 
| 431 | 
            +
                  it 'includes "no offenses"' do
         | 
| 432 | 
            +
                    expect(summary_text).to include 'no offenses'
         | 
| 398 433 | 
             
                  end
         | 
| 399 434 | 
             
                end
         | 
| 400 435 |  | 
| 401 | 
            -
                context 'when an  | 
| 402 | 
            -
                  let(: | 
| 403 | 
            -
                  it 'includes "1  | 
| 404 | 
            -
                    expect(summary_text).to include '1  | 
| 436 | 
            +
                context 'when an offense is detected' do
         | 
| 437 | 
            +
                  let(:offense_count) { 1 }
         | 
| 438 | 
            +
                  it 'includes "1 offense"' do
         | 
| 439 | 
            +
                    expect(summary_text).to include '1 offense'
         | 
| 405 440 | 
             
                  end
         | 
| 406 441 | 
             
                end
         | 
| 407 442 |  | 
| 408 | 
            -
                context 'when 2  | 
| 409 | 
            -
                  let(: | 
| 410 | 
            -
                  it 'includes "2  | 
| 411 | 
            -
                    expect(summary_text).to include '2  | 
| 443 | 
            +
                context 'when 2 offenses are detected' do
         | 
| 444 | 
            +
                  let(:offense_count) { 2 }
         | 
| 445 | 
            +
                  it 'includes "2 offenses"' do
         | 
| 446 | 
            +
                    expect(summary_text).to include '2 offenses'
         | 
| 447 | 
            +
                  end
         | 
| 448 | 
            +
                end
         | 
| 449 | 
            +
             | 
| 450 | 
            +
                context 'with spelling "offence" in old RuboCop' do
         | 
| 451 | 
            +
                  before do
         | 
| 452 | 
            +
                    allow(runner).to receive(:result).and_return(
         | 
| 453 | 
            +
                      summary: {
         | 
| 454 | 
            +
                        offence_count: 2,
         | 
| 455 | 
            +
                        target_file_count: 1,
         | 
| 456 | 
            +
                        inspected_file_count: 1
         | 
| 457 | 
            +
                      }
         | 
| 458 | 
            +
                    )
         | 
| 459 | 
            +
                  end
         | 
| 460 | 
            +
             | 
| 461 | 
            +
                  it 'handles the spelling' do
         | 
| 462 | 
            +
                    expect(summary_text).to include '2 offenses'
         | 
| 412 463 | 
             
                  end
         | 
| 413 464 | 
             
                end
         | 
| 414 465 | 
             
              end
         | 
| 415 466 |  | 
| 416 467 | 
             
              describe '#failed_paths', :json_file do
         | 
| 417 | 
            -
                it 'returns file paths which have  | 
| 468 | 
            +
                it 'returns file paths which have offenses' do
         | 
| 418 469 | 
             
                  expect(runner.failed_paths).to eq(['lib/bar.rb'])
         | 
| 419 470 | 
             
                end
         | 
| 471 | 
            +
             | 
| 472 | 
            +
                context 'with spelling "offence" in old RuboCop' do
         | 
| 473 | 
            +
                  before do
         | 
| 474 | 
            +
                    json = <<-END
         | 
| 475 | 
            +
                      {
         | 
| 476 | 
            +
                        "files": [{
         | 
| 477 | 
            +
                            "path": "lib/foo.rb",
         | 
| 478 | 
            +
                            "offences": []
         | 
| 479 | 
            +
                          }, {
         | 
| 480 | 
            +
                            "path": "lib/bar.rb",
         | 
| 481 | 
            +
                            "offences": [{
         | 
| 482 | 
            +
                                "severity": "convention",
         | 
| 483 | 
            +
                                "message": "Line is too long. [81/79]",
         | 
| 484 | 
            +
                                "cop_name": "LineLength",
         | 
| 485 | 
            +
                                "location": {
         | 
| 486 | 
            +
                                  "line": 546,
         | 
| 487 | 
            +
                                  "column": 80
         | 
| 488 | 
            +
                                }
         | 
| 489 | 
            +
                              }, {
         | 
| 490 | 
            +
                                "severity": "warning",
         | 
| 491 | 
            +
                                "message": "Unreachable code detected.",
         | 
| 492 | 
            +
                                "cop_name": "UnreachableCode",
         | 
| 493 | 
            +
                                "location": {
         | 
| 494 | 
            +
                                  "line": 15,
         | 
| 495 | 
            +
                                  "column": 9
         | 
| 496 | 
            +
                                }
         | 
| 497 | 
            +
                              }
         | 
| 498 | 
            +
                            ]
         | 
| 499 | 
            +
                          }
         | 
| 500 | 
            +
                        ]
         | 
| 501 | 
            +
                      }
         | 
| 502 | 
            +
                    END
         | 
| 503 | 
            +
                    File.write(runner.json_file_path, json)
         | 
| 504 | 
            +
                  end
         | 
| 505 | 
            +
             | 
| 506 | 
            +
                  it 'handles the spelling' do
         | 
| 507 | 
            +
                    expect(runner.failed_paths).to eq(['lib/bar.rb'])
         | 
| 508 | 
            +
                  end
         | 
| 509 | 
            +
                end
         | 
| 420 510 | 
             
              end
         | 
| 421 511 | 
             
            end
         |