| 
									
										
										
										
											2021-01-28 12:36:44 -08:00
										 |  |  | # typed: false | 
					
						
							|  |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require "rubocops/bottle" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe RuboCop::Cop::FormulaAudit::BottleOrder do | 
					
						
							|  |  |  |   subject(:cop) { described_class.new } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   it "reports no offenses for `bottle :uneeded`" do | 
					
						
							|  |  |  |     expect_no_offenses(<<~RUBY) | 
					
						
							|  |  |  |       class Foo < Formula | 
					
						
							|  |  |  |         url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         bottle :unneeded | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     RUBY | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   it "reports no offenses for a properly ordered bottle block" do | 
					
						
							|  |  |  |     expect_no_offenses(<<~RUBY) | 
					
						
							|  |  |  |       class Foo < Formula | 
					
						
							|  |  |  |         url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         bottle do | 
					
						
							|  |  |  |           rebuild 4
 | 
					
						
							|  |  |  |           sha256 arm64_something_else: "aaaaaaaa" | 
					
						
							|  |  |  |           sha256 arm64_big_sur: "aaaaaaaa" | 
					
						
							|  |  |  |           sha256 big_sur: "faceb00c" | 
					
						
							|  |  |  |           sha256 catalina: "deadbeef" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     RUBY | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     expect_no_offenses(<<~RUBY) | 
					
						
							|  |  |  |       class Foo < Formula | 
					
						
							|  |  |  |         url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         bottle do | 
					
						
							|  |  |  |           rebuild 4
 | 
					
						
							|  |  |  |           sha256 cellar: :any, arm64_something_else: "aaaaaaaa" | 
					
						
							|  |  |  |           sha256 cellar: :any_skip_relocation, arm64_big_sur: "aaaaaaaa" | 
					
						
							|  |  |  |           sha256 cellar: "/usr/local/Cellar", big_sur: "faceb00c" | 
					
						
							|  |  |  |           sha256 catalina: "deadbeef" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     RUBY | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   it "reports no offenses for a properly ordered bottle block with a single bottle" do | 
					
						
							|  |  |  |     expect_no_offenses(<<~RUBY) | 
					
						
							|  |  |  |       class Foo < Formula | 
					
						
							|  |  |  |         url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         bottle do | 
					
						
							|  |  |  |           sha256 big_sur: "faceb00c" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     RUBY | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     expect_no_offenses(<<~RUBY) | 
					
						
							|  |  |  |       class Foo < Formula | 
					
						
							|  |  |  |         url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         bottle do | 
					
						
							|  |  |  |           sha256 cellar: :any, big_sur: "faceb00c" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     RUBY | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   it "reports no offenses for a properly ordered bottle block with only arm/intel bottles" do | 
					
						
							|  |  |  |     expect_no_offenses(<<~RUBY) | 
					
						
							|  |  |  |       class Foo < Formula | 
					
						
							|  |  |  |         url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         bottle do | 
					
						
							|  |  |  |           rebuild 4
 | 
					
						
							|  |  |  |           sha256 arm64_catalina: "aaaaaaaa" | 
					
						
							|  |  |  |           sha256 arm64_big_sur: "aaaaaaaa" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     RUBY | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     expect_no_offenses(<<~RUBY) | 
					
						
							|  |  |  |       class Foo < Formula | 
					
						
							|  |  |  |         url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         bottle do | 
					
						
							|  |  |  |           rebuild 4
 | 
					
						
							|  |  |  |           sha256 arm64_big_sur: "aaaaaaaa" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     RUBY | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     expect_no_offenses(<<~RUBY) | 
					
						
							|  |  |  |       class Foo < Formula | 
					
						
							|  |  |  |         url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         bottle do | 
					
						
							|  |  |  |           rebuild 4
 | 
					
						
							|  |  |  |           sha256 big_sur: "faceb00c" | 
					
						
							|  |  |  |           sha256 catalina: "deadbeef" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     RUBY | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     expect_no_offenses(<<~RUBY) | 
					
						
							|  |  |  |       class Foo < Formula | 
					
						
							|  |  |  |         url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         bottle do | 
					
						
							|  |  |  |           rebuild 4
 | 
					
						
							|  |  |  |           sha256 big_sur: "faceb00c" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     RUBY | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-04 13:34:37 -05:00
										 |  |  |   it "reports and corrects arm bottles below intel bottles" do | 
					
						
							|  |  |  |     expect_offense(<<~RUBY) | 
					
						
							|  |  |  |       class Foo < Formula | 
					
						
							|  |  |  |         url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         bottle do | 
					
						
							|  |  |  |         ^^^^^^^^^ ARM bottles should be listed before Intel bottles | 
					
						
							|  |  |  |           rebuild 4
 | 
					
						
							|  |  |  |           sha256 big_sur: "faceb00c" | 
					
						
							|  |  |  |           sha256 catalina: "deadbeef" | 
					
						
							|  |  |  |           sha256 arm64_big_sur: "aaaaaaaa" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     RUBY | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     expect_correction(<<~RUBY) | 
					
						
							|  |  |  |       class Foo < Formula | 
					
						
							|  |  |  |         url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         bottle do | 
					
						
							|  |  |  |           rebuild 4
 | 
					
						
							|  |  |  |           sha256 arm64_big_sur: "aaaaaaaa" | 
					
						
							|  |  |  |           sha256 big_sur: "faceb00c" | 
					
						
							|  |  |  |           sha256 catalina: "deadbeef" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     RUBY | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   it "reports and corrects multiple arm bottles below intel bottles" do | 
					
						
							|  |  |  |     expect_offense(<<~RUBY) | 
					
						
							|  |  |  |       class Foo < Formula | 
					
						
							|  |  |  |         url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         bottle do | 
					
						
							|  |  |  |         ^^^^^^^^^ ARM bottles should be listed before Intel bottles | 
					
						
							|  |  |  |           rebuild 4
 | 
					
						
							|  |  |  |           sha256 big_sur: "faceb00c" | 
					
						
							|  |  |  |           sha256 arm64_catalina: "aaaaaaaa" | 
					
						
							|  |  |  |           sha256 catalina: "deadbeef" | 
					
						
							|  |  |  |           sha256 arm64_big_sur: "aaaaaaaa" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     RUBY | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     expect_correction(<<~RUBY) | 
					
						
							|  |  |  |       class Foo < Formula | 
					
						
							|  |  |  |         url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         bottle do | 
					
						
							|  |  |  |           rebuild 4
 | 
					
						
							|  |  |  |           sha256 arm64_catalina: "aaaaaaaa" | 
					
						
							|  |  |  |           sha256 arm64_big_sur: "aaaaaaaa" | 
					
						
							|  |  |  |           sha256 big_sur: "faceb00c" | 
					
						
							|  |  |  |           sha256 catalina: "deadbeef" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     RUBY | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   it "reports and corrects arm bottles with cellars below intel bottles" do | 
					
						
							|  |  |  |     expect_offense(<<~RUBY) | 
					
						
							|  |  |  |       class Foo < Formula | 
					
						
							|  |  |  |         url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         bottle do | 
					
						
							|  |  |  |         ^^^^^^^^^ ARM bottles should be listed before Intel bottles | 
					
						
							|  |  |  |           rebuild 4
 | 
					
						
							|  |  |  |           sha256 cellar: "/usr/local/Cellar",  big_sur:        "faceb00c" | 
					
						
							|  |  |  |           sha256                               catalina:       "deadbeef" | 
					
						
							|  |  |  |           sha256 cellar: :any,                 arm64_big_sur:  "aaaaaaaa" | 
					
						
							|  |  |  |           sha256 cellar: :any_skip_relocation, arm64_catalina: "aaaaaaaa" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     RUBY | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     expect_correction(<<~RUBY) | 
					
						
							|  |  |  |       class Foo < Formula | 
					
						
							|  |  |  |         url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         bottle do | 
					
						
							|  |  |  |           rebuild 4
 | 
					
						
							|  |  |  |           sha256 cellar: :any,                 arm64_big_sur:  "aaaaaaaa" | 
					
						
							|  |  |  |           sha256 cellar: :any_skip_relocation, arm64_catalina: "aaaaaaaa" | 
					
						
							|  |  |  |           sha256 cellar: "/usr/local/Cellar",  big_sur:        "faceb00c" | 
					
						
							|  |  |  |           sha256                               catalina:       "deadbeef" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     RUBY | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   it "reports and corrects arm bottles below intel bottles with old bottle syntax" do | 
					
						
							|  |  |  |     expect_offense(<<~RUBY) | 
					
						
							|  |  |  |       class Foo < Formula | 
					
						
							|  |  |  |         url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         bottle do | 
					
						
							|  |  |  |         ^^^^^^^^^ ARM bottles should be listed before Intel bottles | 
					
						
							|  |  |  |           cellar :any | 
					
						
							|  |  |  |           sha256 "faceb00c" => :big_sur | 
					
						
							|  |  |  |           sha256 "aaaaaaaa" => :arm64_big_sur | 
					
						
							|  |  |  |           sha256 "aaaaaaaa" => :arm64_catalina | 
					
						
							|  |  |  |           sha256 "deadbeef" => :catalina | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     RUBY | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     expect_correction(<<~RUBY) | 
					
						
							|  |  |  |       class Foo < Formula | 
					
						
							|  |  |  |         url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         bottle do | 
					
						
							|  |  |  |           cellar :any | 
					
						
							|  |  |  |           sha256 "aaaaaaaa" => :arm64_big_sur | 
					
						
							|  |  |  |           sha256 "aaaaaaaa" => :arm64_catalina | 
					
						
							|  |  |  |           sha256 "faceb00c" => :big_sur | 
					
						
							|  |  |  |           sha256 "deadbeef" => :catalina | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     RUBY | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2021-01-28 12:36:44 -08:00
										 |  |  | end |