Skip to content

Commit

Permalink
chore(test): add tests (manual) for isatty terminal function (#22)
Browse files Browse the repository at this point in the history
  • Loading branch information
Tieske authored Mar 24, 2024
1 parent 8fe1307 commit 47c24ee
Show file tree
Hide file tree
Showing 7 changed files with 140 additions and 4 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -106,4 +106,4 @@ jobs:
- name: test
run: |
busted --Xoutput "--color"
busted --exclude-tags=manual --Xoutput "--color"
3 changes: 2 additions & 1 deletion .luacheckrc
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ redefined = false
max_line_length = false

globals = {
-- "ngx",
"win_it",
"nix_it",
}

not_globals = {
Expand Down
12 changes: 12 additions & 0 deletions doc_topics/02-development.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# 2. Development

Some tests cannot be run in CI becasue they test system specifics that
simply do not exist in a CI environment. An example is the `isatty` function
Which cannot be set to return a truthy value in CI.

The tests concerned are all labelled with `#manual`. And in CI they will
be skipped because `--exclude-tags=manual` is being passed to the
`busted` command line.

Hence if tests like this are being added, then please ensure the tests
pass locally, and do not rely on CI only.
4 changes: 2 additions & 2 deletions spec/03-environment_spec.lua
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
-- Import the library that contains the environment-related functions
local system = require("system")
require("spec.helpers")

describe("Environment Variables:", function()

Expand All @@ -11,9 +12,8 @@ describe("Environment Variables:", function()
end)


local func = system.windows and pending or it --pending on Windows
-- Windows will unset a variable if set as an empty string
func("should set an empty environment variable value", function()
nix_it("should set an empty environment variable value", function()
assert.is_true(system.setenv("TEST_VAR", ""))
assert.is_equal("", system.getenv("TEST_VAR"))
end)
Expand Down
13 changes: 13 additions & 0 deletions spec/04-term_helper.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
-- sub-script executed for isatty test
local writefile = require("pl.utils").writefile
local isatty = require("system").isatty
assert(arg[1] == "--", "missing -- argument")
local tempfile = assert(arg[2], "missing tempfile argument")

-- print("my temp file: ", tempfile)

assert(writefile(tempfile, [[{
stdin = ]]..tostring(isatty(io.stdin))..[[,
stdout = ]]..tostring(isatty(io.stdout))..[[,
stderr = ]]..tostring(isatty(io.stderr))..[[,
}]]))
94 changes: 94 additions & 0 deletions spec/04-term_spec.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
-- Import the library that contains the environment-related functions
local system = require("system")
require("spec.helpers")

describe("Terminal:", function()

describe("isatty()", function()

local newtmpfile = require("pl.path").tmpname

-- set each param to true to make it a tty, to false for a stream
local function getttyresults(sin, sout, serr)
assert(type(sin) == "boolean", "sin must be a boolean")
assert(type(sout) == "boolean", "sout must be a boolean")
assert(type(serr) == "boolean", "serr must be a boolean")

local tmpfile = "./spec/04-term_helper.output"
local execcmd = "lua ./spec/04-term_helper.lua -- " .. tmpfile

sin = sin and "" or 'echo "hello" | '
if system.windows then
sout = sout and "" or (" > " .. newtmpfile())
serr = serr and "" or (" 2> " .. newtmpfile())
else
sout = sout and "" or (" > " .. newtmpfile())
serr = serr and "" or (" 2> " .. newtmpfile())
end

local cmd = sin .. execcmd .. sout .. serr

-- print("cmd: ", cmd)

os.remove(tmpfile)
assert(os.execute(cmd))
local result = assert(require("pl.utils").readfile(tmpfile))
os.remove(tmpfile)

-- print("result: ", result)

return assert(require("pl.compat").load("return " .. result))()
end



it("returns true for all if a terminal #manual", function()
assert.are.same(
{
stdin = true,
stdout = true,
stderr = true,
},
getttyresults(true, true, true)
)
end)


it("returns false for stdin if not a terminal #manual", function()
assert.are.same(
{
stdin = false,
stdout = true,
stderr = true,
},
getttyresults(false, true, true)
)
end)


it("returns false for stdout if not a terminal #manual", function()
assert.are.same(
{
stdin = true,
stdout = false,
stderr = true,
},
getttyresults(true, false, true)
)
end)


it("returns false for stderr if not a terminal #manual", function()
assert.are.same(
{
stdin = true,
stdout = true,
stderr = false,
},
getttyresults(true, true, false)
)
end)

end)

end)
16 changes: 16 additions & 0 deletions spec/helpers.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
local busted = require("busted")

local function is_windows()
return package.config:sub(1,1) == "\\"
end

local function postfixer(postfix)
return function(description, ...)
return busted.pending(description.." ["..postfix.."]", ...)
end
end

-- win_it only executes on Windows, and is "pending" otherwise
win_it = is_windows() and busted.it or postfixer("Windows only")
-- nix_it only executes on Unix/Mac, and is "pending" otherwise
nix_it = is_windows() and postfixer("Unix/Mac only") or busted.it

0 comments on commit 47c24ee

Please sign in to comment.