summaryrefslogtreecommitdiff
path: root/tests/modules/stdin/test.lua
blob: 1cef7a362e62c735561eea33782fd8d479cfa619 (plain)
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
function main(t)
local xmake = path.unix(os.programfile())
if os.host() == "windows" then
    xmake = xmake:gsub("/", "\\")
end

local function test_shell(name, cmd, expect)
    print("testing " .. name .. ": " .. cmd)
    local outfile = os.tmpfile()
    local errfile = os.tmpfile()
    local full_cmd = string.format("%s > \"%s\" 2> \"%s\"", cmd, outfile, errfile)
    local ret = -1
    try {
        function ()
            if os.host() ~= "windows" then
        ret = os.execv("sh", {"-c", full_cmd})
            else
        ret = os.exec(full_cmd)
            end
        end
    }
    local out = ""
    if os.isfile(outfile) then
    out = io.readfile(outfile)
    if out and out:find("\0", 1, true) then
        out = out:gsub("\0", "")
    end
    end
    local err = ""
    if os.isfile(errfile) then
        err = io.readfile(errfile)
    end
    local passed = out:find(expect)
    if passed then
        print("  -> passed")
    else
        print("  -> failed")
    end
    print("     out: " .. (out or ""))
    print("     err: " .. (err or ""))
    if not passed then
        raise("[test_stdin]: Test failed! Expect: ", expect)
    end
    os.tryrm(outfile)
    os.tryrm(errfile)
end

local pwsh = ""
if os.host() == "windows" then
    -- Test cmd
    test_shell("cmd_single", string.format('cmd /c echo "print(\'hello_cmd\')" | %s l --stdin', xmake), "hello_cmd")
    test_shell("cmd_calc", string.format('cmd /c echo "local f = 1+1; print(f)" | %s l --stdin', xmake), "2")
    test_shell("cmd_multi", string.format('cmd /c echo "print(\'line1\')\\nprint(\'line2\')" | %s l --stdin', xmake), "line1[\r\n]+line2")
    -- Test powershell (if available)
    local pwsh = "powershell"
    if os.exec("pwsh -v") == 0 then
        pwsh = "pwsh"
    end
    test_shell("pwsh_single", string.format('%s -c "echo \\"print(\'hello_pwsh\')\\" | %s l --stdin"', pwsh, xmake), "hello_pwsh")
    test_shell("pwsh_calc", string.format('%s -c "echo \\"local f = 1+1; print(f)\\" | %s l --stdin"', pwsh, xmake), "2")
    test_shell("pwsh_multi", string.format('%s -c "echo \\"print(\'pline1\')\\nprint(\'pline2\')\\" | %s l --stdin"', pwsh, xmake), "pline1[\r\n]+pline2")
else
    -- Linux/MacOS
    local pwsh = ""
    try { function () os.iorun("pwsh -v"); pwsh = "pwsh" end }
    if pwsh == "" then
        try { function () os.iorun("powershell -v"); pwsh = "powershell" end }
    end

    if pwsh ~= "" then
        test_shell("pwsh_single", string.format('%s -c "echo \\"print(\'hello_pwsh\')\\" | %s l --stdin"', pwsh, xmake), "hello_pwsh")
        test_shell("pwsh_calc", string.format('%s -c "echo \\"local f = 1+1; print(f)\\" | %s l --stdin"', pwsh, xmake), "2")
        test_shell("pwsh_multi", string.format('%s -c "echo \\"print(\'pline1\')\\nprint(\'pline2\')\\" | %s l --stdin"', pwsh, xmake), "pline1[\r\n]+pline2")
    end

    test_shell("sh_single", string.format('echo "print(\'hello_sh\')" | %s l --stdin', xmake), "hello_sh")
    test_shell("sh_calc", string.format('echo "local f = 1+1; print(f)" | %s l --stdin', xmake), "2")
    test_shell("sh_multi", string.format('printf "print(\'shell_line1\')\\nprint(\'shell_line2\')" | %s l --stdin', xmake), "shell_line1[\r\n]+shell_line2")
end
end