spec/buildbox/buildbox/command_spec.rb in buildbox-0.0.4 vs spec/buildbox/buildbox/command_spec.rb in buildbox-0.1

- old
+ new

@@ -1,76 +1,80 @@ +# encoding: UTF-8 + require "spec_helper" describe Buildbox::Command do - let(:command) { Buildbox::Command.new } - describe "#run" do it "successfully runs and returns the output from a simple comment" do - result = command.run('echo hello world') + result = Buildbox::Command.run('echo hello world') - result.should be_success - result.output.should == 'hello world' + result.exit_status.should == 0 + result.output.should == "hello world" end it "redirects stdout to stderr" do - result = command.run('echo hello world 1>&2') + result = Buildbox::Command.run('echo hello world 1>&2') - result.should be_success - result.output.should == 'hello world' + result.exit_status.should == 0 + result.output.should == "hello world" end it "handles commands that fail and returns the correct status" do - result = command.run('(exit 1)') + result = Buildbox::Command.run('(exit 1)') - result.should_not be_success + result.exit_status.should_not == 0 result.output.should == '' end it "handles running malformed commands" do - result = command.run('if (') + result = Buildbox::Command.run('if (') - result.should_not be_success + result.exit_status.should_not == 0 # bash 3.2.48 prints "syntax error" in lowercase. # freebsd 9.1 /bin/sh prints "Syntax error" with capital S. # zsh 5.0.2 prints "parse error" which we do not handle. # localized systems will print the message in not English which # we do not handle either. result.output.should =~ /(syntax|parse) error/i end it "can collect output in chunks" do chunked_output = '' - result = command.run('echo hello world') do |result, chunk| - chunked_output += chunk + result = Buildbox::Command.run('echo hello world') do |chunk| + unless chunk.nil? + chunked_output += chunk + end end - result.should be_success - result.output.should == 'hello world' + result.exit_status.should == 0 + result.output.should == "hello world" chunked_output.should == "hello world\r\n" end it "can collect chunks at paticular intervals" do - command = Buildbox::Command.new(nil, 0.1) + command = Buildbox::Command.new(nil, :read_interval => 0.1) chunked_output = '' - result = command.run('sleep 0.5; echo hello world') do |result, chunk| - chunked_output += chunk + result = Buildbox::Command.run('sleep 0.5; echo hello world') do |chunk| + unless chunk.nil? + chunked_output += chunk + end end - result.should be_success - result.output.should == 'hello world' + result.exit_status.should == 0 + result.output.should == "hello world" chunked_output.should == "hello world\r\n" end - it 'passes a result object to the block' - it "can collect chunks from within a thread" do chunked_output = '' result = nil worker_thread = Thread.new do - result = command.run('echo before sleep; sleep 1; echo after sleep') do |result, chunk| - chunked_output += chunk + result = Buildbox::Command.run('echo before sleep; sleep 1; echo after sleep') do |chunk| + unless chunk.nil? + chunked_output += chunk + end end end worker_thread.run sleep(0.5) @@ -78,40 +82,49 @@ chunked_output.should == "before sleep\r\n" worker_thread.join result.should_not be_nil - result.should be_success + result.exit_status.should == 0 result.output.should == "before sleep\r\nafter sleep" chunked_output.should == "before sleep\r\nafter sleep\r\n" end it 'returns a result when running an invalid command in a thread' do result = nil second_result = nil thread = Thread.new do - result = command.run('sillycommandlololol') - second_result = command.run('export FOO=bar; doesntexist.rb') + result = Buildbox::Command.run('sillycommandlololol') + second_result = Buildbox::Command.run('export FOO=bar; doesntexist.rb') end thread.join - result.should_not be_success + result.exit_status.should_not == 0 result.output.should =~ /sillycommandlololol.+not found/ - second_result.should_not be_success + second_result.exit_status.should_not == 0 # osx: `sh: doesntexist.rb: command not found` # ubuntu: `sh: 1: doesntexist.rb: not found` second_result.output.should =~ /doesntexist.rb:.+not found/ end it "captures color'd output" do chunked_output = '' - result = command.run("rspec #{FIXTURES_PATH.join('rspec', 'test_spec.rb')} --color") do |result, chunk| - chunked_output += chunk + result = Buildbox::Command.run("rspec #{FIXTURES_PATH.join('rspec', 'test_spec.rb')} --color") do |chunk| + chunked_output += chunk unless chunk.nil? end - result.should be_success + result.exit_status.should == 0 result.output.should include("32m") chunked_output.should include("32m") + end + + it "supports utf8 characters" do + result = Buildbox::Command.run('echo "hello"; echo "\xE2\x98\xA0"') + + result.exit_status.should == 0 + # just trying to interact with the string that has utf8 in it to make sure that it + # doesn't blow up like it doesn on osx. this is hacky - need a better test. + added = result.output + "hello" end end end