This repository has been archived by the owner on Dec 18, 2018. It is now read-only.
Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
librs232/bindings/lua/test.lua
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
342 lines (292 sloc)
8.05 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| port_name = "/dev/ttyUSB0" | |
| platform = "linux" | |
| -- port_name = "COM1" | |
| -- platform = "win32" | |
| rs232 = require("luars232") | |
| function time_stamp() | |
| t = os.date("*t") | |
| return string.format("[%02s.%02s.%s %02s:%02s:%02s] ", | |
| t.day, t.month, t.year, | |
| t.hour, t.min, t.sec) | |
| end | |
| oldprint = print | |
| function myprint(text) | |
| text = time_stamp() .. text | |
| oldprint(text) | |
| file = io.open("test_lua_log.txt", "a+") | |
| file:write(text .. "\n") | |
| file:close() | |
| end | |
| print = myprint | |
| function string.lines(str) | |
| return string.gfind(str, "([^\n]*)\n") | |
| end | |
| function format_test(text, err) | |
| local ret = "\n" | |
| local line_number = 1 | |
| local _, _, line_err, line_str = string.find(err, ".*:(%d+):(.*)") | |
| for line in string.lines(text) do | |
| if line_number == tonumber(line_err) then | |
| ret = ret .. string.format("--> %d. %s (%s)\n", line_number, line, line_str) | |
| else | |
| ret = ret .. string.format("% 8d. %s\n", line_number, line) | |
| end | |
| line_number = line_number + 1 | |
| end | |
| return ret | |
| end | |
| function test(text) | |
| local chunk, err = loadstring(text) | |
| if chunk == nil then | |
| print(string.format([[ | |
| --------------------------------------------------------------- | |
| %s | |
| loadstring error: '%s' | |
| --------------------------------------------------------------- | |
| ]], format_test(text, err), err)) | |
| return false | |
| end | |
| local ret, msg = pcall(chunk) | |
| if ret == false then | |
| print(string.format([[ | |
| --------------------------------------------------------------- | |
| %s | |
| pcall error: '%s' | |
| --------------------------------------------------------------- | |
| ]], format_test(text, msg), msg)) | |
| return false | |
| end | |
| return true | |
| end | |
| baud_rates = { | |
| "rs232.RS232_BAUD_9600", | |
| "rs232.RS232_BAUD_19200", | |
| "rs232.RS232_BAUD_38400", | |
| "rs232.RS232_BAUD_57600", | |
| "rs232.RS232_BAUD_115200", | |
| } | |
| -- It's such a crap, Windows seems to not like 5 data | |
| -- bits. If you make this test to work with 5 data bits on | |
| -- Windows, I'll buy you a beer or two... | |
| if platform == "win32" then | |
| data_bits = { | |
| "rs232.RS232_DATA_6", | |
| "rs232.RS232_DATA_7", | |
| "rs232.RS232_DATA_8", | |
| } | |
| else | |
| data_bits = { | |
| "rs232.RS232_DATA_5", | |
| "rs232.RS232_DATA_6", | |
| "rs232.RS232_DATA_7", | |
| "rs232.RS232_DATA_8", | |
| } | |
| end | |
| stop_bits = { | |
| "rs232.RS232_STOP_1", | |
| "rs232.RS232_STOP_2", | |
| } | |
| parity_bits = { | |
| "rs232.RS232_PARITY_NONE", | |
| "rs232.RS232_PARITY_ODD", | |
| "rs232.RS232_PARITY_EVEN", | |
| } | |
| flow_bits = { | |
| "rs232.RS232_FLOW_OFF", | |
| "rs232.RS232_FLOW_HW", | |
| "rs232.RS232_FLOW_XON_XOFF", | |
| } | |
| dtr_bits = { | |
| "rs232.RS232_DTR_ON", | |
| "rs232.RS232_DTR_OFF", | |
| } | |
| rts_bits = { | |
| "rs232.RS232_RTS_ON", | |
| "rs232.RS232_RTS_OFF", | |
| } | |
| errors = { | |
| "rs232.RS232_ERR_NOERROR", | |
| "rs232.RS232_ERR_UNKNOWN", | |
| "rs232.RS232_ERR_OPEN", | |
| "rs232.RS232_ERR_CLOSE", | |
| "rs232.RS232_ERR_FLUSH", | |
| "rs232.RS232_ERR_CONFIG", | |
| "rs232.RS232_ERR_READ", | |
| "rs232.RS232_ERR_WRITE", | |
| "rs232.RS232_ERR_SELECT", | |
| "rs232.RS232_ERR_TIMEOUT", | |
| "rs232.RS232_ERR_IOCTL", | |
| "rs232.RS232_ERR_PORT_CLOSED", | |
| } | |
| assert( | |
| test(string.format([[ | |
| local e, p = rs232.open("%s") | |
| assert(e == rs232.RS232_ERR_NOERROR) | |
| assert(p ~= nil) | |
| assert(p:close() == rs232.RS232_ERR_NOERROR) | |
| ]], port_name)) | |
| ) | |
| assert( | |
| test([[ | |
| local e, p = rs232.open("/dev/hell") | |
| assert(e == rs232.RS232_ERR_OPEN) | |
| assert(p == nil) | |
| ]]) | |
| ) | |
| for _, baud in pairs(baud_rates) do | |
| for _, data in pairs(data_bits) do | |
| for _, parity in pairs(parity_bits) do | |
| for _, stop in pairs(stop_bits) do | |
| for _, flow in pairs(flow_bits) do | |
| for _, dtr in pairs(dtr_bits) do | |
| for _, rts in pairs(rts_bits) do | |
| assert( | |
| test( | |
| string.format([[ | |
| local e, p = rs232.open("%s") | |
| assert(e == rs232.RS232_ERR_NOERROR) | |
| assert(p ~= nil) | |
| local bret = rs232.error_tostring(p:set_baud_rate(%s)) | |
| local dret = rs232.error_tostring(p:set_data_bits(%s)) | |
| local pret = rs232.error_tostring(p:set_parity(%s)) | |
| local sret = rs232.error_tostring(p:set_stop_bits(%s)) | |
| local fret = rs232.error_tostring(p:set_flow_control(%s)) | |
| local dtr_ret = rs232.error_tostring(p:set_dtr(%s)) | |
| local rts_ret = rs232.error_tostring(p:set_rts(%s)) | |
| local text = tostring(p) | |
| assert(text ~= nil) | |
| local errors = "" | |
| if bret ~= "no error" then | |
| errors = "set baud rate," | |
| end | |
| if dret ~= "no error" then | |
| errors = errors .. "set data bits," | |
| end | |
| if pret ~= "no error" then | |
| errors = errors .. "set parity," | |
| end | |
| if sret ~= "no error" then | |
| errors = errors .. "set stop bits," | |
| end | |
| if fret ~= "no error" then | |
| errors = errors .. "set flow control" | |
| end | |
| if dtr_ret ~= "no error" then | |
| errors = errors .. "set dtr" | |
| end | |
| if rts_ret ~= "no error" then | |
| errors = errors .. "set rts" | |
| end | |
| if (string.len(errors) > 0) then | |
| print(string.format(" [!] ERROR: %%s (failed: %%s)", text, errors)) | |
| else | |
| print(string.format(" [!] OK: %%s", text)) | |
| end | |
| assert(p:close() == rs232.RS232_ERR_NOERROR) | |
| ]], port_name, baud, data, parity, stop, flow, dtr, rts) | |
| ) | |
| ) | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| for _, baud in pairs(baud_rates) do | |
| for _, data in pairs(data_bits) do | |
| for _, parity in pairs(parity_bits) do | |
| for _, stop in pairs(stop_bits) do | |
| for _, flow in pairs(flow_bits) do | |
| for _, dtr in pairs(dtr_bits) do | |
| for _, rts in pairs(rts_bits) do | |
| assert( | |
| test( | |
| string.format([[ | |
| local timeout = 10 | |
| local e, p = rs232.open("%s") | |
| assert(e == rs232.RS232_ERR_NOERROR) | |
| assert(p ~= nil) | |
| assert(p:set_baud_rate(%s) == rs232.RS232_ERR_NOERROR) | |
| assert(p:set_data_bits(%s) == rs232.RS232_ERR_NOERROR) | |
| assert(p:set_parity(%s) == rs232.RS232_ERR_NOERROR) | |
| assert(p:set_stop_bits(%s) == rs232.RS232_ERR_NOERROR) | |
| assert(p:set_flow_control(%s) == rs232.RS232_ERR_NOERROR) | |
| assert(p:set_dtr(%s) == rs232.RS232_ERR_NOERROR) | |
| assert(p:set_rts(%s) == rs232.RS232_ERR_NOERROR) | |
| local baud = p:baud_rate() | |
| local str_baud1 = p:baud_rate_tostring() | |
| local str_baud2 = p:baud_rate_tostring(baud) | |
| assert(str_baud1 == str_baud2) | |
| local bits = p:data_bits() | |
| local str_bits1 = p:data_bits_tostring() | |
| local str_bits2 = p:data_bits_tostring(bits) | |
| assert(str_bits1 == str_bits2) | |
| local parity = p:parity() | |
| local str_parity1 = p:parity_tostring() | |
| local str_parity2 = p:parity_tostring(parity) | |
| assert(str_parity1 == str_parity2) | |
| local stop = p:stop_bits() | |
| local str_stop1 = p:stop_bits_tostring() | |
| local str_stop2 = p:stop_bits_tostring(stop) | |
| assert(str_stop1 == str_stop2) | |
| local flow = p:flow_control() | |
| local str_flow1 = p:flow_control_tostring() | |
| local str_flow2 = p:flow_control_tostring(flow) | |
| assert(str_flow1 == str_flow2) | |
| local dtr = p:dtr() | |
| local str_dtr1 = p:dtr_tostring() | |
| local str_dtr2 = p:dtr_tostring(dtr) | |
| assert(str_dtr1 == str_dtr2) | |
| local rts = p:rts() | |
| local str_rts1 = p:rts_tostring() | |
| local str_rts2 = p:rts_tostring(rts) | |
| assert(str_rts1 == str_rts2) | |
| local e = p:flush() | |
| assert(e == rs232.RS232_ERR_NOERROR) | |
| e, d, l = p:read(1, timeout) | |
| assert(e == rs232.RS232_ERR_TIMEOUT) | |
| assert(d == nil) | |
| assert(l == 0) | |
| -- not implemented yet... | |
| if platform ~= "win32" then | |
| local forced = 1 | |
| e, d, l = p:read(1, timeout, forced) | |
| assert(e == rs232.RS232_ERR_TIMEOUT) | |
| assert(d == nil) | |
| assert(l == 0) | |
| end | |
| local forced = 0 | |
| e, d, l = p:read(1, timeout, forced) | |
| assert(e == rs232.RS232_ERR_TIMEOUT) | |
| assert(d == nil) | |
| assert(l == 0) | |
| e, l = p:write("ynezz") | |
| assert(e == rs232.RS232_ERR_NOERROR) | |
| -- althought the write is successful it returns 0 bytes written | |
| -- in some baud/data/stop/flow combinations... | |
| if platform ~= "win32" then | |
| assert(l == 5) | |
| end | |
| e, l = p:write("ynezz", timeout) | |
| assert(e == rs232.RS232_ERR_NOERROR) | |
| -- althought the write is successful it returns 0 bytes written | |
| -- in some baud/data/stop/flow combinations... | |
| if platform ~= "win32" then | |
| assert(l == 5) | |
| end | |
| local text = tostring(p) | |
| assert(text ~= nil) | |
| print("tostring(p): " .. text) | |
| assert(p:close() == rs232.RS232_ERR_NOERROR) | |
| ]], port_name, baud, data, parity, stop, flow, dtr, rts) | |
| ) | |
| ) | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| print("[*] All tests passed succesfuly!") |