require 'test_helper' class FilesParamTest < Test::Unit::TestCase include Sprout::TestHelper context "a new FilesParam" do setup do @input1 = File.join(fixtures, "executable", "params", "input.as") @input2 = File.join(fixtures, "executable", "params", "input2.as") @input3 = File.join(fixtures, "executable", "params", "input3.as") @input4 = File.join(fixtures, "executable", "path with spaces", "input.as") @input5 = File.join(fixtures, "executable", "path with spaces", "input2.as") @input6 = File.join(fixtures, "executable", "path with spaces", "input3.as") @param = Sprout::Executable::Files.new @param.name = 'inputs' @param.belongs_to = FakeExecutableTask.new end ['abcd', 1234, true].each do |value| should "throw with non-enumerable assignment of #{value}" do assert_raises Sprout::Errors::ExecutableError do @param.value = value end end end should "allow assignment of enumerables" do @param.value = ['abcd', 'efgh'] end should "allow concatenation on first access" do @param.value << 'abcd' end should "clean each path provided" do # Ensure order is retained: @param.value << @input3 @param.value << @input2 @param.value << @input1 as_each_system do |sys| assert_equal "-inputs+=#{sys.clean_path(@input3)} -inputs+=#{sys.clean_path(@input2)} -inputs+=#{sys.clean_path(@input1)}", @param.to_shell, "As a #{sys}" end end should "clean paths with spaces" do @param.value << @input6 @param.value << @input5 @param.value << @input4 as_each_system do |sys| assert_equal "-inputs+=#{sys.clean_path(@input6)} -inputs+=#{sys.clean_path(@input5)} -inputs+=#{sys.clean_path(@input4)}", @param.to_shell, "As a #{sys}" end end should "defer to to_shell_proc if provided" do @param.to_shell_proc = Proc.new { |param| "proc:#{param.name}:#{param.value.shift}" } @param.value << 'abcd' assert @param.visible?, "Should be visible" assert_equal 'proc:inputs:abcd', @param.to_shell end end end