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 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190
|
local script = "./spec/script.lua"
local script_cmd = "lua"
if package.loaded["luacov.runner"] then
script_cmd = script_cmd .. " -lluacov"
end
script_cmd = script_cmd .. " " .. script
local function get_output(args)
local handler = io.popen(script_cmd .. " " .. args .. " 2>&1", "r")
local output = handler:read("*a")
handler:close()
return output
end
describe("tests related to CLI behaviour #unsafe", function()
describe("error messages", function()
it("generates correct error message without arguments", function()
assert.equal([[
Usage: ]]..script..[[ [-h] [-v] <input> [<command>] ...
Error: missing argument 'input'
]], get_output(""))
end)
it("generates correct error message with too many arguments", function()
assert.equal([[
Usage: ]]..script..[[ [-h] [-v] <input> [<command>] ...
Error: unknown command 'bar'
]], get_output("foo bar"))
end)
it("generates correct error message with unexpected argument", function()
assert.equal([[
Usage: ]]..script..[[ [-h] [-v] <input> [<command>] ...
Error: option '--verbose' does not take arguments
]], get_output("--verbose=true"))
end)
it("generates correct error message with unexpected option", function()
assert.equal([[
Usage: ]]..script..[[ [-h] [-v] <input> [<command>] ...
Error: unknown option '-q'
Did you mean one of these: '-h' '-v'?
]], get_output("-vq"))
end)
it("generates correct error message and tip with unexpected command", function()
assert.equal([[
Usage: ]]..script..[[ [-h] [-v] <input> [<command>] ...
Error: unknown command 'nstall'
Did you mean 'install'?
]], get_output("foo nstall"))
end)
it("generates correct error message without arguments in command", function()
assert.equal([[
Usage: ]]..script..[[ install [-h] [-f <from>] <rock> [<version>]
Error: missing argument 'rock'
]], get_output("foo install"))
end)
it("generates correct error message and tip in command", function()
assert.equal([[
Usage: ]]..script..[[ install [-h] [-f <from>] <rock> [<version>]
Error: unknown option '--form'
Did you mean '--from'?
]], get_output("foo install bar --form=there"))
end)
end)
describe("help messages", function()
it("generates correct help message using help flag", function()
assert.equal([[
Usage: ]]..script..[[ [-h] [-v] <input> [<command>] ...
A testing program.
Arguments:
input
Options:
-h, --help Show this help message and exit.
-v, --verbose Sets verbosity level.
Commands:
help Show help for commands.
install Install a rock.
]], get_output("--help"))
end)
it("generates correct help message using help command", function()
assert.equal([[
Usage: ]]..script..[[ [-h] [-v] <input> [<command>] ...
A testing program.
Arguments:
input
Options:
-h, --help Show this help message and exit.
-v, --verbose Sets verbosity level.
Commands:
help Show help for commands.
install Install a rock.
]], get_output("foo help"))
end)
it("generates correct help message for command using help flag", function()
assert.equal([[
Usage: ]]..script..[[ install [-h] [-f <from>] <rock> [<version>]
Install a rock.
Arguments:
rock Name of the rock.
version Version of the rock.
Options:
-h, --help Show this help message and exit.
-f <from>, Fetch the rock from this server.
--from <from>
]], get_output("foo install --help"))
end)
it("generates correct help message for command using help command", function()
assert.equal([[
Usage: ]]..script..[[ install [-h] [-f <from>] <rock> [<version>]
Install a rock.
Arguments:
rock Name of the rock.
version Version of the rock.
Options:
-h, --help Show this help message and exit.
-f <from>, Fetch the rock from this server.
--from <from>
]], get_output("foo help install"))
end)
end)
describe("data flow", function()
it("works with one argument", function()
local handler = io.popen(script_cmd .. " foo 2>&1", "r")
assert.equal("foo", handler:read "*l")
assert.equal("0", handler:read "*l")
handler:close()
end)
it("works with one argument and a flag", function()
local handler = io.popen(script_cmd .. " -v foo --verbose 2>&1", "r")
assert.equal("foo", handler:read "*l")
assert.equal("2", handler:read "*l")
handler:close()
end)
it("works with command", function()
local handler = io.popen(script_cmd .. " foo -v install bar 2>&1", "r")
assert.equal("foo", handler:read "*l")
assert.equal("1", handler:read "*l")
assert.equal("true", handler:read "*l")
assert.equal("bar", handler:read "*l")
assert.equal("nil", handler:read "*l")
assert.equal("nil", handler:read "*l")
handler:close()
end)
it("works with command and options", function()
local handler = io.popen(script_cmd .. " foo --verbose install bar 0.1 --from=there -vv 2>&1", "r")
assert.equal("foo", handler:read "*l")
assert.equal("2", handler:read "*l")
assert.equal("true", handler:read "*l")
assert.equal("bar", handler:read "*l")
assert.equal("0.1", handler:read "*l")
assert.equal("there", handler:read "*l")
handler:close()
end)
end)
end)
|