| 
									
										
										
										
											2018-02-19 23:40:07 +05:30
										 |  |  | require_relative "../../rubocops/dependency_order_cop" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe RuboCop::Cop::NewFormulaAudit::DependencyOrder do | 
					
						
							|  |  |  |   subject(:cop) { described_class.new } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   context "depends_on" do | 
					
						
							|  |  |  |     it "wrong conditional depends_on order" do | 
					
						
							|  |  |  |       expect_offense(<<~RUBY) | 
					
						
							|  |  |  |         class Foo < Formula | 
					
						
							| 
									
										
										
										
											2018-08-06 20:41:21 +02:00
										 |  |  |           homepage "https://example.com" | 
					
						
							|  |  |  |           url "https://example.com/foo-1.0.tgz" | 
					
						
							| 
									
										
										
										
											2018-02-19 23:40:07 +05:30
										 |  |  |           depends_on "apple" if build.with? "foo" | 
					
						
							|  |  |  |           depends_on "foo" => :optional | 
					
						
							|  |  |  |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ dependency "foo" (line 5) should be put before dependency "apple" (line 4) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       RUBY | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "wrong alphabetical depends_on order" do | 
					
						
							|  |  |  |       expect_offense(<<~RUBY) | 
					
						
							|  |  |  |         class Foo < Formula | 
					
						
							| 
									
										
										
										
											2018-08-06 20:41:21 +02:00
										 |  |  |           homepage "https://example.com" | 
					
						
							|  |  |  |           url "https://example.com/foo-1.0.tgz" | 
					
						
							| 
									
										
										
										
											2018-02-19 23:40:07 +05:30
										 |  |  |           depends_on "foo" | 
					
						
							|  |  |  |           depends_on "bar" | 
					
						
							|  |  |  |           ^^^^^^^^^^^^^^^^ dependency "bar" (line 5) should be put before dependency "foo" (line 4) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       RUBY | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-11 04:21:02 +02:00
										 |  |  |     it "supports requirement constants" do | 
					
						
							|  |  |  |       expect_offense(<<~RUBY) | 
					
						
							|  |  |  |         class Foo < Formula | 
					
						
							| 
									
										
										
										
											2018-08-06 20:41:21 +02:00
										 |  |  |           homepage "https://example.com" | 
					
						
							|  |  |  |           url "https://example.com/foo-1.0.tgz" | 
					
						
							| 
									
										
										
										
											2018-06-11 04:21:02 +02:00
										 |  |  |           depends_on FooRequirement | 
					
						
							|  |  |  |           depends_on "bar" | 
					
						
							|  |  |  |           ^^^^^^^^^^^^^^^^ dependency "bar" (line 5) should be put before dependency "FooRequirement" (line 4) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       RUBY | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-19 23:40:07 +05:30
										 |  |  |     it "wrong conditional depends_on order" do | 
					
						
							|  |  |  |       expect_offense(<<~RUBY) | 
					
						
							|  |  |  |         class Foo < Formula | 
					
						
							| 
									
										
										
										
											2018-08-06 20:41:21 +02:00
										 |  |  |           homepage "https://example.com" | 
					
						
							|  |  |  |           url "https://example.com/foo-1.0.tgz" | 
					
						
							| 
									
										
										
										
											2018-02-19 23:40:07 +05:30
										 |  |  |           head do | 
					
						
							|  |  |  |             depends_on "apple" if build.with? "foo" | 
					
						
							|  |  |  |             depends_on "bar" | 
					
						
							|  |  |  |             ^^^^^^^^^^^^^^^^ dependency "bar" (line 6) should be put before dependency "apple" (line 5) | 
					
						
							|  |  |  |             depends_on "foo" => :optional | 
					
						
							|  |  |  |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ dependency "foo" (line 7) should be put before dependency "apple" (line 5) | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |           depends_on "apple" if build.with? "foo" | 
					
						
							|  |  |  |           depends_on "foo" => :optional | 
					
						
							|  |  |  |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ dependency "foo" (line 10) should be put before dependency "apple" (line 9) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       RUBY | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2018-03-28 20:54:39 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     it "correct depends_on order for multiple tags" do | 
					
						
							|  |  |  |       expect_no_offenses(<<~RUBY) | 
					
						
							|  |  |  |         class Foo < Formula | 
					
						
							| 
									
										
										
										
											2018-08-06 20:41:21 +02:00
										 |  |  |           homepage "https://example.com" | 
					
						
							|  |  |  |           url "https://example.com/foo-1.0.tgz" | 
					
						
							| 
									
										
										
										
											2018-03-28 20:54:39 -05:00
										 |  |  |           depends_on "bar" => [:build, :test] | 
					
						
							|  |  |  |           depends_on "foo" => :build | 
					
						
							|  |  |  |           depends_on "apple" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       RUBY | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2018-02-19 23:40:07 +05:30
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   context "autocorrect" do | 
					
						
							|  |  |  |     it "wrong conditional depends_on order" do | 
					
						
							| 
									
										
										
										
											2018-07-11 15:17:40 +02:00
										 |  |  |       source = <<~RUBY | 
					
						
							| 
									
										
										
										
											2018-02-19 23:40:07 +05:30
										 |  |  |         class Foo < Formula | 
					
						
							| 
									
										
										
										
											2018-08-06 20:41:21 +02:00
										 |  |  |           homepage "https://example.com" | 
					
						
							|  |  |  |           url "https://example.com/foo-1.0.tgz" | 
					
						
							| 
									
										
										
										
											2018-02-19 23:40:07 +05:30
										 |  |  |           depends_on "apple" if build.with? "foo" | 
					
						
							|  |  |  |           depends_on "foo" => :optional | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2018-07-11 15:17:40 +02:00
										 |  |  |       RUBY | 
					
						
							| 
									
										
										
										
											2018-02-19 23:40:07 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-11 15:17:40 +02:00
										 |  |  |       correct_source = <<~RUBY | 
					
						
							| 
									
										
										
										
											2018-02-19 23:40:07 +05:30
										 |  |  |         class Foo < Formula | 
					
						
							| 
									
										
										
										
											2018-08-06 20:41:21 +02:00
										 |  |  |           homepage "https://example.com" | 
					
						
							|  |  |  |           url "https://example.com/foo-1.0.tgz" | 
					
						
							| 
									
										
										
										
											2018-02-19 23:40:07 +05:30
										 |  |  |           depends_on "foo" => :optional | 
					
						
							|  |  |  |           depends_on "apple" if build.with? "foo" | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2018-07-11 15:17:40 +02:00
										 |  |  |       RUBY | 
					
						
							| 
									
										
										
										
											2018-02-19 23:40:07 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  |       corrected_source = autocorrect_source(source) | 
					
						
							|  |  |  |       expect(corrected_source).to eq(correct_source) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |