Updated the Zamboni API for bug 614574 to support Spidermonkey paths in the validate.validate function
This commit is contained in:
Родитель
076e7c51c1
Коммит
72e1a2dd1b
|
@ -2,6 +2,7 @@ import json
|
||||||
from StringIO import StringIO
|
from StringIO import StringIO
|
||||||
|
|
||||||
import validator.main
|
import validator.main
|
||||||
|
import validator.constants
|
||||||
import validator.testcases.targetapplication
|
import validator.testcases.targetapplication
|
||||||
from validator.errorbundler import ErrorBundle
|
from validator.errorbundler import ErrorBundle
|
||||||
from validator.constants import PACKAGE_ANY
|
from validator.constants import PACKAGE_ANY
|
||||||
|
@ -9,7 +10,8 @@ from validator.constants import PACKAGE_ANY
|
||||||
|
|
||||||
def validate(path, format="json",
|
def validate(path, format="json",
|
||||||
approved_applications="validator/app_versions.json",
|
approved_applications="validator/app_versions.json",
|
||||||
determined=True):
|
determined=True,
|
||||||
|
spidermonkey=None):
|
||||||
"Perform validation in one easy step!"
|
"Perform validation in one easy step!"
|
||||||
|
|
||||||
output = StringIO()
|
output = StringIO()
|
||||||
|
@ -20,6 +22,9 @@ def validate(path, format="json",
|
||||||
|
|
||||||
bundle = ErrorBundle(pipe=output, no_color=True, listed=True,
|
bundle = ErrorBundle(pipe=output, no_color=True, listed=True,
|
||||||
determined=determined)
|
determined=determined)
|
||||||
|
if spidermonkey is not None:
|
||||||
|
bundle.save_resource("SPIDERMONKEY", spidermonkey)
|
||||||
|
|
||||||
validator.main.prepare_package(bundle, path, PACKAGE_ANY)
|
validator.main.prepare_package(bundle, path, PACKAGE_ANY)
|
||||||
|
|
||||||
# Write the results to the pipe
|
# Write the results to the pipe
|
||||||
|
|
|
@ -30,3 +30,8 @@ if not os.path.exists(SPIDERMONKEY_INSTALLATION):
|
||||||
# The fallback is simply to disable JS tests.
|
# The fallback is simply to disable JS tests.
|
||||||
SPIDERMONKEY_INSTALLATION = None
|
SPIDERMONKEY_INSTALLATION = None
|
||||||
|
|
||||||
|
try:
|
||||||
|
from validator.constants_local import *
|
||||||
|
except ImportError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
|
@ -9,13 +9,6 @@ from validator.xpi import XPIManager
|
||||||
from validator.rdf import RDFParser
|
from validator.rdf import RDFParser
|
||||||
from validator import decorator
|
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 *
|
from constants import *
|
||||||
|
|
||||||
types = {0: "Unknown",
|
types = {0: "Unknown",
|
||||||
|
|
|
@ -12,6 +12,11 @@ class MockBundler:
|
||||||
self.final_context = None
|
self.final_context = None
|
||||||
self.tier = 4
|
self.tier = 4
|
||||||
|
|
||||||
|
def get_resource(self, name):
|
||||||
|
"Represents a resource store"
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
def error(self, id, title, description, file="",
|
def error(self, id, title, description, file="",
|
||||||
line=1, column=0, context=None):
|
line=1, column=0, context=None):
|
||||||
"Represents a mock error"
|
"Represents a mock error"
|
||||||
|
|
|
@ -6,14 +6,14 @@ import subprocess
|
||||||
import tempfile
|
import tempfile
|
||||||
|
|
||||||
import validator.testcases.javascript.traverser as traverser
|
import validator.testcases.javascript.traverser as traverser
|
||||||
|
from validator.constants import SPIDERMONKEY_INSTALLATION
|
||||||
from validator.contextgenerator import ContextGenerator
|
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):
|
def test_js_file(err, name, data, filename=None, line=0):
|
||||||
"Tests a JS file by parsing and analyzing its tokens"
|
"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
|
return
|
||||||
|
|
||||||
# The filename is
|
# The filename is
|
||||||
|
@ -21,7 +21,8 @@ def test_js_file(err, name, data, filename=None, line=0):
|
||||||
filename = name
|
filename = name
|
||||||
|
|
||||||
# Get the AST tree for the JS code
|
# 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:
|
if tree is None:
|
||||||
return 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):
|
def test_js_snippet(err, data, filename=None, line=0):
|
||||||
"Process a JS snippet by passing it through to the file tester."
|
"Process a JS snippet by passing it through to the file tester."
|
||||||
|
|
||||||
if SPIDERMONKEY is None:
|
|
||||||
return
|
|
||||||
|
|
||||||
if filename is not None:
|
if filename is not None:
|
||||||
name = "%s:%d" % (filename, line)
|
name = "%s:%d" % (filename, line)
|
||||||
else:
|
else:
|
||||||
|
@ -96,7 +94,7 @@ def _regex_tests(err, data, filename):
|
||||||
context=c)
|
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
|
# TODO : It seems appropriate to cut the `name` parameter out if the
|
||||||
# parser is going to be installed locally.
|
# parser is going to be installed locally.
|
||||||
|
@ -120,7 +118,7 @@ def _get_tree(name, code):
|
||||||
temp.write(data)
|
temp.write(data)
|
||||||
temp.flush() # This is very important
|
temp.flush() # This is very important
|
||||||
|
|
||||||
cmd = [SPIDERMONKEY, "-f", temp.name]
|
cmd = [shell, "-f", temp.name]
|
||||||
shell = subprocess.Popen(cmd,
|
shell = subprocess.Popen(cmd,
|
||||||
shell=False,
|
shell=False,
|
||||||
stderr=subprocess.PIPE,
|
stderr=subprocess.PIPE,
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
from validator import decorator
|
from validator import decorator
|
||||||
import validator.submain as submain
|
from validator.constants import PACKAGE_DICTIONARY, FF4_MIN
|
||||||
PACKAGE_DICTIONARY = submain.constants.PACKAGE_DICTIONARY
|
|
||||||
FF4_MIN = submain.constants.FF4_MIN
|
|
||||||
|
|
||||||
APPLICATIONS = {
|
APPLICATIONS = {
|
||||||
"{ec8030f7-c20a-464f-9b0e-13a3a9e97384}": "firefox",
|
"{ec8030f7-c20a-464f-9b0e-13a3a9e97384}": "firefox",
|
||||||
|
|
Загрузка…
Ссылка в новой задаче