aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xemcc11
-rwxr-xr-xtests/runner.py92
2 files changed, 55 insertions, 48 deletions
diff --git a/emcc b/emcc
index fb215a60..58645eb4 100755
--- a/emcc
+++ b/emcc
@@ -881,6 +881,7 @@ try:
data_files = filter(lambda file_: not os.path.isdir(file_['name']), data_files)
for file_ in data_files:
+ file_['name'] = file_['name'].replace(os.path.sep, '/')
file_['net_name'] = file_['name']
data_target = unsuffixed(target) + '.data'
@@ -889,12 +890,12 @@ try:
partial_dirs = []
for file_ in data_files:
dirname = os.path.dirname(file_['name'])
- if dirname != '' and dirname != os.path.sep:
- parts = dirname.split(os.path.sep)
+ if dirname != '' and dirname != '/':
+ parts = dirname.split('/')
for i in range(len(parts)):
- partial = os.path.sep.join(parts[:i+1])
+ partial = '/'.join(parts[:i+1])
if partial not in partial_dirs:
- code += '''FS.createFolder('/%s', '%s', true, false);\n''' % (os.path.sep.join(parts[:i]), parts[i])
+ code += '''FS.createFolder('/%s', '%s', true, false);\n''' % ('/'.join(parts[:i]), parts[i])
partial_dirs.append(partial)
if final_suffix == 'html':
@@ -903,7 +904,7 @@ try:
start = 0
for file_ in data_files:
file_['data_start'] = start
- curr = open(file_['name']).read()
+ curr = open(file_['name'], 'rb').read()
file_['data_end'] = start + len(curr)
start += len(curr)
data.write(curr)
diff --git a/tests/runner.py b/tests/runner.py
index a479cf9f..099cd609 100755
--- a/tests/runner.py
+++ b/tests/runner.py
@@ -14,7 +14,7 @@ will use 4 processes. To install nose do something like
'''
from subprocess import Popen, PIPE, STDOUT
-import os, unittest, tempfile, shutil, time, inspect, sys, math, glob, tempfile, re, difflib, webbrowser, hashlib, threading, platform, BaseHTTPServer, multiprocessing
+import os, unittest, tempfile, shutil, time, inspect, sys, math, glob, tempfile, re, difflib, webbrowser, hashlib, threading, platform, BaseHTTPServer, multiprocessing, functools
if len(sys.argv) == 1:
@@ -6619,33 +6619,55 @@ fscanfed: 10 - hello
elif 'browser' in str(sys.argv):
# Browser tests.
+ # Run a server and a web page. When a test runs, we tell the server about it,
+ # which tells the web page, which then opens a window with the test. Doing
+ # it this way then allows the page to close() itself when done.
+
+ def harness_server_func(q):
+ class TestServerHandler(BaseHTTPServer.BaseHTTPRequestHandler):
+ def do_GET(s):
+ s.send_response(200)
+ s.send_header("Content-type", "text/html")
+ s.end_headers()
+ if s.path == '/run_harness':
+ s.wfile.write(open(path_from_root('tests', 'browser_harness.html')).read())
+ else:
+ result = 'False'
+ if not q.empty():
+ result = q.get()
+ s.wfile.write(result)
+ s.wfile.close()
+ httpd = BaseHTTPServer.HTTPServer(('localhost', 9999), TestServerHandler)
+ httpd.serve_forever() # test runner will kill us
+
+ def server_func(dir, q):
+ class TestServerHandler(BaseHTTPServer.BaseHTTPRequestHandler):
+ def do_GET(s):
+ if 'report_' in s.path:
+ q.put(s.path)
+ else:
+ filename = s.path[1:]
+ if os.path.exists(filename):
+ s.send_response(200)
+ s.send_header("Content-type", "text/html")
+ s.end_headers()
+ s.wfile.write(open(filename).read())
+ s.wfile.close()
+ else:
+ s.send_response(500)
+ s.send_header("Content-type", "text/html")
+ s.end_headers()
+ os.chdir(dir)
+ httpd = BaseHTTPServer.HTTPServer(('localhost', 8888), TestServerHandler)
+ httpd.serve_forever() # test runner will kill us
+
class browser(RunnerCore):
def __init__(self, *args, **kwargs):
super(browser, self).__init__(*args, **kwargs)
if hasattr(browser, 'harness_server'): return
-
- # Run a server and a web page. When a test runs, we tell the server about it,
- # which tells the web page, which then opens a window with the test. Doing
- # it this way then allows the page to close() itself when done.
- def server_func(q):
- class TestServerHandler(BaseHTTPServer.BaseHTTPRequestHandler):
- def do_GET(s):
- s.send_response(200)
- s.send_header("Content-type", "text/html")
- s.end_headers()
- if s.path == '/run_harness':
- s.wfile.write(open(path_from_root('tests', 'browser_harness.html')).read())
- else:
- result = 'False'
- if not q.empty():
- result = q.get()
- s.wfile.write(result)
- s.wfile.close()
- httpd = BaseHTTPServer.HTTPServer(('localhost', 9999), TestServerHandler)
- httpd.serve_forever() # test runner will kill us
browser.harness_queue = multiprocessing.Queue()
- browser.harness_server = multiprocessing.Process(target=server_func, args=(browser.harness_queue,))
+ browser.harness_server = multiprocessing.Process(target=harness_server_func, args=(browser.harness_queue,))
browser.harness_server.start()
print '[Browser harness server on process %d]' % browser.harness_server.pid
webbrowser.open_new('http://localhost:9999/run_harness')
@@ -6656,32 +6678,15 @@ elif 'browser' in str(sys.argv):
browser.harness_server.terminate()
delattr(browser, 'harness_server')
print '[Browser harness server terminated]'
+ # On Windows, shutil.rmtree() in tearDown() raises this exception if we do not wait a bit:
+ # WindowsError: [Error 32] The process cannot access the file because it is being used by another process.
+ time.sleep(0.1)
def run_browser(self, html_file, message, expectedResult=None):
if expectedResult is not None:
try:
- def server_func(q):
- class TestServerHandler(BaseHTTPServer.BaseHTTPRequestHandler):
- def do_GET(s):
- if 'report_' in s.path:
- q.put(s.path)
- else:
- filename = s.path[1:]
- if os.path.exists(filename):
- s.send_response(200)
- s.send_header("Content-type", "text/html")
- s.end_headers()
- s.wfile.write(open(filename).read())
- s.wfile.close()
- else:
- s.send_response(500)
- s.send_header("Content-type", "text/html")
- s.end_headers()
- os.chdir(self.get_dir())
- httpd = BaseHTTPServer.HTTPServer(('localhost', 8888), TestServerHandler)
- httpd.serve_forever() # test runner will kill us
queue = multiprocessing.Queue()
- server = multiprocessing.Process(target=server_func, args=(queue,))
+ server = multiprocessing.Process(target=functools.partial(server_func, self.get_dir()), args=(queue,))
server.start()
browser.harness_queue.put('http://localhost:8888/' + html_file)
output = '[no http server activity]'
@@ -6694,6 +6699,7 @@ elif 'browser' in str(sys.argv):
self.assertIdentical(expectedResult, output)
finally:
server.terminate()
+ time.sleep(0.1) # see comment about Windows above
else:
webbrowser.open_new(os.path.abspath(html_file))
print 'A web browser window should have opened a page containing the results of a part of this test.'