Prechádzať zdrojové kódy

Some samples to test ported modules

mingodad 13 rokov pred
rodič
commit
c8d6d9df7c
2 zmenil súbory, kde vykonal 356 pridanie a 0 odobranie
  1. 324 0
      samples/test-rs232.nut
  2. 32 0
      samples/test-socket-server.nut

+ 324 - 0
samples/test-rs232.nut

@@ -0,0 +1,324 @@
+local __WIN32__ = os.getenv("WINDIR") != null
+
+//local port_name = __WIN32__ ?  "COM1" : "/dev/ttyUSB0";
+local port_name = __WIN32__ ?  "COM1" : "/dev/ttyS0";
+local platform = __WIN32__ ? "win32" : "linux";
+
+function time_stamp(){
+	local t = os.date("*t");
+	return format("[%02d.%02d.%d %02d:%02d:%02d] ",
+			     t.day, t.month, t.year,
+			     t.hour, t.min, t.sec);
+}
+
+local oldprint = print;
+
+function myprint(text){
+	text = time_stamp() + text;
+	oldprint(text);
+	local fd = file("test_sqrs232_log.txt", "a+");
+	fd.write(text + "\n");
+	fd.close();
+}
+
+print = myprint;
+
+/*
+local string_delegate = port_name.getdelegate();
+string_delegate.lines <- function(str){
+	return str.find_lua("([^\n]*)\n");
+}
+*/
+
+function format_test(text, err){
+	local ret = "\n";
+	local line_number = 1;
+	local si = get_last_stackinfo();
+	local line_err = si.line;
+	
+	foreach( line in text.split("\n")) {
+		if (line_number == line_err.tointeger())
+			ret += format("-->   %d. %s (%s)\n", line_number, line, err);
+		else
+			ret += format("% 8d. %s\n", line_number, line);
+		++line_number;
+	}
+	return ret;
+}
+
+function test(text){
+	local chunk = compilestring(text);
+	if (chunk == null){
+		print(format([==[
+--------------------------------------------------------------- 
+%s
+loadstring error: '%s'
+--------------------------------------------------------------- 
+]==], format_test(text, err), err))
+		return false;
+	}
+
+	try {
+		chunk();
+	}
+	catch(e){
+		print(format([==[
+--------------------------------------------------------------- 
+%s
+call error: '%s'
+--------------------------------------------------------------- 
+]==], format_test(text, e), e));
+		//return false;
+	}
+
+	return true;
+}
+
+local baud_rates = [
+	"SqRs232.RS232_BAUD_9600",
+	"SqRs232.RS232_BAUD_19200",
+	"SqRs232.RS232_BAUD_38400",
+	"SqRs232.RS232_BAUD_57600",
+	"SqRs232.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...
+local data_bits;
+
+if (platform == "win32"){
+	data_bits = [
+		"SqRs232.RS232_DATA_6",
+		"SqRs232.RS232_DATA_7",
+		"SqRs232.RS232_DATA_8",
+	];
+}
+else
+{
+	data_bits = [
+		"SqRs232.RS232_DATA_5",
+		"SqRs232.RS232_DATA_6",
+		"SqRs232.RS232_DATA_7",
+		"SqRs232.RS232_DATA_8",
+	];
+}
+
+local stop_bits = [
+	"SqRs232.RS232_STOP_1",
+	"SqRs232.RS232_STOP_2",
+];
+
+local parity_bits = [
+	"SqRs232.RS232_PARITY_NONE",
+	"SqRs232.RS232_PARITY_ODD",
+	"SqRs232.RS232_PARITY_EVEN",
+];
+
+local flow_bits = [
+	"SqRs232.RS232_FLOW_OFF",
+	"SqRs232.RS232_FLOW_HW",
+	"SqRs232.RS232_FLOW_XON_XOFF",
+];
+
+local dtr_bits = [
+	"SqRs232.RS232_DTR_ON",
+	"SqRs232.RS232_DTR_OFF",
+];
+
+local rts_bits = [
+	"SqRs232.RS232_RTS_ON",
+	"SqRs232.RS232_RTS_OFF",
+];
+
+local errors = [
+	"SqRs232.RS232_ERR_NOERROR",
+	"SqRs232.RS232_ERR_UNKNOWN",
+	"SqRs232.RS232_ERR_OPEN",
+	"SqRs232.RS232_ERR_CLOSE",
+	"SqRs232.RS232_ERR_FLUSH",
+	"SqRs232.RS232_ERR_CONFIG",
+	"SqRs232.RS232_ERR_READ",
+	"SqRs232.RS232_ERR_WRITE",
+	"SqRs232.RS232_ERR_SELECT",
+	"SqRs232.RS232_ERR_TIMEOUT",
+	"SqRs232.RS232_ERR_IOCTL",
+	"SqRs232.RS232_ERR_PORT_CLOSED",
+];
+
+assert(
+	test(format([==[
+		local p = SqRs232();
+		p.open("%s");
+		assert(p.close() == SqRs232.RS232_ERR_NOERROR);
+	]==], port_name))
+);
+
+assert(
+	test([==[
+		local p = SqRs232();
+		p.open("/dev/hell");
+	]==])
+);
+
+foreach(baud in baud_rates) {
+ foreach(data in data_bits) { 
+  foreach(parity in parity_bits) {
+   foreach(stop in stop_bits) {
+    foreach(flow in flow_bits) {
+     foreach(dtr in dtr_bits) {
+      foreach(rts in rts_bits) {
+	assert(
+		test(
+			format([==[
+				local p = SqRs232();
+				p.open("%s");
+
+				local bret = p.strerror(p.baud_rate(%s));
+				local dret = p.strerror(p.data_bits(%s));
+				local pret = p.strerror(p.parity(%s));
+				local sret = p.strerror(p.stop_bits(%s));
+				local fret = p.strerror(p.flow_control(%s));
+				local dtr_ret = p.strerror(p.dtr(%s));
+				local rts_ret = p.strerror(p.rts(%s));
+				 
+				local text = p.tostring();
+				assert(text != null);
+				 
+				local errors = "";
+				if (bret != "no error") errors = "set baud rate,";
+				if (dret != "no error") errors += "set data bits,";
+				if (pret != "no error") errors += "set parity,";
+				if (sret != "no error") errors += "set stop bits,";
+				if (fret != "no error") errors += "set flow control";
+				if (dtr_ret != "no error") errors += "set dtr";
+				if (rts_ret != "no error") errors += "set rts";
+				 
+				if (errors.len() > 0) print(format(" [!] ERROR: %%s (failed: %%s)", text, errors));
+				else print(format(" [!] OK: %%s", text));
+				 
+				assert(p.close() == SqRs232.RS232_ERR_NOERROR);
+				]==], port_name, baud, data, parity, stop, flow, dtr, rts)
+		)
+	);
+      }
+     }
+    }
+   }
+  }
+ }
+}
+
+foreach(baud in baud_rates) {
+ foreach(data in data_bits) { 
+  foreach(parity in parity_bits) {
+   foreach(stop in stop_bits) {
+    foreach(flow in flow_bits) {
+     foreach(dtr in dtr_bits) {
+      foreach(rts in rts_bits) {
+	assert(
+		test(
+			format([==[
+				local timeout = 10;
+				local p = SqRs232();
+				p.open("%s");
+				 
+				assert(p.baud_rate(%s) == SqRs232.RS232_ERR_NOERROR);
+				assert(p.data_bits(%s) == SqRs232.RS232_ERR_NOERROR);
+				assert(p.parity(%s) == SqRs232.RS232_ERR_NOERROR);
+				assert(p.stop_bits(%s) == SqRs232.RS232_ERR_NOERROR);
+				assert(p.flow_control(%s) == SqRs232.RS232_ERR_NOERROR);
+				assert(p.dtr(%s) == SqRs232.RS232_ERR_NOERROR);
+				assert(p.rts(%s) == SqRs232.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 == SqRs232.RS232_ERR_NOERROR);
+				 
+				e, d, l = p.read(1, timeout);
+				assert(e == SqRs232.RS232_ERR_TIMEOUT);
+				assert(d == nil);
+				assert(l == 0);
+				 
+				// not implemented yet...
+				if (platform != "win32"){
+					local forced = 1;
+					e, d, l = p.read(1, timeout, forced)
+					assert(e == SqRs232.RS232_ERR_TIMEOUT)
+					assert(d == nil)
+					assert(l == 0)
+				}
+				 
+				local forced = 0;
+				e, d, l = p.read(1, timeout, forced);
+				assert(e == SqRs232.RS232_ERR_TIMEOUT)
+				assert(d == nil)
+				assert(l == 0)
+				 
+				e, l = p.write("ynezz")
+				assert(e == SqRs232.RS232_ERR_NOERROR)
+				 
+				// althought the write is successful it returns 0 bytes written
+				// in some baud/data/stop/flow combinations...
+				 
+				if (platform != "win32") assert(l == 5);
+				 
+				e, l = p.write("ynezz", timeout)
+				assert(e == SqRs232.RS232_ERR_NOERROR);
+				 
+				// althought the write is successful it returns 0 bytes written
+				// in some baud/data/stop/flow combinations...
+				 
+				if (platform != "win32") assert(l == 5);
+				 
+				local text = p.tostring();
+				assert(text != niull)
+				print("tostring(p): " + text);
+				 
+				assert(p.close() == SqRs232.RS232_ERR_NOERROR);
+				]==], port_name, baud, data, parity, stop, flow, dtr, rts)
+		)
+	);
+      }
+     }
+    }
+   }
+  }
+ }
+}
+
+print("[*] All tests passed succesfuly!");

+ 32 - 0
samples/test-socket-server.nut

@@ -0,0 +1,32 @@
+// create a TCP socket and bind it to the local host, at any port
+local server = socket.tcp();
+//server.bind("*", 0);
+server.setoption("reuseaddr", true);
+server.bind("*", 0);
+server.listen();
+// find out which port the OS chose for us
+local tbl = server.getsockname();
+local ip = tbl.address, port = tbl.port ;
+// print a message informing what's up
+print(ip, port);
+print("Please telnet to localhost on port " + port)
+print("After connecting, you have 10s to enter a line to be echoed")
+// loop forever waiting for clients
+while (1){
+  // wait for a connection from any client
+  local client = server.accept();
+  // make sure we don't block waiting for this client's line
+  client.settimeout(10);
+  try {
+	// receive the line
+	local line = client.receive("*l");
+	// if there was no error, send it back to the client
+	print(line);
+	client.send(line + "\n");
+  }
+   catch(e){
+	print(e);
+  }
+  // done with client, close the object
+  client.close();
+}