Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Delta Between Two Patch Sets: run_tests.py

Issue 4895499043733504: Issue 510 - [Typed objects] Don`t hardcode script load order in unit tests (Closed)
Left Patch Set: Reverted to original get_scripts implementation Created Feb. 4, 2015, 3:33 p.m.
Right Patch Set: Using generators to produce responses Created Feb. 5, 2015, 2:49 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
Left: Side by side diff | Download
Right: Side by side diff | Download
« no previous file with change/comment | « no previous file | test/common.js » ('j') | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # coding: utf-8 2 # coding: utf-8
3 3
4 # This file is part of Adblock Plus <https://adblockplus.org/>, 4 # This file is part of Adblock Plus <https://adblockplus.org/>,
5 # Copyright (C) 2006-2015 Eyeo GmbH 5 # Copyright (C) 2006-2015 Eyeo GmbH
6 # 6 #
7 # Adblock Plus is free software: you can redistribute it and/or modify 7 # Adblock Plus is free software: you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License version 3 as 8 # it under the terms of the GNU General Public License version 3 as
9 # published by the Free Software Foundation. 9 # published by the Free Software Foundation.
10 # 10 #
(...skipping 12 matching lines...) Expand all
23 import re 23 import re
24 import urlparse 24 import urlparse
25 25
26 import flask 26 import flask
27 27
28 app = flask.Flask(__name__) 28 app = flask.Flask(__name__)
29 29
30 def get_scripts(dir, reldir=""): 30 def get_scripts(dir, reldir=""):
31 for filename in os.listdir(dir): 31 for filename in os.listdir(dir):
32 path = os.path.join(dir, filename) 32 path = os.path.join(dir, filename)
33 # "Relative path" will be the parameter passed in to require(), meaning
34 # that it always has to use forward slashes.
33 relpath = posixpath.join(reldir, filename) 35 relpath = posixpath.join(reldir, filename)
34 if os.path.isdir(path): 36 if os.path.isdir(path):
35 for path, relpath in get_scripts(path, relpath): 37 for path, relpath in get_scripts(path, relpath):
36 yield path, relpath 38 yield path, relpath
37 elif os.path.splitext(path)[1] == ".js": 39 elif os.path.splitext(path)[1] == ".js":
38 yield path, relpath 40 yield path, relpath
39 41
40 def js_encode(str): 42 def js_encode(str):
41 return json.dumps(str) 43 return json.dumps(str)
42 44
43 def script_as_string(path, sourceURL, backcompat): 45 def script_as_string(path, sourceURL, backcompat):
44 if backcompat: 46 if backcompat:
45 from jshydra.abp_rewrite import doRewrite 47 from jshydra.abp_rewrite import doRewrite
46 data = doRewrite([os.path.abspath(path)], []).decode("utf-8") 48 data = doRewrite([os.path.abspath(path)], []).decode("utf-8")
47 else: 49 else:
48 with io.open(path, "r", encoding="utf-8") as handle: 50 with io.open(path, "r", encoding="utf-8") as handle:
49 data = handle.read() 51 data = handle.read()
50 data += "\n//# sourceURL=%s" % sourceURL 52 data += "\n//# sourceURL=%s" % sourceURL
51 return js_encode(data) 53 return js_encode(data)
52 54
53 @app.route("/<path:path>", methods = ["GET"]) 55 @app.route("/<path:path>", methods = ["GET"])
54 @app.route("/", methods = ["GET"]) 56 @app.route("/", methods = ["GET"])
55 def multiplex(path=""): 57 def multiplex(path=""):
56 request_url = urlparse.urlparse(flask.request.url) 58 base_url = flask.request.url
59 request_url = urlparse.urlparse(base_url)
57 request_path = request_url.path 60 request_path = request_url.path
58 islib = request_path.startswith("/lib/") 61 islib = request_path.startswith("/lib/")
59 backcompat = request_url.query == "backcompat" 62 backcompat = request_url.query == "backcompat"
60 63
61 rootdir = os.path.dirname(__file__) 64 rootdir = os.path.dirname(__file__)
62 if request_path == "/lib.js": 65 if request_path == "/lib.js":
63 data = "" 66 def generate_libs():
64 for path, relpath in get_scripts(os.path.join(rootdir, "lib")): 67 for path, relpath in get_scripts(os.path.join(rootdir, "lib")):
65 url = urlparse.urljoin(flask.request.url, "/lib/" + relpath) 68 url = urlparse.urljoin(base_url, "/lib/" + relpath)
66 data += "require.sources[%s] = %s;\n" % ( 69 yield "require.sources[%s] = %s;\n" % (
67 js_encode(os.path.splitext(relpath)[0]), 70 js_encode(posixpath.splitext(relpath)[0]),
68 script_as_string(path, url, backcompat) 71 script_as_string(path, url, backcompat)
69 ) 72 )
70 return (data, 200, {"Content-Type": "application/javascript; charset=utf-8"} ) 73 return flask.Response(generate_libs(), mimetype="application/javascript")
71 elif request_path == "/tests.js": 74 elif request_path == "/tests.js":
72 data = "var tests = [" 75 def generate_tests():
73 for path, relpath in get_scripts(os.path.join(rootdir, "test", "tests")): 76 yield "var tests = ["
74 url = urlparse.urljoin(flask.request.url, "/tests/" + relpath) 77 for path, relpath in get_scripts(os.path.join(rootdir, "test", "tests")):
75 data += " %s,\n" % script_as_string(path, url, backcompat) 78 url = urlparse.urljoin(base_url, "/tests/" + relpath)
76 data += "];" 79 yield " %s,\n" % script_as_string(path, url, backcompat)
77 return (data, 200, {"Content-Type": "application/javascript; charset=utf-8"} ) 80 yield "];"
81 return flask.Response(generate_tests(), mimetype="application/javascript")
78 else: 82 else:
79 if request_path.startswith("/lib/"): 83 if request_path.startswith("/lib/"):
80 rootdir = os.path.join(rootdir, "lib") 84 rootdir = os.path.join(rootdir, "lib")
81 else: 85 else:
82 rootdir = os.path.join(rootdir, "test") 86 rootdir = os.path.join(rootdir, "test")
83 if request_path.endswith("/"): 87 if request_path.endswith("/"):
84 request_path += "index.html" 88 request_path += "index.html"
85 return flask.send_from_directory(rootdir, request_path.lstrip("/")) 89 return flask.send_from_directory(rootdir, request_path.lstrip("/"))
86 90
87 if __name__ == "__main__": 91 if __name__ == "__main__":
88 app.run(debug=True) 92 app.run(debug=True)
LEFTRIGHT
« no previous file | test/common.js » ('j') | Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Toggle Comments ('s')

Powered by Google App Engine
This is Rietveld