Refactor testsuite invocation
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).
This commit is contained in:
parent
1097d95215
commit
4a7aaa6ce5
|
@ -1,18 +1,26 @@
|
|||
"""
|
||||
LessCss tests
|
||||
lesscpy test runner.
|
||||
"""
|
||||
import unittest
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
import bootstrap
|
||||
|
||||
here = os.path.dirname(__file__)
|
||||
path = os.path.abspath(here)
|
||||
while os.path.dirname(path) != path:
|
||||
if os.path.exists(os.path.join(path, 'lesscpy', '__init__.py')):
|
||||
sys.path.insert(0, path)
|
||||
break
|
||||
path = os.path.dirname(path)
|
||||
|
||||
|
||||
def find():
|
||||
svn = re.compile('\.svn')
|
||||
test = re.compile('test.+\.py$')
|
||||
alltests = unittest.TestSuite()
|
||||
for path, _, files in os.walk(bootstrap.here):
|
||||
for path, _, files in os.walk(here):
|
||||
if svn.search(path):
|
||||
continue
|
||||
for f in files:
|
||||
|
@ -21,5 +29,6 @@ def find():
|
|||
alltests.addTest(unittest.findTestCases(module))
|
||||
return alltests
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main(defaultTest='find')
|
||||
|
|
|
@ -1,81 +0,0 @@
|
|||
"""
|
||||
Test bootstrap module. For flexible testing.
|
||||
"""
|
||||
import os
|
||||
import sys
|
||||
|
||||
here = os.path.dirname(__file__)
|
||||
path = os.path.abspath(here)
|
||||
while os.path.dirname(path) != path:
|
||||
if os.path.exists(os.path.join(path, 'lesscpy', '__init__.py')):
|
||||
sys.path.insert(0, path)
|
||||
break
|
||||
path = os.path.dirname(path)
|
||||
|
||||
import unittest
|
||||
|
||||
from lesscpy.lessc import parser
|
||||
from lesscpy.lessc import formatter
|
||||
|
||||
|
||||
class TestCase(unittest.TestCase):
|
||||
pass
|
||||
|
||||
|
||||
class Opt(object):
|
||||
|
||||
def __init__(self):
|
||||
self.minify = False
|
||||
self.xminify = False
|
||||
self.tabs = True
|
||||
|
||||
|
||||
def create_test(args):
|
||||
def do_test_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 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_test_expected
|
|
@ -0,0 +1,87 @@
|
|||
"""
|
||||
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
|
|
@ -0,0 +1,29 @@
|
|||
"""
|
||||
lesscpy bootstrap3 tests.
|
||||
"""
|
||||
import unittest
|
||||
|
||||
from test.core import find_and_load_cases
|
||||
|
||||
|
||||
@unittest.skip("Minor semantic issues left")
|
||||
class Bootstrap3TestCase(unittest.TestCase):
|
||||
pass
|
||||
|
||||
|
||||
class Bootstrap3ThemeTestCase(unittest.TestCase):
|
||||
pass
|
||||
|
||||
|
||||
find_and_load_cases(Bootstrap3TestCase,
|
||||
less_dir='bootstrap3/less',
|
||||
less_files=['bootstrap'],
|
||||
css_dir='bootstrap3/css')
|
||||
|
||||
find_and_load_cases(Bootstrap3ThemeTestCase,
|
||||
less_dir='bootstrap3/less',
|
||||
less_files=['theme'],
|
||||
css_dir='bootstrap3/css')
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
|
@ -1,66 +1,19 @@
|
|||
"""
|
||||
lesscpy tests.
|
||||
lesscpy reported issues tests.
|
||||
"""
|
||||
import unittest
|
||||
import os
|
||||
import glob
|
||||
|
||||
from lesscpy.lessc import parser
|
||||
from lesscpy.lessc import formatter
|
||||
from test.core import find_and_load_cases
|
||||
|
||||
|
||||
class TestCase(unittest.TestCase):
|
||||
class IssuesTestCase(unittest.TestCase):
|
||||
pass
|
||||
|
||||
|
||||
class Opt(object):
|
||||
|
||||
def __init__(self):
|
||||
self.minify = False
|
||||
self.xminify = False
|
||||
self.tabs = True
|
||||
|
||||
|
||||
def create_test(args):
|
||||
def do_test_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)
|
||||
return do_test_expected
|
||||
|
||||
LESS = glob.glob(os.path.join('less/issues', '*.less'))
|
||||
_less_path = os.path.join(os.path.dirname(__file__), 'less', 'issues')
|
||||
_css_path = os.path.join(os.path.dirname(__file__), 'css', 'issues')
|
||||
|
||||
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')
|
||||
mincss = os.path.join(_css_path, lessf + '.min.css')
|
||||
test_method = create_test((less, css, mincss))
|
||||
test_method.__name__ = 'test_%s' % "_".join(reversed(os.path.basename(less).split('.')))
|
||||
setattr(TestCase, test_method.__name__, test_method)
|
||||
find_and_load_cases(IssuesTestCase,
|
||||
less_dir='less/issues',
|
||||
css_dir='css/issues',
|
||||
css_minimized=False)
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
|
@ -1,26 +1,18 @@
|
|||
"""
|
||||
lesscpy tests.
|
||||
lesscpy LESS tests.
|
||||
"""
|
||||
import unittest
|
||||
import os
|
||||
import glob
|
||||
|
||||
from bootstrap import create_test, TestCase
|
||||
from test.core import find_and_load_cases
|
||||
|
||||
|
||||
_less_path = os.path.join(os.path.dirname(__file__), 'less')
|
||||
_css_path = os.path.join(os.path.dirname(__file__), 'css')
|
||||
class LessTestCase(unittest.TestCase):
|
||||
pass
|
||||
|
||||
|
||||
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')
|
||||
mincss = os.path.join(_css_path, lessf + '.min.css')
|
||||
test_method = create_test((less, css, mincss))
|
||||
test_method.__name__ = 'test_%s' % "_".join(reversed(os.path.basename(less).split('.')))
|
||||
setattr(TestCase, test_method.__name__, test_method)
|
||||
|
||||
find_and_load_cases(LessTestCase,
|
||||
less_dir='less',
|
||||
css_dir='css')
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
|
@ -1,25 +0,0 @@
|
|||
"""
|
||||
bootstrap3 tests.
|
||||
"""
|
||||
import unittest
|
||||
import os
|
||||
|
||||
from bootstrap import create_test, TestCase
|
||||
|
||||
|
||||
_less_path = os.path.join(os.path.dirname(__file__), 'bootstrap3', 'less')
|
||||
_css_path = os.path.join(os.path.dirname(__file__), 'bootstrap3', 'css')
|
||||
|
||||
|
||||
LESS = [os.path.join(_less_path, "%s.less" % f) for f in ["bootstrap", "theme"]]
|
||||
for less in LESS:
|
||||
lessf = less.split('.')[0].split('/')[-1]
|
||||
css = os.path.join(_css_path, lessf + '.css')
|
||||
mincss = os.path.join(_css_path, lessf + '.min.css')
|
||||
test_method = create_test((less, css, mincss))
|
||||
test_method.__name__ = 'test_bootstrap3_%s' % "_".join(reversed(os.path.basename(less).split('.')))
|
||||
setattr(TestCase, test_method.__name__, test_method)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
Loading…
Reference in New Issue