File: integrity_spec.lua

package info (click to toggle)
lua-argparse 0.7.1-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 356 kB
  • sloc: python: 38; makefile: 15
file content (190 lines) | stat: -rw-r--r-- 5,655 bytes parent folder | download | duplicates (2)
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)