129 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # typed: false
 | |
| # frozen_string_literal: true
 | |
| 
 | |
| require "rubocops/unless_multiple_conditions"
 | |
| 
 | |
| describe RuboCop::Cop::Style::UnlessMultipleConditions do
 | |
|   subject(:cop) { described_class.new }
 | |
| 
 | |
|   it "reports an offense when using `unless` with multiple `and` conditions" do
 | |
|     expect_offense <<~RUBY
 | |
|       unless foo && bar
 | |
|       ^^^^^^^^^^^^^^^^^ Avoid using `unless` with multiple conditions.
 | |
|         something
 | |
|       end
 | |
|     RUBY
 | |
| 
 | |
|     expect_offense <<~RUBY
 | |
|       something unless foo && bar
 | |
|                 ^^^^^^^^^^^^^^^^^ Avoid using `unless` with multiple conditions.
 | |
|     RUBY
 | |
|   end
 | |
| 
 | |
|   it "reports an offense when using `unless` with multiple `or` conditions" do
 | |
|     expect_offense <<~RUBY
 | |
|       unless foo || bar
 | |
|       ^^^^^^^^^^^^^^^^^ Avoid using `unless` with multiple conditions.
 | |
|         something
 | |
|       end
 | |
|     RUBY
 | |
| 
 | |
|     expect_offense <<~RUBY
 | |
|       something unless foo || bar
 | |
|                 ^^^^^^^^^^^^^^^^^ Avoid using `unless` with multiple conditions.
 | |
|     RUBY
 | |
|   end
 | |
| 
 | |
|   it "reports no offenses when using `if` with multiple `and` conditions" do
 | |
|     expect_no_offenses <<~RUBY
 | |
|       if !foo && !bar
 | |
|         something
 | |
|       end
 | |
|     RUBY
 | |
| 
 | |
|     expect_no_offenses <<~RUBY
 | |
|       something if !foo && !bar
 | |
|     RUBY
 | |
|   end
 | |
| 
 | |
|   it "reports no offenses when using `if` with multiple `or` conditions" do
 | |
|     expect_no_offenses <<~RUBY
 | |
|       if !foo || !bar
 | |
|         something
 | |
|       end
 | |
|     RUBY
 | |
| 
 | |
|     expect_no_offenses <<~RUBY
 | |
|       something if !foo || !bar
 | |
|     RUBY
 | |
|   end
 | |
| 
 | |
|   it "reports no offenses when using `unless` with single condition" do
 | |
|     expect_no_offenses <<~RUBY
 | |
|       unless foo
 | |
|         something
 | |
|       end
 | |
|     RUBY
 | |
| 
 | |
|     expect_no_offenses <<~RUBY
 | |
|       something unless foo
 | |
|     RUBY
 | |
|   end
 | |
| 
 | |
|   it "auto-corrects `unless` with multiple `and` conditions" do
 | |
|     source = <<~RUBY
 | |
|       unless foo && (bar || baz)
 | |
|         something
 | |
|       end
 | |
|     RUBY
 | |
| 
 | |
|     corrected_source = <<~RUBY
 | |
|       if !(foo) || !(bar || baz)
 | |
|         something
 | |
|       end
 | |
|     RUBY
 | |
| 
 | |
|     new_source = autocorrect_source(source)
 | |
|     expect(new_source).to eq(corrected_source)
 | |
| 
 | |
|     source = <<~RUBY
 | |
|       something unless foo && bar
 | |
|     RUBY
 | |
| 
 | |
|     corrected_source = <<~RUBY
 | |
|       something if !(foo) || !(bar)
 | |
|     RUBY
 | |
| 
 | |
|     new_source = autocorrect_source(source)
 | |
|     expect(new_source).to eq(corrected_source)
 | |
|   end
 | |
| 
 | |
|   it "auto-corrects `unless` with multiple `or` conditions" do
 | |
|     source = <<~RUBY
 | |
|       unless foo || (bar && baz)
 | |
|         something
 | |
|       end
 | |
|     RUBY
 | |
| 
 | |
|     corrected_source = <<~RUBY
 | |
|       if !(foo) && !(bar && baz)
 | |
|         something
 | |
|       end
 | |
|     RUBY
 | |
| 
 | |
|     new_source = autocorrect_source(source)
 | |
|     expect(new_source).to eq(corrected_source)
 | |
| 
 | |
|     source = <<~RUBY
 | |
|       something unless foo || bar
 | |
|     RUBY
 | |
| 
 | |
|     corrected_source = <<~RUBY
 | |
|       something if !(foo) && !(bar)
 | |
|     RUBY
 | |
| 
 | |
|     new_source = autocorrect_source(source)
 | |
|     expect(new_source).to eq(corrected_source)
 | |
|   end
 | |
| end
 | 
