aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThijs Schreijer <thijs@thijsschreijer.nl>2024-03-24 15:02:15 +0100
committerGitHub <noreply@github.com>2024-03-24 15:02:15 +0100
commit47c24eed0191f8f72646be63dee94ac2b35eb062 (patch)
tree808fc02c608fd56e93cd502069adcba9c561df7d
parent8fe13074a7d9fdd88c5423d1e9c5fcc4ec43a57b (diff)
downloadluasystem-47c24eed0191f8f72646be63dee94ac2b35eb062.tar.gz
luasystem-47c24eed0191f8f72646be63dee94ac2b35eb062.tar.bz2
luasystem-47c24eed0191f8f72646be63dee94ac2b35eb062.zip
chore(test): add tests (manual) for isatty terminal function (#22)
-rw-r--r--.github/workflows/build.yml2
-rw-r--r--.luacheckrc3
-rw-r--r--doc_topics/02-development.md12
-rw-r--r--spec/03-environment_spec.lua4
-rw-r--r--spec/04-term_helper.lua13
-rw-r--r--spec/04-term_spec.lua94
-rw-r--r--spec/helpers.lua16
7 files changed, 140 insertions, 4 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index fe8295e..86b74fe 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -106,4 +106,4 @@ jobs:
106 106
107 - name: test 107 - name: test
108 run: | 108 run: |
109 busted --Xoutput "--color" 109 busted --exclude-tags=manual --Xoutput "--color"
diff --git a/.luacheckrc b/.luacheckrc
index 4dc4ec4..ad11fee 100644
--- a/.luacheckrc
+++ b/.luacheckrc
@@ -3,7 +3,8 @@ redefined = false
3max_line_length = false 3max_line_length = false
4 4
5globals = { 5globals = {
6-- "ngx", 6 "win_it",
7 "nix_it",
7} 8}
8 9
9not_globals = { 10not_globals = {
diff --git a/doc_topics/02-development.md b/doc_topics/02-development.md
new file mode 100644
index 0000000..8925b83
--- /dev/null
+++ b/doc_topics/02-development.md
@@ -0,0 +1,12 @@
1# 2. Development
2
3Some tests cannot be run in CI becasue they test system specifics that
4simply do not exist in a CI environment. An example is the `isatty` function
5Which cannot be set to return a truthy value in CI.
6
7The tests concerned are all labelled with `#manual`. And in CI they will
8be skipped because `--exclude-tags=manual` is being passed to the
9`busted` command line.
10
11Hence if tests like this are being added, then please ensure the tests
12pass locally, and do not rely on CI only.
diff --git a/spec/03-environment_spec.lua b/spec/03-environment_spec.lua
index 842ed6f..96f4a78 100644
--- a/spec/03-environment_spec.lua
+++ b/spec/03-environment_spec.lua
@@ -1,5 +1,6 @@
1-- Import the library that contains the environment-related functions 1-- Import the library that contains the environment-related functions
2local system = require("system") 2local system = require("system")
3require("spec.helpers")
3 4
4describe("Environment Variables:", function() 5describe("Environment Variables:", function()
5 6
@@ -11,9 +12,8 @@ describe("Environment Variables:", function()
11 end) 12 end)
12 13
13 14
14 local func = system.windows and pending or it --pending on Windows
15 -- Windows will unset a variable if set as an empty string 15 -- Windows will unset a variable if set as an empty string
16 func("should set an empty environment variable value", function() 16 nix_it("should set an empty environment variable value", function()
17 assert.is_true(system.setenv("TEST_VAR", "")) 17 assert.is_true(system.setenv("TEST_VAR", ""))
18 assert.is_equal("", system.getenv("TEST_VAR")) 18 assert.is_equal("", system.getenv("TEST_VAR"))
19 end) 19 end)
diff --git a/spec/04-term_helper.lua b/spec/04-term_helper.lua
new file mode 100644
index 0000000..7fd39d2
--- /dev/null
+++ b/spec/04-term_helper.lua
@@ -0,0 +1,13 @@
1-- sub-script executed for isatty test
2local writefile = require("pl.utils").writefile
3local isatty = require("system").isatty
4assert(arg[1] == "--", "missing -- argument")
5local tempfile = assert(arg[2], "missing tempfile argument")
6
7-- print("my temp file: ", tempfile)
8
9assert(writefile(tempfile, [[{
10 stdin = ]]..tostring(isatty(io.stdin))..[[,
11 stdout = ]]..tostring(isatty(io.stdout))..[[,
12 stderr = ]]..tostring(isatty(io.stderr))..[[,
13}]]))
diff --git a/spec/04-term_spec.lua b/spec/04-term_spec.lua
new file mode 100644
index 0000000..a2034aa
--- /dev/null
+++ b/spec/04-term_spec.lua
@@ -0,0 +1,94 @@
1-- Import the library that contains the environment-related functions
2local system = require("system")
3require("spec.helpers")
4
5describe("Terminal:", function()
6
7 describe("isatty()", function()
8
9 local newtmpfile = require("pl.path").tmpname
10
11 -- set each param to true to make it a tty, to false for a stream
12 local function getttyresults(sin, sout, serr)
13 assert(type(sin) == "boolean", "sin must be a boolean")
14 assert(type(sout) == "boolean", "sout must be a boolean")
15 assert(type(serr) == "boolean", "serr must be a boolean")
16
17 local tmpfile = "./spec/04-term_helper.output"
18 local execcmd = "lua ./spec/04-term_helper.lua -- " .. tmpfile
19
20 sin = sin and "" or 'echo "hello" | '
21 if system.windows then
22 sout = sout and "" or (" > " .. newtmpfile())
23 serr = serr and "" or (" 2> " .. newtmpfile())
24 else
25 sout = sout and "" or (" > " .. newtmpfile())
26 serr = serr and "" or (" 2> " .. newtmpfile())
27 end
28
29 local cmd = sin .. execcmd .. sout .. serr
30
31 -- print("cmd: ", cmd)
32
33 os.remove(tmpfile)
34 assert(os.execute(cmd))
35 local result = assert(require("pl.utils").readfile(tmpfile))
36 os.remove(tmpfile)
37
38 -- print("result: ", result)
39
40 return assert(require("pl.compat").load("return " .. result))()
41 end
42
43
44
45 it("returns true for all if a terminal #manual", function()
46 assert.are.same(
47 {
48 stdin = true,
49 stdout = true,
50 stderr = true,
51 },
52 getttyresults(true, true, true)
53 )
54 end)
55
56
57 it("returns false for stdin if not a terminal #manual", function()
58 assert.are.same(
59 {
60 stdin = false,
61 stdout = true,
62 stderr = true,
63 },
64 getttyresults(false, true, true)
65 )
66 end)
67
68
69 it("returns false for stdout if not a terminal #manual", function()
70 assert.are.same(
71 {
72 stdin = true,
73 stdout = false,
74 stderr = true,
75 },
76 getttyresults(true, false, true)
77 )
78 end)
79
80
81 it("returns false for stderr if not a terminal #manual", function()
82 assert.are.same(
83 {
84 stdin = true,
85 stdout = true,
86 stderr = false,
87 },
88 getttyresults(true, true, false)
89 )
90 end)
91
92 end)
93
94end)
diff --git a/spec/helpers.lua b/spec/helpers.lua
new file mode 100644
index 0000000..8f766e7
--- /dev/null
+++ b/spec/helpers.lua
@@ -0,0 +1,16 @@
1local busted = require("busted")
2
3local function is_windows()
4 return package.config:sub(1,1) == "\\"
5end
6
7local function postfixer(postfix)
8 return function(description, ...)
9 return busted.pending(description.." ["..postfix.."]", ...)
10 end
11end
12
13-- win_it only executes on Windows, and is "pending" otherwise
14win_it = is_windows() and busted.it or postfixer("Windows only")
15-- nix_it only executes on Unix/Mac, and is "pending" otherwise
16nix_it = is_windows() and postfixer("Unix/Mac only") or busted.it