class Slightish::TestCase
Attributes
actual_error_output[R]
actual_exit_code[R]
actual_output[R]
command[R]
end_line[RW]
expected_error_output[R]
expected_exit_code[RW]
expected_output[R]
raw_command[R]
raw_expected_error_output[R]
raw_expected_output[R]
source_file[R]
start_line[RW]
Public Class Methods
new(source_file)
click to toggle source
# File lib/slightish/test_case.rb, line 12 def initialize(source_file) @source_file = source_file @expected_exit_code = 0 @start_line = @end_line = -1 @raw_command = @command = nil @raw_expected_output = @expected_output = nil @raw_expected_error_output = @expected_error_output = nil @actual_output = @actual_error_output = nil @actual_exit_code = nil end
Public Instance Methods
append_command(str)
click to toggle source
# File lib/slightish/test_case.rb, line 69 def append_command(str) if @raw_command.nil? @raw_command = str else # bash eats newlines from multiline strings, so no \n here # For example: # "echo a\ # b" # produces "ab" @raw_command += str end end
append_expected_error_output(str)
click to toggle source
# File lib/slightish/test_case.rb, line 90 def append_expected_error_output(str) if @raw_expected_error_output.nil? @raw_expected_error_output = str else @raw_expected_error_output += "\n" + str end end
append_expected_output(str)
click to toggle source
# File lib/slightish/test_case.rb, line 82 def append_expected_output(str) if @raw_expected_output.nil? @raw_expected_output = str else @raw_expected_output += "\n" + str end end
failed?()
click to toggle source
# File lib/slightish/test_case.rb, line 39 def failed? !passed? end
failure_description()
click to toggle source
# File lib/slightish/test_case.rb, line 43 def failure_description res = '' res += output_failure_description('stdout', @expected_output, @actual_output) unless @expected_output == @actual_output if @expected_error_output != @actual_error_output res += "\n\n" unless res.empty? res += output_failure_description('stderr', @expected_error_output, @actual_error_output) end if @actual_exit_code != @expected_exit_code res += "\n\n" unless res.empty? res += 'Expected exit code: '.red.bold + @expected_exit_code.to_s.gray + "\n" res += 'Actual exit code: '.green.bold + @actual_exit_code.to_s.gray end res end
passed?()
click to toggle source
# File lib/slightish/test_case.rb, line 33 def passed? @actual_output == @expected_output && @actual_error_output == @expected_error_output && @actual_exit_code == @expected_exit_code end
run(sandbox)
click to toggle source
# File lib/slightish/test_case.rb, line 24 def run(sandbox) expand(sandbox) @actual_output, @actual_error_output, process_status = Open3.capture3(@command, { chdir: sandbox.path }) @actual_output.chomp! @actual_error_output.chomp! @actual_exit_code = process_status.exitstatus end
source_description()
click to toggle source
# File lib/slightish/test_case.rb, line 61 def source_description if @start_line == @end_line "#{@source_file}:#{@start_line}" else "#{@source_file}:#{@start_line}-#{@end_line}" end end
Private Instance Methods
expand(sandbox)
click to toggle source
# File lib/slightish/test_case.rb, line 120 def expand(sandbox) @command = @raw_command.expand(chdir: sandbox.path, source: source_description) @expected_output = (@raw_expected_output || '').expand(chdir: sandbox.path, source: source_description) @expected_error_output = (@raw_expected_error_output || '').expand(chdir: sandbox.path, source: source_description) end
output_failure_description(name, expected, actual)
click to toggle source
# File lib/slightish/test_case.rb, line 100 def output_failure_description(name, expected, actual) res = '' if expected.empty? res += "Expected #{name}: empty\n".red.bold else res += "Expected #{name}:\n".red.bold res += expected.gray + "\n" end if actual.empty? res += "Actual #{name}: empty".green.bold else res += "Actual #{name}:\n".green.bold res += actual.gray end res end