diff --git a/validate.py b/validate.py index e5375f2..6c94f8e 100644 --- a/validate.py +++ b/validate.py @@ -2,6 +2,7 @@ import json from StringIO import StringIO import validator.main +import validator.constants import validator.testcases.targetapplication from validator.errorbundler import ErrorBundle from validator.constants import PACKAGE_ANY @@ -9,7 +10,8 @@ from validator.constants import PACKAGE_ANY def validate(path, format="json", approved_applications="validator/app_versions.json", - determined=True): + determined=True, + spidermonkey=None): "Perform validation in one easy step!" output = StringIO() @@ -20,6 +22,9 @@ def validate(path, format="json", bundle = ErrorBundle(pipe=output, no_color=True, listed=True, determined=determined) + if spidermonkey is not None: + bundle.save_resource("SPIDERMONKEY", spidermonkey) + validator.main.prepare_package(bundle, path, PACKAGE_ANY) # Write the results to the pipe diff --git a/validator/constants.py b/validator/constants.py index 8a37c3d..a529d55 100644 --- a/validator/constants.py +++ b/validator/constants.py @@ -30,3 +30,8 @@ if not os.path.exists(SPIDERMONKEY_INSTALLATION): # The fallback is simply to disable JS tests. SPIDERMONKEY_INSTALLATION = None +try: + from validator.constants_local import * +except ImportError: + pass + diff --git a/validator/submain.py b/validator/submain.py index 4af7774..04cb3fb 100644 --- a/validator/submain.py +++ b/validator/submain.py @@ -9,13 +9,6 @@ from validator.xpi import XPIManager from validator.rdf import RDFParser from validator import decorator -# This is modeled after Zamboni's settings_local.py implementation, but -# it is only designed to allow the constants to be overridden. -try: - import validator.constants_local as constants -except ImportError: - import validator.constants as constants - from constants import * types = {0: "Unknown", diff --git a/validator/testcases/javascript/traverser.py b/validator/testcases/javascript/traverser.py index 35d66c4..07e28ba 100644 --- a/validator/testcases/javascript/traverser.py +++ b/validator/testcases/javascript/traverser.py @@ -12,6 +12,11 @@ class MockBundler: self.final_context = None self.tier = 4 + def get_resource(self, name): + "Represents a resource store" + + return False + def error(self, id, title, description, file="", line=1, column=0, context=None): "Represents a mock error" diff --git a/validator/testcases/scripting.py b/validator/testcases/scripting.py index 7a5a543..9429d21 100644 --- a/validator/testcases/scripting.py +++ b/validator/testcases/scripting.py @@ -6,14 +6,14 @@ import subprocess import tempfile import validator.testcases.javascript.traverser as traverser +from validator.constants import SPIDERMONKEY_INSTALLATION from validator.contextgenerator import ContextGenerator -import validator.submain as submain -SPIDERMONKEY = submain.constants.SPIDERMONKEY_INSTALLATION def test_js_file(err, name, data, filename=None, line=0): "Tests a JS file by parsing and analyzing its tokens" - if SPIDERMONKEY is None: + if SPIDERMONKEY_INSTALLATION is None and \ + not err.get_resource("SPIDERMONKEY"): return # The filename is @@ -21,7 +21,8 @@ def test_js_file(err, name, data, filename=None, line=0): filename = name # Get the AST tree for the JS code - tree = _get_tree(name, data) + tree = _get_tree(name, data, err.get_resource("SPIDERMONKEY") or + SPIDERMONKEY_INSTALLATION) if tree is None: return None @@ -48,9 +49,6 @@ def test_js_file(err, name, data, filename=None, line=0): def test_js_snippet(err, data, filename=None, line=0): "Process a JS snippet by passing it through to the file tester." - if SPIDERMONKEY is None: - return - if filename is not None: name = "%s:%d" % (filename, line) else: @@ -96,7 +94,7 @@ def _regex_tests(err, data, filename): context=c) -def _get_tree(name, code): +def _get_tree(name, code, shell=SPIDERMONKEY_INSTALLATION): # TODO : It seems appropriate to cut the `name` parameter out if the # parser is going to be installed locally. @@ -120,7 +118,7 @@ def _get_tree(name, code): temp.write(data) temp.flush() # This is very important - cmd = [SPIDERMONKEY, "-f", temp.name] + cmd = [shell, "-f", temp.name] shell = subprocess.Popen(cmd, shell=False, stderr=subprocess.PIPE, diff --git a/validator/testcases/targetapplication.py b/validator/testcases/targetapplication.py index 484c325..f122ae8 100644 --- a/validator/testcases/targetapplication.py +++ b/validator/testcases/targetapplication.py @@ -1,7 +1,5 @@ from validator import decorator -import validator.submain as submain -PACKAGE_DICTIONARY = submain.constants.PACKAGE_DICTIONARY -FF4_MIN = submain.constants.FF4_MIN +from validator.constants import PACKAGE_DICTIONARY, FF4_MIN APPLICATIONS = { "{ec8030f7-c20a-464f-9b0e-13a3a9e97384}": "firefox",