| 
									
										
										
										
											2024-03-06 21:12:17 -08:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require "abstract_command" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | RSpec.describe Homebrew::AbstractCommand do | 
					
						
							|  |  |  |   describe "subclasses" do | 
					
						
							|  |  |  |     before do | 
					
						
							| 
									
										
										
										
											2024-03-21 19:30:17 -04:00
										 |  |  |       test_cat = Class.new(described_class) do | 
					
						
							| 
									
										
										
										
											2024-03-06 21:12:17 -08:00
										 |  |  |         cmd_args do | 
					
						
							| 
									
										
										
										
											2024-03-21 17:46:35 -07:00
										 |  |  |           description "test" | 
					
						
							| 
									
										
										
										
											2024-03-06 21:12:17 -08:00
										 |  |  |           switch "--foo" | 
					
						
							|  |  |  |           flag "--bar=" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |         def run; end | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2024-03-21 19:30:17 -04:00
										 |  |  |       stub_const("TestCat", test_cat) | 
					
						
							| 
									
										
										
										
											2024-03-06 21:12:17 -08:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     describe "parsing args" do | 
					
						
							|  |  |  |       it "parses valid args" do | 
					
						
							| 
									
										
										
										
											2024-03-21 19:30:17 -04:00
										 |  |  |         expect { TestCat.new(["--foo"]).run }.not_to raise_error | 
					
						
							| 
									
										
										
										
											2024-03-06 21:12:17 -08:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it "allows access to args" do | 
					
						
							| 
									
										
										
										
											2024-03-21 19:30:17 -04:00
										 |  |  |         expect(TestCat.new(["--bar", "baz"]).args[:bar]).to eq("baz") | 
					
						
							| 
									
										
										
										
											2024-03-06 21:12:17 -08:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it "raises on invalid args" do | 
					
						
							| 
									
										
										
										
											2024-03-21 19:30:17 -04:00
										 |  |  |         expect { TestCat.new(["--bat"]) }.to raise_error(OptionParser::InvalidOption) | 
					
						
							| 
									
										
										
										
											2024-03-06 21:12:17 -08:00
										 |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     describe "command names" do | 
					
						
							|  |  |  |       it "has a default command name" do | 
					
						
							| 
									
										
										
										
											2024-03-21 19:30:17 -04:00
										 |  |  |         expect(TestCat.command_name).to eq("test-cat") | 
					
						
							| 
									
										
										
										
											2024-03-06 21:12:17 -08:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it "can lookup command" do | 
					
						
							| 
									
										
										
										
											2024-03-21 19:30:17 -04:00
										 |  |  |         expect(described_class.command("test-cat")).to be(TestCat) | 
					
						
							| 
									
										
										
										
											2024-03-06 21:12:17 -08:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-21 19:51:18 -07:00
										 |  |  |       it "removes -cmd suffix from command name" do | 
					
						
							|  |  |  |         require "dev-cmd/formula" | 
					
						
							|  |  |  |         expect(Homebrew::DevCmd::FormulaCmd.command_name).to eq("formula") | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-06 21:12:17 -08:00
										 |  |  |       describe "when command name is overridden" do | 
					
						
							|  |  |  |         before do | 
					
						
							|  |  |  |           tac = Class.new(described_class) do | 
					
						
							|  |  |  |             def self.command_name = "t-a-c" | 
					
						
							|  |  |  |             def run; end | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |           stub_const("Tac", tac) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         it "can be looked up by command name" do | 
					
						
							|  |  |  |           expect(described_class.command("t-a-c")).to be(Tac) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2024-03-21 14:02:42 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |   describe "command paths" do | 
					
						
							|  |  |  |     it "match command name" do | 
					
						
							|  |  |  |       ["cmd", "dev-cmd"].each do |dir| | 
					
						
							| 
									
										
										
										
											2024-04-04 09:48:17 -07:00
										 |  |  |         Dir[File.join(__dir__, "../#{dir}", "*.rb")].each do |file| | 
					
						
							|  |  |  |           filename = File.basename(file, ".rb") | 
					
						
							|  |  |  |           require(file) | 
					
						
							|  |  |  |           command = described_class.command(filename) | 
					
						
							|  |  |  |           expect(Pathname(File.join(__dir__, "../#{dir}/#{command.command_name}.rb"))).to exist | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2024-03-21 14:02:42 -07:00
										 |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2024-03-06 21:12:17 -08:00
										 |  |  | end |