about summary refs log tree commit diff stats
path: root/test/net
diff options
context:
space:
mode:
authorbptato <nincsnevem662@gmail.com>2024-08-15 19:11:49 +0200
committerbptato <nincsnevem662@gmail.com>2024-08-15 19:23:55 +0200
commit4bf895db711f3d4d229d3f18fbb2145cce2a73af (patch)
tree2e81c7399de03aebb9dfa166eba6ee809a75cd2e /test/net
parent885a3493b6cad4b4247a200928fe61e41883aaba (diff)
downloadchawan-4bf895db711f3d4d229d3f18fbb2145cce2a73af.tar.gz
xhr: more progress
* add responseText, response
* add net tests
	-> currently sync XHR only; should find a way to do async
	   tests...
* update monoucha
	-> simplified & updated some related code that no longer worked
	   properly
Diffstat (limited to 'test/net')
-rw-r--r--test/net/all.expected1
l---------test/net/asserts.js1
-rw-r--r--test/net/config.toml12
-rw-r--r--test/net/ping1
-rw-r--r--test/net/run.nim47
-rwxr-xr-xtest/net/run.sh17
-rw-r--r--test/net/xhr.html20
7 files changed, 99 insertions, 0 deletions
diff --git a/test/net/all.expected b/test/net/all.expected
new file mode 100644
index 00000000..35821117
--- /dev/null
+++ b/test/net/all.expected
@@ -0,0 +1 @@
+Success
diff --git a/test/net/asserts.js b/test/net/asserts.js
new file mode 120000
index 00000000..8471bc87
--- /dev/null
+++ b/test/net/asserts.js
@@ -0,0 +1 @@
+../asserts.js
\ No newline at end of file
diff --git a/test/net/config.toml b/test/net/config.toml
new file mode 100644
index 00000000..ce723641
--- /dev/null
+++ b/test/net/config.toml
@@ -0,0 +1,12 @@
+[buffer]
+scripting = true
+
+[display]
+columns = 80
+lines = 24
+pixels-per-column = 9
+pixels-per-line = 18
+force-columns = true
+force-lines = true
+force-pixels-per-column = true
+force-pixels-per-line = true
diff --git a/test/net/ping b/test/net/ping
new file mode 100644
index 00000000..8e554694
--- /dev/null
+++ b/test/net/ping
@@ -0,0 +1 @@
+pong
diff --git a/test/net/run.nim b/test/net/run.nim
new file mode 100644
index 00000000..d27bbef3
--- /dev/null
+++ b/test/net/run.nim
@@ -0,0 +1,47 @@
+import std/asyncdispatch
+import std/asynchttpserver
+import std/os
+import std/posix
+
+import utils/twtstr
+
+proc cb(req: Request) {.async.} =
+  const headers = {"Content-type": "text/html; charset=utf-8"}
+  if req.url.path == "/stop":
+    await req.respond(Http200, "", headers.newHttpHeaders())
+    quit(0)
+  let s = readFile(req.url.path.after('/'))
+  #echo (req.reqMethod, req.url.path, req.headers)
+  await req.respond(Http200, s, headers.newHttpHeaders())
+
+proc runServer(server: AsyncHttpServer) {.async.} =
+  while true:
+    if server.shouldAcceptRequest():
+      await server.acceptRequest(cb)
+    else:
+      # too many concurrent connections, `maxFDs` exceeded
+      # wait 500ms for FDs to be closed
+      await sleepAsync(500)
+
+proc main() {.async.} =
+  var server = newAsyncHttpServer()
+  if paramCount() >= 1 and paramStr(1) == "-x":
+    server.listen(Port(8000))
+    await server.runServer()
+    quit(0)
+  server.listen(Port(0))
+  let port = server.getPort()
+  case fork()
+  of 0:
+    let cmd = getAppFileName().beforeLast('/') & "/run.sh " & $uint16(port)
+    discard execl("/bin/sh", "sh", "-c", cstring(cmd), nil)
+    quit(1)
+  of -1:
+    stderr.write("Failed to start run.sh")
+    quit(1)
+  else:
+    await server.runServer()
+    var x: cint
+    quit(WEXITSTATUS(wait(addr x)))
+
+waitFor main()
diff --git a/test/net/run.sh b/test/net/run.sh
new file mode 100755
index 00000000..1ea90e3a
--- /dev/null
+++ b/test/net/run.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+if ! test "$CHA"
+then	test -f ../../cha && CHA=../../cha || CHA=cha
+fi
+
+failed=0
+for h in *.html
+do	printf '%s\r' "$h"
+	if ! "$CHA" -dC config.toml "http://localhost:$1/$h" | diff all.expected -
+	then	failed=$(($failed+1))
+		printf 'FAIL: %s\n' "$h"
+	fi
+done
+printf '\n'
+$CHA -d "http://localhost:$1/stop" >/dev/null
+exit "$failed"
diff --git a/test/net/xhr.html b/test/net/xhr.html
new file mode 100644
index 00000000..2d034772
--- /dev/null
+++ b/test/net/xhr.html
@@ -0,0 +1,20 @@
+<!doctype html>
+<title>onclick setter/getter</title>
+<div id=x>Fail</div>
+<script src=asserts.js></script>
+<script>
+const x = new XMLHttpRequest();
+assert(x.onreadystatechange === null);
+function myFunction() {
+	;
+}
+x.onreadystatechange = myFunction;
+assert(myFunction === x.onreadystatechange);
+assert(x.readyState === XMLHttpRequest.UNSENT);
+x.open("GET", "ping", false);
+assert_throws("x.responseType = 'document'");
+x.send();
+assert_equals(x.readyState, XMLHttpRequest.DONE);
+assert_equals(x.responseText.trim(), "pong");
+document.getElementById("x").textContent = "Success";
+</script>