| 
									
										
										
										
											2020-10-10 14:16:11 +02:00
										 |  |  | # typed: false | 
					
						
							| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-09 18:03:15 +02:00
										 |  |  | require "utils/formatter" | 
					
						
							|  |  |  | require "utils/tty" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe Formatter do | 
					
						
							|  |  |  |   describe "::columns" do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |     subject(:columns) { described_class.columns(input) } | 
					
						
							| 
									
										
										
										
											2018-03-25 13:30:37 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-09 18:03:15 +02:00
										 |  |  |     let(:input) { | 
					
						
							| 
									
										
										
										
											2017-05-29 18:24:52 +01:00
										 |  |  |       %w[
 | 
					
						
							|  |  |  |         aa | 
					
						
							|  |  |  |         bbb | 
					
						
							|  |  |  |         ccc | 
					
						
							|  |  |  |         dd | 
					
						
							| 
									
										
										
										
											2016-10-09 18:03:15 +02:00
										 |  |  |       ] | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "doesn't output columns if $stdout is not a TTY." do | 
					
						
							|  |  |  |       allow_any_instance_of(IO).to receive(:tty?).and_return(false) | 
					
						
							|  |  |  |       allow(Tty).to receive(:width).and_return(10) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |       expect(columns).to eq( | 
					
						
							| 
									
										
										
										
											2016-10-09 18:03:15 +02:00
										 |  |  |         "aa\n" \ | 
					
						
							|  |  |  |         "bbb\n" \ | 
					
						
							|  |  |  |         "ccc\n" \ | 
					
						
							| 
									
										
										
										
											2017-02-12 15:06:54 +00:00
										 |  |  |         "dd\n", | 
					
						
							| 
									
										
										
										
											2016-10-09 18:03:15 +02:00
										 |  |  |       ) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     describe "$stdout is a TTY" do | 
					
						
							|  |  |  |       it "outputs columns" do | 
					
						
							|  |  |  |         allow_any_instance_of(IO).to receive(:tty?).and_return(true) | 
					
						
							|  |  |  |         allow(Tty).to receive(:width).and_return(10) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |         expect(columns).to eq( | 
					
						
							| 
									
										
										
										
											2016-10-09 18:03:15 +02:00
										 |  |  |           "aa    ccc\n" \ | 
					
						
							| 
									
										
										
										
											2017-02-12 15:06:54 +00:00
										 |  |  |           "bbb   dd\n", | 
					
						
							| 
									
										
										
										
											2016-10-09 18:03:15 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it "outputs only one line if everything fits" do | 
					
						
							|  |  |  |         allow_any_instance_of(IO).to receive(:tty?).and_return(true) | 
					
						
							|  |  |  |         allow(Tty).to receive(:width).and_return(20) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |         expect(columns).to eq( | 
					
						
							| 
									
										
										
										
											2017-02-12 15:06:54 +00:00
										 |  |  |           "aa   bbb  ccc  dd\n", | 
					
						
							| 
									
										
										
										
											2016-10-09 18:03:15 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     describe "with empty input" do | 
					
						
							|  |  |  |       let(:input) { [] } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it { is_expected.to eq("\n") } | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |