1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
require "helper"
describe Thor::Shell::Color do
def shell
@shell ||= Thor::Shell::Color.new
end
before do
allow($stdout).to receive(:tty?).and_return(true)
allow_any_instance_of(StringIO).to receive(:tty?).and_return(true)
end
describe "#ask" do
it "sets the color if specified and tty?" do
expect(Thor::LineEditor).to receive(:readline).with("\e[32mIs this green? \e[0m", anything).and_return("yes")
shell.ask "Is this green?", :green
expect(Thor::LineEditor).to receive(:readline).with("\e[32mIs this green? [Yes, No, Maybe] \e[0m", anything).and_return("Yes")
shell.ask "Is this green?", :green, :limited_to => %w[Yes No Maybe]
end
end
describe "#say" do
it "set the color if specified and tty?" do
out = capture(:stdout) do
shell.say "Wow! Now we have colors!", :green
end
expect(out.chomp).to eq("\e[32mWow! Now we have colors!\e[0m")
end
it "does not set the color if output is not a tty" do
out = capture(:stdout) do
expect($stdout).to receive(:tty?).and_return(false)
shell.say "Wow! Now we have colors!", :green
end
expect(out.chomp).to eq("Wow! Now we have colors!")
end
it "does not use a new line even with colors" do
out = capture(:stdout) do
shell.say "Wow! Now we have colors! ", :green
end
expect(out.chomp).to eq("\e[32mWow! Now we have colors! \e[0m")
end
it "handles an Array of colors" do
out = capture(:stdout) do
shell.say "Wow! Now we have colors *and* background colors", [:green, :on_red, :bold]
end
expect(out.chomp).to eq("\e[32m\e[41m\e[1mWow! Now we have colors *and* background colors\e[0m")
end
end
describe "#say_status" do
it "uses color to say status" do
out = capture(:stdout) do
shell.say_status :conflict, "README", :red
end
expect(out.chomp).to eq("\e[1m\e[31m conflict\e[0m README")
end
end
describe "#set_color" do
it "colors a string with a foreground color" do
red = shell.set_color "hi!", :red
expect(red).to eq("\e[31mhi!\e[0m")
end
it "colors a string with a background color" do
on_red = shell.set_color "hi!", :white, :on_red
expect(on_red).to eq("\e[37m\e[41mhi!\e[0m")
end
it "colors a string with a bold color" do
bold = shell.set_color "hi!", :white, true
expect(bold).to eq("\e[1m\e[37mhi!\e[0m")
bold = shell.set_color "hi!", :white, :bold
expect(bold).to eq("\e[37m\e[1mhi!\e[0m")
bold = shell.set_color "hi!", :white, :on_red, :bold
expect(bold).to eq("\e[37m\e[41m\e[1mhi!\e[0m")
end
it "does nothing when there are no colors" do
colorless = shell.set_color "hi!", nil
expect(colorless).to eq("hi!")
colorless = shell.set_color "hi!"
expect(colorless).to eq("hi!")
end
it "does nothing when the terminal does not support color" do
allow($stdout).to receive(:tty?).and_return(false)
colorless = shell.set_color "hi!", :white
expect(colorless).to eq("hi!")
end
end
describe "#file_collision" do
describe "when a block is given" do
it "invokes the diff command" do
allow($stdout).to receive(:print)
allow($stdout).to receive(:tty?).and_return(true)
expect(Thor::LineEditor).to receive(:readline).and_return("d", "n")
output = capture(:stdout) { shell.file_collision("spec/fixtures/doc/README") { "README\nEND\n" } }
expect(output).to match(/\e\[31m\- __start__\e\[0m/)
expect(output).to match(/^ README/)
expect(output).to match(/\e\[32m\+ END\e\[0m/)
end
end
end
end
|