Move shared parts into test.core and use it in LESS, issues and bootstrap3 auto-generated tests. This simplifies the test code and allows to use nosetests (or any other test runner).
88 lines
3.1 KiB
Python
88 lines
3.1 KiB
Python
"""
|
|
Test bootstrap module. For flexible testing.
|
|
"""
|
|
import os
|
|
import glob
|
|
|
|
from lesscpy.lessc import parser
|
|
from lesscpy.lessc import formatter
|
|
|
|
|
|
class Opt(object):
|
|
def __init__(self):
|
|
self.minify = False
|
|
self.xminify = False
|
|
self.tabs = True
|
|
|
|
|
|
def find_and_load_cases(cls, less_dir, css_dir, less_files=None, css_minimized=True):
|
|
_less_path = os.path.join(os.path.dirname(__file__), less_dir)
|
|
_css_path = os.path.join(os.path.dirname(__file__), css_dir)
|
|
|
|
if less_files:
|
|
LESS = [os.path.join(_less_path, "%s.less" % f) for f in less_files]
|
|
else:
|
|
LESS = glob.glob(os.path.join(_less_path, '*.less'))
|
|
for less in LESS:
|
|
lessf = less.split('.')[0].split('/')[-1]
|
|
css = os.path.join(_css_path, lessf + '.css')
|
|
if css_minimized:
|
|
mincss = os.path.join(_css_path, lessf + '.min.css')
|
|
test_method = create_case((less, css, mincss))
|
|
else:
|
|
test_method = create_case((less, css, None))
|
|
test_method.__name__ = 'test_%s' % "_".join(reversed(os.path.basename(less).split('.')))
|
|
setattr(cls, test_method.__name__, test_method)
|
|
|
|
|
|
def create_case(args):
|
|
def do_case_expected(self):
|
|
lessf, cssf, minf = args
|
|
if os.path.exists(cssf):
|
|
p = parser.LessParser()
|
|
p.parse(filename=lessf)
|
|
f = formatter.Formatter(Opt())
|
|
pout = f.format(p).split('\n')
|
|
pl = len(pout)
|
|
i = 0
|
|
with open(cssf) as cssf:
|
|
for line in cssf.readlines():
|
|
if i >= pl:
|
|
self.fail(
|
|
"%s: result has less lines (%d < %d)" % (cssf, i, pl))
|
|
line = line.rstrip()
|
|
if not line:
|
|
continue
|
|
self.assertEqual(
|
|
line, pout[i], '%s: Line %d' % (cssf, i + 1))
|
|
i += 1
|
|
if pl > i and i:
|
|
self.fail(
|
|
"%s: result has more lines (%d > %d)" % (cssf, i, pl))
|
|
else:
|
|
self.fail("%s not found..." % cssf)
|
|
if minf:
|
|
if os.path.exists(minf):
|
|
p = parser.LessParser()
|
|
opt = Opt()
|
|
opt.minify = True
|
|
p.parse(filename=lessf)
|
|
f = formatter.Formatter(opt)
|
|
mout = f.format(p).split('\n')
|
|
ml = len(mout)
|
|
i = 0
|
|
with open(minf) as cssf:
|
|
for line in cssf.readlines():
|
|
if i >= ml:
|
|
self.fail(
|
|
"%s: result has less lines (%d < %d)" % (minf, i, ml))
|
|
self.assertEqual(
|
|
line.rstrip(), mout[i], '%s: Line %d' % (minf, i + 1))
|
|
i += 1
|
|
if ml > i and i:
|
|
self.fail(
|
|
"%s: result has more lines (%d > %d)" % (minf, i, ml))
|
|
else:
|
|
self.fail("%s not found..." % minf)
|
|
return do_case_expected
|