| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-17 18:25:08 +09:00
										 |  |  | require "cli/parser" | 
					
						
							| 
									
										
										
										
											2016-01-18 15:33:59 +01:00
										 |  |  | require "fileutils" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-18 22:41:47 -05:00
										 |  |  | module Homebrew | 
					
						
							| 
									
										
										
										
											2016-09-26 01:44:51 +02:00
										 |  |  |   module_function | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-30 18:25:38 +05:30
										 |  |  |   def tests_args | 
					
						
							|  |  |  |     Homebrew::CLI::Parser.new do | 
					
						
							| 
									
										
										
										
											2018-09-28 21:39:52 +05:30
										 |  |  |       usage_banner <<~EOS | 
					
						
							| 
									
										
										
										
											2018-10-15 15:06:33 -04:00
										 |  |  |         `tests` [<options>] | 
					
						
							| 
									
										
										
										
											2018-09-28 21:39:52 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-08 22:49:03 -04:00
										 |  |  |         Run Homebrew's unit and integration tests. | 
					
						
							| 
									
										
										
										
											2018-09-28 21:39:52 +05:30
										 |  |  |       EOS | 
					
						
							|  |  |  |       switch "--coverage", | 
					
						
							| 
									
										
										
										
											2019-04-30 08:44:35 +01:00
										 |  |  |              description: "Generate code coverage reports." | 
					
						
							| 
									
										
										
										
											2018-09-28 21:39:52 +05:30
										 |  |  |       switch "--generic", | 
					
						
							| 
									
										
										
										
											2019-04-30 08:44:35 +01:00
										 |  |  |              description: "Run only OS-agnostic tests." | 
					
						
							| 
									
										
										
										
											2018-09-28 21:39:52 +05:30
										 |  |  |       switch "--no-compat", | 
					
						
							| 
									
										
										
										
											2019-04-30 08:44:35 +01:00
										 |  |  |              description: "Do not load the compatibility layer when running tests." | 
					
						
							| 
									
										
										
										
											2018-09-28 21:39:52 +05:30
										 |  |  |       switch "--online", | 
					
						
							| 
									
										
										
										
											2019-04-30 08:44:35 +01:00
										 |  |  |              description: "Include tests that use the GitHub API and tests that use any of the taps for "\ | 
					
						
							|  |  |  |                           "official external commands." | 
					
						
							| 
									
										
										
										
											2018-09-28 21:39:52 +05:30
										 |  |  |       flag   "--only=", | 
					
						
							| 
									
										
										
										
											2019-04-30 08:44:35 +01:00
										 |  |  |              description: "Run only <test_script>`_spec.rb`. Appending `:`<line_number> will start at a "\ | 
					
						
							|  |  |  |                           "specific line." | 
					
						
							| 
									
										
										
										
											2018-09-28 21:39:52 +05:30
										 |  |  |       flag   "--seed=", | 
					
						
							| 
									
										
										
										
											2019-08-20 00:04:14 -04:00
										 |  |  |              description: "Randomise tests with the specified <value> instead of a random seed." | 
					
						
							| 
									
										
										
										
											2018-04-01 16:47:30 +05:30
										 |  |  |       switch :verbose | 
					
						
							| 
									
										
										
										
											2018-09-28 21:39:52 +05:30
										 |  |  |       switch :debug | 
					
						
							| 
									
										
										
										
											2018-03-25 17:48:22 +05:30
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2018-07-30 18:25:38 +05:30
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2018-09-08 22:21:04 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-30 18:25:38 +05:30
										 |  |  |   def tests | 
					
						
							|  |  |  |     tests_args.parse | 
					
						
							| 
									
										
										
										
											2018-03-25 13:18:23 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-26 22:13:00 +00:00
										 |  |  |     Homebrew.install_bundler_gems! | 
					
						
							|  |  |  |     gem_user_dir = Gem.user_dir | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-21 08:57:39 +02:00
										 |  |  |     HOMEBREW_LIBRARY_PATH.cd do | 
					
						
							| 
									
										
										
										
											2018-08-02 07:20:40 +02:00
										 |  |  |       ENV.delete("HOMEBREW_COLOR") | 
					
						
							|  |  |  |       ENV.delete("HOMEBREW_NO_COLOR") | 
					
						
							| 
									
										
										
										
											2017-02-28 14:33:39 +01:00
										 |  |  |       ENV.delete("HOMEBREW_VERBOSE") | 
					
						
							| 
									
										
										
										
											2018-08-10 04:11:54 +02:00
										 |  |  |       ENV.delete("HOMEBREW_DEBUG") | 
					
						
							| 
									
										
										
										
											2017-02-28 14:33:39 +01:00
										 |  |  |       ENV.delete("VERBOSE") | 
					
						
							| 
									
										
										
										
											2017-02-10 21:21:57 +01:00
										 |  |  |       ENV.delete("HOMEBREW_CASK_OPTS") | 
					
						
							| 
									
										
										
										
											2017-03-21 09:31:09 -05:00
										 |  |  |       ENV.delete("HOMEBREW_TEMP") | 
					
						
							| 
									
										
										
										
											2018-06-06 13:13:45 +02:00
										 |  |  |       ENV.delete("HOMEBREW_NO_GITHUB_API") | 
					
						
							| 
									
										
										
										
											2018-06-07 17:38:47 +02:00
										 |  |  |       ENV.delete("HOMEBREW_NO_EMOJI") | 
					
						
							| 
									
										
										
										
											2018-09-15 05:18:24 +02:00
										 |  |  |       ENV.delete("HOMEBREW_DEVELOPER") | 
					
						
							| 
									
										
										
										
											2019-02-27 14:02:38 +00:00
										 |  |  |       ENV.delete("HOMEBREW_PRY") | 
					
						
							| 
									
										
										
										
											2016-07-04 18:26:44 +01:00
										 |  |  |       ENV["HOMEBREW_NO_ANALYTICS_THIS_RUN"] = "1" | 
					
						
							| 
									
										
										
										
											2018-03-25 13:18:23 +05:30
										 |  |  |       ENV["HOMEBREW_NO_COMPAT"] = "1" if args.no_compat? | 
					
						
							|  |  |  |       ENV["HOMEBREW_TEST_GENERIC_OS"] = "1" if args.generic? | 
					
						
							| 
									
										
										
										
											2018-06-06 13:13:45 +02:00
										 |  |  |       ENV["HOMEBREW_TEST_ONLINE"] = "1" if args.online? | 
					
						
							| 
									
										
										
										
											2017-02-28 14:33:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-20 11:33:00 -08:00
										 |  |  |       ENV["USER"] ||= system_command!("id", args: ["-nu"]).stdout.chomp | 
					
						
							| 
									
										
										
										
											2019-02-20 09:33:00 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-08 12:47:15 -04:00
										 |  |  |       # Avoid local configuration messing with tests, e.g. git being configured | 
					
						
							| 
									
										
										
										
											2018-09-02 12:56:31 +01:00
										 |  |  |       # to use GPG to sign by default | 
					
						
							|  |  |  |       ENV["HOME"] = "#{HOMEBREW_LIBRARY_PATH}/test" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-25 13:18:23 +05:30
										 |  |  |       if args.coverage? | 
					
						
							| 
									
										
										
										
											2016-01-18 15:33:59 +01:00
										 |  |  |         ENV["HOMEBREW_TESTS_COVERAGE"] = "1" | 
					
						
							| 
									
										
										
										
											2016-09-19 23:00:58 +01:00
										 |  |  |         FileUtils.rm_f "test/coverage/.resultset.json" | 
					
						
							| 
									
										
										
										
											2016-01-18 15:33:59 +01:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2015-12-23 00:34:19 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-04 14:54:09 +01:00
										 |  |  |       # Override author/committer as global settings might be invalid and thus | 
					
						
							|  |  |  |       # will cause silent failure during the setup of dummy Git repositories. | 
					
						
							|  |  |  |       %w[AUTHOR COMMITTER].each do |role| | 
					
						
							|  |  |  |         ENV["GIT_#{role}_NAME"] = "brew tests" | 
					
						
							|  |  |  |         ENV["GIT_#{role}_EMAIL"] = "brew-tests@localhost" | 
					
						
							| 
									
										
										
										
											2017-01-22 20:54:37 +00:00
										 |  |  |         ENV["GIT_#{role}_DATE"]  = "Sun Jan 22 19:59:13 2017 +0000" | 
					
						
							| 
									
										
										
										
											2016-01-04 14:54:09 +01:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-28 14:33:39 +01:00
										 |  |  |       parallel = true | 
					
						
							| 
									
										
										
										
											2016-09-20 14:57:08 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-25 13:18:23 +05:30
										 |  |  |       files = if args.only | 
					
						
							|  |  |  |         test_name, line = args.only.split(":", 2) | 
					
						
							| 
									
										
										
										
											2016-09-20 14:57:08 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-28 14:33:39 +01:00
										 |  |  |         if line.nil? | 
					
						
							|  |  |  |           Dir.glob("test/{#{test_name},#{test_name}/**/*}_spec.rb") | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |           parallel = false | 
					
						
							|  |  |  |           ["test/#{test_name}_spec.rb:#{line}"] | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       else | 
					
						
							| 
									
										
										
										
											2019-02-21 15:41:42 +00:00
										 |  |  |         Dir.glob("test/**/*_spec.rb") | 
					
						
							| 
									
										
										
										
											2016-01-20 07:06:09 +01:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-09-20 14:57:08 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-27 14:02:38 +00:00
										 |  |  |       parallel_args = if ENV["CI"] | 
					
						
							| 
									
										
										
										
											2017-05-08 08:38:25 +01:00
										 |  |  |         %w[
 | 
					
						
							|  |  |  |           --combine-stderr | 
					
						
							|  |  |  |           --serialize-stdout | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |         %w[
 | 
					
						
							|  |  |  |           --nice | 
					
						
							|  |  |  |         ] | 
					
						
							| 
									
										
										
										
											2017-02-28 14:33:39 +01:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2017-02-10 21:21:57 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-15 09:14:44 +00:00
										 |  |  |       # Generate seed ourselves and output later to avoid multiple different | 
					
						
							|  |  |  |       # seeds being output when running parallel tests. | 
					
						
							| 
									
										
										
										
											2018-06-06 23:34:19 -04:00
										 |  |  |       seed = args.seed || rand(0xFFFF).to_i | 
					
						
							| 
									
										
										
										
											2017-12-15 09:14:44 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-05 18:40:01 +05:30
										 |  |  |       bundle_args = ["-I", HOMEBREW_LIBRARY_PATH/"test"] | 
					
						
							|  |  |  |       bundle_args += %W[
 | 
					
						
							| 
									
										
										
										
											2017-12-15 09:14:44 +00:00
										 |  |  |         --seed #{seed} | 
					
						
							| 
									
										
										
										
											2017-05-08 08:38:25 +01:00
										 |  |  |         --color | 
					
						
							|  |  |  |         --require spec_helper | 
					
						
							| 
									
										
										
										
											2017-12-15 09:14:44 +00:00
										 |  |  |         --format NoSeedProgressFormatter | 
					
						
							| 
									
										
										
										
											2017-05-08 08:38:25 +01:00
										 |  |  |         --format ParallelTests::RSpec::RuntimeLogger | 
					
						
							| 
									
										
										
										
											2017-05-28 16:59:53 +01:00
										 |  |  |         --out #{HOMEBREW_CACHE}/tests/parallel_runtime_rspec.log | 
					
						
							| 
									
										
										
										
											2017-02-10 21:21:57 +01:00
										 |  |  |       ] | 
					
						
							| 
									
										
										
										
											2017-02-21 21:55:11 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-28 14:33:39 +01:00
										 |  |  |       unless OS.mac? | 
					
						
							| 
									
										
										
										
											2018-08-09 15:00:19 +02:00
										 |  |  |         bundle_args << "--tag" << "~needs_macos" << "--tag" << "~cask" | 
					
						
							| 
									
										
										
										
											2017-02-28 14:33:39 +01:00
										 |  |  |         files = files.reject { |p| p =~ %r{^test/(os/mac|cask)(/.*|_spec\.rb)$} } | 
					
						
							| 
									
										
										
										
											2015-07-22 16:04:59 +08:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2017-02-28 14:33:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 20:45:48 -08:00
										 |  |  |       unless OS.linux? | 
					
						
							| 
									
										
										
										
											2018-05-05 18:40:01 +05:30
										 |  |  |         bundle_args << "--tag" << "~needs_linux" | 
					
						
							| 
									
										
										
										
											2017-03-05 20:45:48 -08:00
										 |  |  |         files = files.reject { |p| p =~ %r{^test/os/linux(/.*|_spec\.rb)$} } | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-15 09:14:44 +00:00
										 |  |  |       puts "Randomized with seed #{seed}" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-26 22:13:00 +00:00
										 |  |  |       # Let `bundle` in PATH find its gem. | 
					
						
							|  |  |  |       ENV["GEM_PATH"] = "#{ENV["GEM_PATH"]}:#{gem_user_dir}" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-07 17:28:39 +01:00
										 |  |  |       if parallel | 
					
						
							| 
									
										
										
										
											2019-02-27 14:02:38 +00:00
										 |  |  |         system "bundle", "exec", "parallel_rspec", *parallel_args, "--", *bundle_args, "--", *files | 
					
						
							| 
									
										
										
										
											2017-05-07 17:28:39 +01:00
										 |  |  |       else | 
					
						
							| 
									
										
										
										
											2018-05-05 18:40:01 +05:30
										 |  |  |         system "bundle", "exec", "rspec", *bundle_args, "--", *files | 
					
						
							| 
									
										
										
										
											2017-02-28 14:33:39 +01:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-10 20:12:55 +03:00
										 |  |  |       return if $CHILD_STATUS.success? | 
					
						
							| 
									
										
										
										
											2018-09-17 02:45:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-28 14:33:39 +01:00
										 |  |  |       Homebrew.failed = true | 
					
						
							| 
									
										
										
										
											2012-04-16 16:44:11 -05:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2012-03-25 00:49:18 +11:00
										 |  |  | end |