| 
									
										
										
										
											2020-10-10 14:16:11 +02:00
										 |  |  | # typed: false | 
					
						
							| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-26 19:41:14 +01:00
										 |  |  | require "rubocops/text" | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  | describe RuboCop::Cop::FormulaAudit::Text do | 
					
						
							|  |  |  |   subject(:cop) { described_class.new } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-14 17:59:45 -08:00
										 |  |  |   context "when auditing formula text" do | 
					
						
							|  |  |  |     it 'reports an offense if `require "formula"` is present' do | 
					
						
							| 
									
										
										
										
											2020-07-06 10:26:21 -04:00
										 |  |  |       expect_offense(<<~RUBY) | 
					
						
							|  |  |  |         require "formula" | 
					
						
							|  |  |  |         ^^^^^^^^^^^^^^^^^ `require "formula"` is now unnecessary | 
					
						
							|  |  |  |         class Foo < Formula | 
					
						
							|  |  |  |           url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  |           homepage "https://brew.sh" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       RUBY | 
					
						
							| 
									
										
										
										
											2021-01-12 12:01:29 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |       expect_correction(<<~RUBY) | 
					
						
							|  |  |  |         class Foo < Formula | 
					
						
							|  |  |  |           url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  |           homepage "https://brew.sh" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       RUBY | 
					
						
							| 
									
										
										
										
											2020-07-06 10:26:21 -04:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-14 17:59:45 -08:00
										 |  |  |     it "reports an offense if both openssl and libressl are dependencies" do | 
					
						
							| 
									
										
										
										
											2017-10-21 03:12:50 +02:00
										 |  |  |       expect_offense(<<~RUBY) | 
					
						
							| 
									
										
										
										
											2017-08-06 14:48:39 +05:30
										 |  |  |         class Foo < Formula | 
					
						
							| 
									
										
										
										
											2018-11-28 20:51:55 +01:00
										 |  |  |           url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  |           homepage "https://brew.sh" | 
					
						
							| 
									
										
										
										
											2017-08-06 14:48:39 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  |           depends_on "openssl" | 
					
						
							|  |  |  |           depends_on "libressl" => :optional | 
					
						
							| 
									
										
										
										
											2017-10-21 03:12:50 +02:00
										 |  |  |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Formulae should not depend on both OpenSSL and LibreSSL (even optionally). | 
					
						
							| 
									
										
										
										
											2017-08-06 14:48:39 +05:30
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2017-10-21 03:12:50 +02:00
										 |  |  |       RUBY | 
					
						
							| 
									
										
										
										
											2017-08-06 14:48:39 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-21 03:12:50 +02:00
										 |  |  |       expect_offense(<<~RUBY) | 
					
						
							| 
									
										
										
										
											2017-08-06 14:48:39 +05:30
										 |  |  |         class Foo < Formula | 
					
						
							| 
									
										
										
										
											2018-11-28 20:51:55 +01:00
										 |  |  |           url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  |           homepage "https://brew.sh" | 
					
						
							| 
									
										
										
										
											2017-08-06 14:48:39 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  |           depends_on "openssl" | 
					
						
							|  |  |  |           depends_on "libressl" | 
					
						
							| 
									
										
										
										
											2017-10-21 03:12:50 +02:00
										 |  |  |           ^^^^^^^^^^^^^^^^^^^^^ Formulae should not depend on both OpenSSL and LibreSSL (even optionally). | 
					
						
							| 
									
										
										
										
											2017-08-06 14:48:39 +05:30
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2017-10-21 03:12:50 +02:00
										 |  |  |       RUBY | 
					
						
							| 
									
										
										
										
											2017-08-06 14:48:39 +05:30
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-15 08:41:44 -08:00
										 |  |  |     it "reports an offense if veclibfort is used instead of OpenBLAS (in homebrew/core)" do | 
					
						
							| 
									
										
										
										
											2019-06-06 18:09:44 -04:00
										 |  |  |       expect_offense(<<~RUBY, "/homebrew-core/") | 
					
						
							|  |  |  |         class Foo < Formula | 
					
						
							|  |  |  |           url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  |           homepage "https://brew.sh" | 
					
						
							|  |  |  |           depends_on "veclibfort" | 
					
						
							| 
									
										
										
										
											2020-01-08 15:38:48 -05:00
										 |  |  |           ^^^^^^^^^^^^^^^^^^^^^^^ Formulae in homebrew/core should use OpenBLAS as the default serial linear algebra library. | 
					
						
							| 
									
										
										
										
											2019-06-06 18:09:44 -04:00
										 |  |  |         end | 
					
						
							|  |  |  |       RUBY | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-15 08:41:44 -08:00
										 |  |  |     it "reports an offense if lapack is used instead of OpenBLAS (in homebrew/core)" do | 
					
						
							| 
									
										
										
										
											2019-06-06 18:09:44 -04:00
										 |  |  |       expect_offense(<<~RUBY, "/homebrew-core/") | 
					
						
							|  |  |  |         class Foo < Formula | 
					
						
							|  |  |  |           url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  |           homepage "https://brew.sh" | 
					
						
							|  |  |  |           depends_on "lapack" | 
					
						
							| 
									
										
										
										
											2020-01-08 15:38:48 -05:00
										 |  |  |           ^^^^^^^^^^^^^^^^^^^ Formulae in homebrew/core should use OpenBLAS as the default serial linear algebra library. | 
					
						
							| 
									
										
										
										
											2019-06-06 18:09:44 -04:00
										 |  |  |         end | 
					
						
							|  |  |  |       RUBY | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-14 17:59:45 -08:00
										 |  |  |     it "reports an offense if xcodebuild is called without SYMROOT" do | 
					
						
							| 
									
										
										
										
											2017-10-21 03:12:50 +02:00
										 |  |  |       expect_offense(<<~RUBY) | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  |         class Foo < Formula | 
					
						
							| 
									
										
										
										
											2018-11-28 20:51:55 +01:00
										 |  |  |           url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  |           homepage "https://brew.sh" | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  |           def install | 
					
						
							|  |  |  |             xcodebuild "-project", "meow.xcodeproject" | 
					
						
							| 
									
										
										
										
											2017-10-21 03:12:50 +02:00
										 |  |  |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ xcodebuild should be passed an explicit \"SYMROOT\"
 | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2017-10-21 03:12:50 +02:00
										 |  |  |       RUBY | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-21 03:12:50 +02:00
										 |  |  |       expect_offense(<<~RUBY) | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  |         class Foo < Formula | 
					
						
							| 
									
										
										
										
											2018-11-28 20:51:55 +01:00
										 |  |  |           url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  |           homepage "https://brew.sh" | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  |           def install | 
					
						
							|  |  |  |             xcodebuild | 
					
						
							| 
									
										
										
										
											2017-10-21 03:12:50 +02:00
										 |  |  |             ^^^^^^^^^^ xcodebuild should be passed an explicit \"SYMROOT\"
 | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2017-10-21 03:12:50 +02:00
										 |  |  |       RUBY | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-14 17:59:45 -08:00
										 |  |  |     it "reports an offense if `go get` is executed" do | 
					
						
							| 
									
										
										
										
											2017-10-21 03:12:50 +02:00
										 |  |  |       expect_offense(<<~RUBY) | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  |         class Foo < Formula | 
					
						
							| 
									
										
										
										
											2018-11-28 20:51:55 +01:00
										 |  |  |           url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  |           homepage "https://brew.sh" | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  |           def install | 
					
						
							|  |  |  |             system "go", "get", "bar" | 
					
						
							| 
									
										
										
										
											2017-10-31 01:01:42 +00:00
										 |  |  |             ^^^^^^^^^^^^^^^^^^^^^^^^^ Do not use `go get`. Please ask upstream to implement Go vendoring | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2017-10-21 03:12:50 +02:00
										 |  |  |       RUBY | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-14 17:59:45 -08:00
										 |  |  |     it "reports an offense if `xcodebuild` is executed" do | 
					
						
							| 
									
										
										
										
											2017-10-21 03:12:50 +02:00
										 |  |  |       expect_offense(<<~RUBY) | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  |         class Foo < Formula | 
					
						
							| 
									
										
										
										
											2018-11-28 20:51:55 +01:00
										 |  |  |           url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  |           homepage "https://brew.sh" | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  |           def install | 
					
						
							|  |  |  |             system "xcodebuild", "foo", "bar" | 
					
						
							| 
									
										
										
										
											2017-10-21 03:12:50 +02:00
										 |  |  |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ use \"xcodebuild *args\" instead of \"system 'xcodebuild', *args\"
 | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2017-10-21 03:12:50 +02:00
										 |  |  |       RUBY | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-14 17:59:45 -08:00
										 |  |  |     it "reports an offense if `plist_options` are not defined when using a formula-defined `plist`", :ruby23 do | 
					
						
							| 
									
										
										
										
											2017-10-21 03:12:50 +02:00
										 |  |  |       expect_offense(<<~RUBY) | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  |         class Foo < Formula | 
					
						
							| 
									
										
										
										
											2018-11-28 20:51:55 +01:00
										 |  |  |           url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  |           homepage "https://brew.sh" | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  |           def install | 
					
						
							|  |  |  |             system "xcodebuild", "foo", "bar" | 
					
						
							| 
									
										
										
										
											2017-10-21 03:12:50 +02:00
										 |  |  |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ use \"xcodebuild *args\" instead of \"system 'xcodebuild', *args\"
 | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  |           end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-15 02:28:32 +02:00
										 |  |  |           def plist | 
					
						
							| 
									
										
										
										
											2017-10-21 03:12:50 +02:00
										 |  |  |           ^^^^^^^^^ Please set plist_options when using a formula-defined plist. | 
					
						
							| 
									
										
										
										
											2017-10-15 02:28:32 +02:00
										 |  |  |             <<~XML | 
					
						
							|  |  |  |               <?xml version="1.0" encoding="UTF-8"?> | 
					
						
							|  |  |  |               <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | 
					
						
							|  |  |  |               <plist version="1.0"> | 
					
						
							|  |  |  |               <dict> | 
					
						
							|  |  |  |                 <key>Label</key>
 | 
					
						
							|  |  |  |                 <string>org.nrpe.agent</string>
 | 
					
						
							|  |  |  |               </dict>
 | 
					
						
							|  |  |  |               </plist>
 | 
					
						
							|  |  |  |             XML | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2017-10-15 02:28:32 +02:00
										 |  |  |       RUBY | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-14 17:59:45 -08:00
										 |  |  |     it 'reports an offense if `require "language/go"` is present' do | 
					
						
							| 
									
										
										
										
											2017-10-21 03:12:50 +02:00
										 |  |  |       expect_offense(<<~RUBY) | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  |         require "language/go" | 
					
						
							| 
									
										
										
										
											2017-10-21 03:12:50 +02:00
										 |  |  |         ^^^^^^^^^^^^^^^^^^^^^ require "language/go" is unnecessary unless using `go_resource`s | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  |         class Foo < Formula | 
					
						
							| 
									
										
										
										
											2018-11-28 20:51:55 +01:00
										 |  |  |           url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  |           homepage "https://brew.sh" | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  |           def install | 
					
						
							|  |  |  |             system "go", "get", "bar" | 
					
						
							| 
									
										
										
										
											2017-10-31 01:01:42 +00:00
										 |  |  |             ^^^^^^^^^^^^^^^^^^^^^^^^^ Do not use `go get`. Please ask upstream to implement Go vendoring | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2017-10-21 03:12:50 +02:00
										 |  |  |       RUBY | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-14 17:59:45 -08:00
										 |  |  |     it "reports an offense if formula uses virtualenv and also `setuptools` resource" do | 
					
						
							| 
									
										
										
										
											2017-10-21 03:12:50 +02:00
										 |  |  |       expect_offense(<<~RUBY) | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  |         class Foo < Formula | 
					
						
							| 
									
										
										
										
											2018-11-28 20:51:55 +01:00
										 |  |  |           url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  |           homepage "https://brew.sh" | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  |           resource "setuptools" do | 
					
						
							| 
									
										
										
										
											2017-10-21 03:12:50 +02:00
										 |  |  |           ^^^^^^^^^^^^^^^^^^^^^ Formulae using virtualenvs do not need a `setuptools` resource. | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  |             url "https://foo.com/foo.tar.gz" | 
					
						
							|  |  |  |             sha256 "db0904a28253cfe53e7dedc765c71596f3c53bb8a866ae50123320ec1a7b73fd" | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           def install | 
					
						
							|  |  |  |             virtualenv_create(libexec) | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2017-10-21 03:12:50 +02:00
										 |  |  |       RUBY | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-14 17:59:45 -08:00
										 |  |  |     it "reports an offense if `Formula.factory(name)` is present" do | 
					
						
							| 
									
										
										
										
											2017-10-21 03:12:50 +02:00
										 |  |  |       expect_offense(<<~RUBY) | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  |         class Foo < Formula | 
					
						
							| 
									
										
										
										
											2018-11-28 20:51:55 +01:00
										 |  |  |           url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  |           homepage "https://brew.sh" | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  |           def install | 
					
						
							|  |  |  |             Formula.factory(name) | 
					
						
							| 
									
										
										
										
											2017-10-21 03:12:50 +02:00
										 |  |  |             ^^^^^^^^^^^^^^^^^^^^^ \"Formula.factory(name)\" is deprecated in favor of \"Formula[name]\"
 | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2017-10-21 03:12:50 +02:00
										 |  |  |       RUBY | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2018-06-08 00:07:07 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-14 17:59:45 -08:00
										 |  |  |     it "reports an offense if `dep ensure` is used without `-vendor-only`" do | 
					
						
							| 
									
										
										
										
											2018-06-08 00:07:07 +10:00
										 |  |  |       expect_offense(<<~RUBY) | 
					
						
							|  |  |  |         class Foo < Formula | 
					
						
							| 
									
										
										
										
											2018-11-28 20:51:55 +01:00
										 |  |  |           url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  |           homepage "https://brew.sh" | 
					
						
							| 
									
										
										
										
											2018-06-08 00:07:07 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |           def install | 
					
						
							|  |  |  |             system "dep", "ensure" | 
					
						
							|  |  |  |             ^^^^^^^^^^^^^^^^^^^^^^ use \"dep\", \"ensure\", \"-vendor-only\"
 | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       RUBY | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2018-06-08 10:15:32 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-14 17:59:45 -08:00
										 |  |  |     it "reports an offense if `cargo build` is executed" do | 
					
						
							| 
									
										
										
										
											2018-06-08 10:15:32 +10:00
										 |  |  |       expect_offense(<<~RUBY) | 
					
						
							|  |  |  |         class Foo < Formula | 
					
						
							| 
									
										
										
										
											2018-11-28 20:51:55 +01:00
										 |  |  |           url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  |           homepage "https://brew.sh" | 
					
						
							| 
									
										
										
										
											2018-06-08 10:15:32 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |           def install | 
					
						
							|  |  |  |             system "cargo", "build" | 
					
						
							| 
									
										
										
										
											2020-06-22 13:24:41 +02:00
										 |  |  |             ^^^^^^^^^^^^^^^^^^^^^^^ use \"cargo\", \"install\", *std_cargo_args
 | 
					
						
							| 
									
										
										
										
											2018-06-08 10:15:32 +10:00
										 |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       RUBY | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2020-07-03 16:27:35 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-14 17:59:45 -08:00
										 |  |  |     it "reports an offense if `make` calls are not separated" do | 
					
						
							| 
									
										
										
										
											2020-07-03 16:27:35 -04:00
										 |  |  |       expect_offense(<<~RUBY) | 
					
						
							|  |  |  |         class Foo < Formula | 
					
						
							|  |  |  |           def install | 
					
						
							|  |  |  |             system "make && make install" | 
					
						
							|  |  |  |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Use separate `make` calls | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       RUBY | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2020-07-05 13:50:48 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-14 17:59:45 -08:00
										 |  |  |     it "reports an offense if paths are concatenated in string interpolation" do | 
					
						
							| 
									
										
										
										
											2020-07-05 13:50:48 -04:00
										 |  |  |       expect_offense(<<~RUBY) | 
					
						
							|  |  |  |         class Foo < Formula | 
					
						
							|  |  |  |           def install | 
					
						
							|  |  |  |             ohai "foo \#{bar + "baz"}" | 
					
						
							|  |  |  |                       ^^^^^^^^^^^^^^ Do not concatenate paths in string interpolation | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       RUBY | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2020-07-05 14:32:27 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-14 17:59:45 -08:00
										 |  |  |     it 'reports an offense if `prefix + "bin"` is present' do | 
					
						
							| 
									
										
										
										
											2020-07-05 15:02:47 -04:00
										 |  |  |       expect_offense(<<~RUBY) | 
					
						
							|  |  |  |         class Foo < Formula | 
					
						
							|  |  |  |           def install | 
					
						
							|  |  |  |             ohai prefix + "bin" | 
					
						
							|  |  |  |                  ^^^^^^^^^^^^^^ Use `bin` instead of `prefix + "bin"` | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       RUBY | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect_offense(<<~RUBY) | 
					
						
							|  |  |  |         class Foo < Formula | 
					
						
							|  |  |  |           def install | 
					
						
							|  |  |  |             ohai prefix + "bin/foo" | 
					
						
							|  |  |  |                  ^^^^^^^^^^^^^^^^^^ Use `bin` instead of `prefix + "bin"` | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       RUBY | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2017-05-24 00:08:31 +05:30
										 |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							| 
									
										
										
										
											2020-07-05 11:42:16 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | describe RuboCop::Cop::FormulaAuditStrict::Text do | 
					
						
							|  |  |  |   subject(:cop) { described_class.new } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-15 08:41:44 -08:00
										 |  |  |   context "when auditing formula text in homebrew/core" do | 
					
						
							| 
									
										
										
										
											2021-01-14 17:59:45 -08:00
										 |  |  |     it "reports an offense if `env :userpaths` is present" do | 
					
						
							| 
									
										
										
										
											2020-07-05 11:46:53 -04:00
										 |  |  |       expect_offense(<<~RUBY) | 
					
						
							|  |  |  |         class Foo < Formula | 
					
						
							|  |  |  |           url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           env :userpaths | 
					
						
							|  |  |  |           ^^^^^^^^^^^^^^ `env :userpaths` in homebrew/core formulae is deprecated | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       RUBY | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-15 08:41:44 -08:00
										 |  |  |     it "reports an offense if `env :std` is present in homebrew/core" do | 
					
						
							| 
									
										
										
										
											2020-07-05 11:42:16 -04:00
										 |  |  |       expect_offense(<<~RUBY, "/homebrew-core/") | 
					
						
							|  |  |  |         class Foo < Formula | 
					
						
							|  |  |  |           url "https://brew.sh/foo-1.0.tgz" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           env :std | 
					
						
							|  |  |  |           ^^^^^^^^ `env :std` in homebrew/core formulae is deprecated | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       RUBY | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2020-07-05 19:58:26 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-14 17:59:45 -08:00
										 |  |  |     it %Q(reports an offense if "\#{share}/<formula name>" is present) do | 
					
						
							| 
									
										
										
										
											2020-07-05 19:58:26 -04:00
										 |  |  |       expect_offense(<<~RUBY, "/homebrew-core/Formula/foo.rb") | 
					
						
							|  |  |  |         class Foo < Formula | 
					
						
							|  |  |  |           def install | 
					
						
							|  |  |  |             ohai "\#{share}/foo" | 
					
						
							|  |  |  |                  ^^^^^^^^^^^^^^ Use `\#{pkgshare}` instead of `\#{share}/foo` | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       RUBY | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect_offense(<<~RUBY, "/homebrew-core/Formula/foo.rb") | 
					
						
							|  |  |  |         class Foo < Formula | 
					
						
							|  |  |  |           def install | 
					
						
							|  |  |  |             ohai "\#{share}/foo/bar" | 
					
						
							|  |  |  |                  ^^^^^^^^^^^^^^^^^^ Use `\#{pkgshare}` instead of `\#{share}/foo` | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       RUBY | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect_offense(<<~RUBY, "/homebrew-core/Formula/foolibc++.rb") | 
					
						
							| 
									
										
										
										
											2021-01-14 17:59:45 -08:00
										 |  |  |         class Foolibcxx < Formula | 
					
						
							| 
									
										
										
										
											2020-07-05 19:58:26 -04:00
										 |  |  |           def install | 
					
						
							|  |  |  |             ohai "\#{share}/foolibc++" | 
					
						
							|  |  |  |                  ^^^^^^^^^^^^^^^^^^^^ Use `\#{pkgshare}` instead of `\#{share}/foolibc++` | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       RUBY | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-14 17:59:45 -08:00
										 |  |  |     it 'reports an offense if `share/"<formula name>"` is present' do | 
					
						
							| 
									
										
										
										
											2020-07-05 19:58:26 -04:00
										 |  |  |       expect_offense(<<~RUBY, "/homebrew-core/Formula/foo.rb") | 
					
						
							|  |  |  |         class Foo < Formula | 
					
						
							|  |  |  |           def install | 
					
						
							|  |  |  |             ohai share/"foo" | 
					
						
							|  |  |  |                  ^^^^^^^^^^^ Use `pkgshare` instead of `share/"foo"` | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       RUBY | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect_offense(<<~RUBY, "/homebrew-core/Formula/foo.rb") | 
					
						
							|  |  |  |         class Foo < Formula | 
					
						
							|  |  |  |           def install | 
					
						
							|  |  |  |             ohai share/"foo/bar" | 
					
						
							|  |  |  |                  ^^^^^^^^^^^^^^^ Use `pkgshare` instead of `share/"foo"` | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       RUBY | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect_offense(<<~RUBY, "/homebrew-core/Formula/foolibc++.rb") | 
					
						
							| 
									
										
										
										
											2021-01-14 17:59:45 -08:00
										 |  |  |         class Foolibcxx < Formula | 
					
						
							| 
									
										
										
										
											2020-07-05 19:58:26 -04:00
										 |  |  |           def install | 
					
						
							|  |  |  |             ohai share/"foolibc++" | 
					
						
							|  |  |  |                  ^^^^^^^^^^^^^^^^^ Use `pkgshare` instead of `share/"foolibc++"` | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       RUBY | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-14 17:59:45 -08:00
										 |  |  |     it %Q(reports no offenses if "\#{share}/<directory name>" doesn't match formula name) do | 
					
						
							| 
									
										
										
										
											2020-07-05 19:58:26 -04:00
										 |  |  |       expect_no_offenses(<<~RUBY, "/homebrew-core/Formula/foo.rb") | 
					
						
							|  |  |  |         class Foo < Formula | 
					
						
							|  |  |  |           def install | 
					
						
							|  |  |  |             ohai "\#{share}/foo-bar" | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       RUBY | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-14 17:59:45 -08:00
										 |  |  |     it 'reports no offenses if `share/"<formula name>"` is not present' do | 
					
						
							| 
									
										
										
										
											2020-07-05 19:58:26 -04:00
										 |  |  |       expect_no_offenses(<<~RUBY, "/homebrew-core/Formula/foo.rb") | 
					
						
							|  |  |  |         class Foo < Formula | 
					
						
							|  |  |  |           def install | 
					
						
							|  |  |  |             ohai share/"foo-bar" | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       RUBY | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       expect_no_offenses(<<~RUBY, "/homebrew-core/Formula/foo.rb") | 
					
						
							|  |  |  |         class Foo < Formula | 
					
						
							|  |  |  |           def install | 
					
						
							|  |  |  |             ohai share/"bar" | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       RUBY | 
					
						
							| 
									
										
										
										
											2020-07-12 14:20:50 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |       expect_no_offenses(<<~RUBY, "/homebrew-core/Formula/foo.rb") | 
					
						
							|  |  |  |         class Foo < Formula | 
					
						
							|  |  |  |           def install | 
					
						
							|  |  |  |             ohai share/"bar/foo" | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       RUBY | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-14 17:59:45 -08:00
										 |  |  |     it %Q(reports no offenses if formula name appears afer "\#{share}/<directory name>") do | 
					
						
							| 
									
										
										
										
											2020-07-12 14:20:50 -04:00
										 |  |  |       expect_no_offenses(<<~RUBY, "/homebrew-core/Formula/foo.rb") | 
					
						
							|  |  |  |         class Foo < Formula | 
					
						
							|  |  |  |           def install | 
					
						
							|  |  |  |             ohai "\#{share}/bar/foo" | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       RUBY | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2020-07-05 11:42:16 -04:00
										 |  |  |   end | 
					
						
							|  |  |  | end |