Retry only for https protocol
[elinks.git] / test / server / crlf.py
blob84b49fd15e12ac8f052087ca384e1549b83a2245
1 #!/usr/bin/env python
3 import os
4 from BaseHTTPServer import *
5 import tempfile
6 import signal
8 r, w = os.pipe()
10 C_CR = 0
11 C_LF = 1
12 C_CRLF = 2
14 E_Raw = 0
15 E_Entity = 1
16 E_JavaScript = 2
18 F_Hidden = 0
19 F_TextArea = 1
21 def encode(ch, encoding):
22 if ch == C_CRLF:
23 return encode(C_CR, encoding) + encode(C_LF, encoding)
24 if ch == C_CR:
25 if encoding == E_Raw:
26 return "\r"
27 if encoding == E_JavaScript:
28 return "\\r"
29 if encoding == E_Entity:
30 return "
"
31 if ch == C_LF:
32 if encoding == E_Raw:
33 return "\n"
34 if encoding == E_JavaScript:
35 return "\\n"
36 if encoding == E_Entity:
37 return "
"
39 def get_form(ch, encoding, field):
40 text = "foo" + encode(ch, encoding) + "bar"
41 if encoding == E_JavaScript:
42 text_initial = ""
43 else:
44 text_initial = text
46 s = """<html>
47 <head>
48 <title>Form Test</title>
49 </head>
50 <body>
51 <form id="form1" name="form1" action="http://127.0.0.1:8090/">
52 """
53 if field == F_Hidden:
54 s += '<input type="hidden" id="field1" name="field1" value="' + text_initial + '">'
55 elif field == F_TextArea:
56 s += '<textarea id="field1" name="field1">' + text_initial + '</textarea>'
57 s += "\n</form>"
58 if encoding == E_JavaScript:
59 s += """
60 <script>
61 document.form1.field1.value = '%s';
62 </script>""" % (text)
64 s += "</body></html>"
65 return s
67 class forwarder(BaseHTTPRequestHandler):
68 def do_GET(self):
69 w.write(self.path + "\n")
70 w.flush()
71 self.send_response(200)
72 self.send_header("Content-Type", "text/plain")
73 self.end_headers()
74 self.wfile.write("Dummy response")
76 def runtest(r, *args):
77 form = get_form(*args)
79 tmpfile, tmpname = tempfile.mkstemp(".html")
80 tmpfile = os.fdopen(tmpfile, 'w')
81 tmpfile.write(form)
82 tmpfile.close()
84 linkspid = os.spawnlp(os.P_NOWAIT, 'elinks', 'elinks',
85 '-config-dir', os.getcwd(),
86 '-config-file', 'crlf.conf',
87 '-no-connect', '1',
88 '-auto-submit', '1',
89 tmpname)
90 path = r.readline()
91 os.kill(linkspid, signal.SIGINT)
92 os.waitpid(linkspid, 0)
94 os.unlink(tmpname)
96 return path
98 pid = os.fork()
100 if pid:
101 os.close(w)
102 r = os.fdopen(r)
104 paths = []
106 for c in [C_CR, C_LF, C_CRLF]:
107 for e in [E_Raw, E_Entity, E_JavaScript]:
108 for f in [F_Hidden, F_TextArea]:
109 paths.append(("%d %d %d " % (c, e, f)) + runtest(r, c, e, f))
111 for path in paths:
112 print path,
114 os.kill(pid, signal.SIGTERM)
115 os.waitpid(pid, 0)
116 else:
117 os.close(r)
118 w = os.fdopen(w, 'w')
119 server_address = ('127.0.0.1', 8090)
120 httpd = HTTPServer(server_address, forwarder)
121 httpd.serve_forever()