167 lines
5.0 KiB
Python
Executable File
167 lines
5.0 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# -*- coding: ascii -*-
|
|
#
|
|
# Copyright 2014
|
|
# Andr\xe9 Malo or his licensors, as applicable
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
"""
|
|
===========
|
|
Run tests
|
|
===========
|
|
|
|
Run tests.
|
|
"""
|
|
__author__ = "Andr\xe9 Malo"
|
|
__author__ = getattr(__author__, 'decode', lambda x: __author__)('latin-1')
|
|
__docformat__ = "restructuredtext en"
|
|
|
|
import os as _os
|
|
import re as _re
|
|
import sys as _sys
|
|
|
|
from _setup import shell
|
|
from _setup import term
|
|
|
|
|
|
def run_tests(basedir, libdir):
|
|
""" Run output based tests """
|
|
import rcssmin as _rcssmin
|
|
py_cssmin = _rcssmin._make_cssmin(python_only=True)
|
|
c_cssmin = _rcssmin._make_cssmin(python_only=False)
|
|
|
|
def run_test(example, output_file):
|
|
""" Run it """
|
|
try:
|
|
fp = open(example, 'r')
|
|
except IOError:
|
|
return
|
|
else:
|
|
try:
|
|
input = fp.read()
|
|
finally:
|
|
fp.close()
|
|
|
|
def load_output(filename):
|
|
try:
|
|
fp = open(filename, 'r')
|
|
except IOError:
|
|
return None
|
|
else:
|
|
try:
|
|
output = fp.read()
|
|
finally:
|
|
fp.close()
|
|
output = output.strip()
|
|
if _re.search(r'(?<!\\)(?:\\\\)*\\[0-9a-zA-Z]{1,6}$', output):
|
|
output += ' '
|
|
return output
|
|
|
|
output = load_output(output_file)
|
|
output_b = load_output(output_file + '.b')
|
|
|
|
def do_test(cssmin, output, **options):
|
|
try:
|
|
genout = cssmin(input, **options)
|
|
except (KeyboardInterrupt, SystemExit):
|
|
raise
|
|
except:
|
|
return 1, "%(RED)s exc%(NORMAL)s "
|
|
else:
|
|
if output is None:
|
|
return 1, "%(RED)smiss%(NORMAL)s "
|
|
elif genout == output or genout == output.rstrip():
|
|
return 0, "%(GREEN)sOK%(NORMAL)s "
|
|
else:
|
|
return 1, "%(RED)sfail%(NORMAL)s "
|
|
|
|
erred, out = do_test(py_cssmin, output)
|
|
erred, c_out = do_test(c_cssmin, output)
|
|
erred, out_b = do_test(py_cssmin, output_b, keep_bang_comments=True)
|
|
erred, c_out_b = do_test(c_cssmin, output_b, keep_bang_comments=True)
|
|
|
|
term.write(
|
|
"%(out)s %(out_b)s | %(c_out)s %(c_out_b)s - %%(example)s\n"
|
|
% locals(),
|
|
example=_os.path.basename(example),
|
|
)
|
|
return erred
|
|
|
|
# end
|
|
# begin main test code
|
|
|
|
erred = 0
|
|
basedir = shell.native(basedir)
|
|
strip = len(basedir) - len(_os.path.basename(basedir))
|
|
for dirname, dirs, files in shell.walk(basedir):
|
|
dirs[:] = [
|
|
item for item in dirs if item not in ('.svn', '.git', 'out')
|
|
]
|
|
dirs.sort()
|
|
files = [item for item in files if item.endswith('.css')]
|
|
if not files:
|
|
continue
|
|
if not _os.path.isdir(_os.path.join(basedir, dirname, 'out')):
|
|
continue
|
|
term.yellow("---> %s" % (dirname[strip:],))
|
|
files.sort()
|
|
for filename in files:
|
|
if run_test(
|
|
_os.path.join(dirname, filename),
|
|
_os.path.join(dirname, 'out', filename[:-4] + '.out'),
|
|
): erred = 1
|
|
term.yellow("<--- %s" % (dirname[strip:],))
|
|
return erred
|
|
|
|
|
|
def main():
|
|
""" Main """
|
|
basedir, libdir = None, None
|
|
accept_opts = True
|
|
args = []
|
|
for arg in _sys.argv[1:]:
|
|
if accept_opts:
|
|
if arg == '--':
|
|
accept_opts = False
|
|
continue
|
|
elif arg == '-q':
|
|
term.write = term.green = term.red = term.yellow = \
|
|
term.announce = \
|
|
lambda fmt, **kwargs: None
|
|
continue
|
|
elif arg == '-p':
|
|
info = {}
|
|
for key in term.terminfo():
|
|
info[key] = ''
|
|
info['ERASE'] = '\n'
|
|
term.terminfo.info = info
|
|
continue
|
|
elif arg.startswith('-'):
|
|
_sys.stderr.write("Unrecognized option %r\n" % (arg,))
|
|
return 2
|
|
args.append(arg)
|
|
if len(args) > 2:
|
|
_sys.stderr.write("Too many arguments\n")
|
|
return 2
|
|
elif len(args) < 1:
|
|
_sys.stderr.write("Missing arguments\n")
|
|
return 2
|
|
basedir = args[0]
|
|
if len(args) > 1:
|
|
libdir = args[1]
|
|
return run_tests(basedir, libdir)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
_sys.exit(main())
|