73 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
#!/usr/bin/env wdye
 | 
						|
-- Very basic end-to-end testing for CI
 | 
						|
function exec (...)
 | 
						|
	local p = wdye.spawn(...)
 | 
						|
	local out = wdye.expect(p:eof {function (p) return p[0] end})
 | 
						|
	if not out then
 | 
						|
		error "exec() timeout"
 | 
						|
	end
 | 
						|
 | 
						|
	local status = p:wait()
 | 
						|
	if status ~= 0 then
 | 
						|
		io.write(out, "\n")
 | 
						|
		error("exit status " .. status)
 | 
						|
	end
 | 
						|
	return out:gsub("%s+$", "")
 | 
						|
end
 | 
						|
 | 
						|
local temp = exec {"mktemp", "-d"}
 | 
						|
local atexit = {}
 | 
						|
setmetatable(atexit, {__gc = function () exec {"rm", "-rf", "--", temp} end})
 | 
						|
 | 
						|
local env = {XDG_CONFIG_HOME=temp, TERM="xterm"}
 | 
						|
exec {"./xD", "--write-default-cfg", environ=env}
 | 
						|
 | 
						|
-- Run the daemon to test against (assuming the default port 6667)
 | 
						|
local xD = wdye.spawn {"./xD", "-d", environ=env}
 | 
						|
local xC = wdye.spawn {"./xC", environ=env}
 | 
						|
 | 
						|
function send (...) xC:send(...) end
 | 
						|
function expect (string)
 | 
						|
	wdye.expect(xC:exact {string},
 | 
						|
		wdye.timeout {5, function (p) error "xC timeout" end},
 | 
						|
		xC:eof {function (p) error "xC exited prematurely" end})
 | 
						|
end
 | 
						|
 | 
						|
-- Connect to the daemon
 | 
						|
send "/server add localhost\n"
 | 
						|
expect "]"
 | 
						|
send "/set servers.localhost.addresses = \"localhost\"\n"
 | 
						|
expect "Option changed"
 | 
						|
send "/disconnect\n"
 | 
						|
expect "]"
 | 
						|
send "/connect\n"
 | 
						|
expect "Welcome to"
 | 
						|
 | 
						|
-- Try some chatting
 | 
						|
send "/join #test\n"
 | 
						|
expect "has joined"
 | 
						|
send "Hello\n"
 | 
						|
expect "Hello"
 | 
						|
 | 
						|
-- Attributes
 | 
						|
send "\x1bmbBold text! \x1bmc0,5And colors.\n"
 | 
						|
expect "]"
 | 
						|
 | 
						|
-- Try basic commands
 | 
						|
send "/set\n"
 | 
						|
expect "]"
 | 
						|
send "/help\n"
 | 
						|
expect "]"
 | 
						|
 | 
						|
-- Quit
 | 
						|
send "/quit\n"
 | 
						|
expect "Shutting down"
 | 
						|
 | 
						|
local s1 = xC:wait()
 | 
						|
assert(s1 == 0, "xC exited abnormally: " .. s1)
 | 
						|
 | 
						|
-- Send SIGINT (^C)
 | 
						|
xD:send "\003"
 | 
						|
local s2 = xD:wait()
 | 
						|
assert(s2 == 0, "xD exited abnormally: " .. s2)
 |