blob: 9128d743586035ba2b6b2e7dd996d8b35f08e054 [file] [log] [blame]
#!/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())