From a34ea8dbafef50f695a57bb2a70fada1a79bd31c Mon Sep 17 00:00:00 2001 From: jtm Date: Sun, 26 Feb 2012 13:29:22 +0000 Subject: [PATCH] checkpoint --- lesscpy/lessc/parser.py | 2 +- lesscpy/lessc/scope.py | 15 ++++++---- lesscpy/scripts/compiler.py | 2 -- lesscpy/test/css/properties-uri.css | 20 +++++++++++++ lesscpy/test/css/properties-uri.min.css | 6 ++++ lesscpy/test/less/imports/circular.less | 1 + lesscpy/test/less/imports/import.less | 5 ++++ lesscpy/test/less/imports/import_f.less | 6 ++++ lesscpy/test/testissues.py | 40 +++++++++++++++++++++++++ 9 files changed, 89 insertions(+), 8 deletions(-) create mode 100644 lesscpy/test/css/properties-uri.css create mode 100644 lesscpy/test/css/properties-uri.min.css create mode 100644 lesscpy/test/less/imports/circular.less create mode 100644 lesscpy/test/less/imports/import.less create mode 100644 lesscpy/test/less/imports/import_f.less create mode 100644 lesscpy/test/testissues.py diff --git a/lesscpy/lessc/parser.py b/lesscpy/lessc/parser.py index 5e59e6e..820e21b 100644 --- a/lesscpy/lessc/parser.py +++ b/lesscpy/lessc/parser.py @@ -75,10 +75,10 @@ class LessParser(object): @param string: Filename @param int: Debuglevel """ + if self.verbose: print('Compiling target: %s' % filename) self.scope.push() self.target = filename self.result = self.parser.parse(filename, lexer=self.lex, debug=debuglevel) -# [print(r) for r in self.result] def scopemap(self): """ Output scopemap. diff --git a/lesscpy/lessc/scope.py b/lesscpy/lessc/scope.py index 18d908d..b353113 100644 --- a/lesscpy/lessc/scope.py +++ b/lesscpy/lessc/scope.py @@ -11,7 +11,8 @@ class Scope(list): """ self.append({ '__variables__' : {}, - '__blocks__': {}, + '__blocks__': [], + '__names__': [], '__current__': None }) @@ -30,7 +31,8 @@ class Scope(list): def add_block(self, block): """ """ - self[-1]['__blocks__'][block.name] = block + self[-1]['__blocks__'].append(block) + self[-1]['__names__'].append(block.name.strip()) def add_mixin(self, mixin): """ @@ -65,8 +67,10 @@ class Scope(list): i = len(self) while i >= 0: i -= 1 - if name in self[i]['__blocks__']: - return self[i]['__blocks__'][name] + if name in self[i]['__names__']: + for b in self[i]['__blocks__']: + if b.name.strip() == name: + return b return False def in_mixin(self): @@ -80,5 +84,6 @@ class Scope(list): """ self._mixins.update(scope._mixins) self[0]['__variables__'].update(scope[0]['__variables__']) - self[0]['__blocks__'].update(scope[0]['__blocks__']) + self[0]['__blocks__'].extend(scope[0]['__blocks__']) + self[0]['__names__'].extend(scope[0]['__names__']) \ No newline at end of file diff --git a/lesscpy/scripts/compiler.py b/lesscpy/scripts/compiler.py index d4b1fa3..2019c8e 100644 --- a/lesscpy/scripts/compiler.py +++ b/lesscpy/scripts/compiler.py @@ -111,7 +111,6 @@ def run(): scope = None if args.include: for u in args.include.split(','): - if args.debug: print("compiling include: %s" % u) p = parser.LessParser( yacc_debug=False, lex_optimize=True, @@ -134,7 +133,6 @@ def run(): if args.dry_run: print('Dry run, nothing done.') else: - if args.verbose: print("compiling target: %s" % args.target) p = parser.LessParser(yacc_debug=(args.debug), lex_optimize=True, yacc_optimize=(not args.debug), diff --git a/lesscpy/test/css/properties-uri.css b/lesscpy/test/css/properties-uri.css new file mode 100644 index 0000000..949a468 --- /dev/null +++ b/lesscpy/test/css/properties-uri.css @@ -0,0 +1,20 @@ +#data-uri { + background: url(data:image/png;charset=utf-8;base64, + kiVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD/ + k//+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4U + kg9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC); + background-image: url(data:image/x-png,f9difSSFIIGFIFJD1f982FSDKAA9==); +} +#svg-data-uri { + background: transparent url('data:image/svg+xml, '); +} +.uri_test { + background-image: url(images/image.jpg); + background-image: url(../some/path); + background-image: url(./../some/path); + background-image: url(./images/image.jpg); + background-image: url(http://some/path/img.jpeg); + background-image: url(https://some.server.com:9696/path/img.jpeg); + behavior: url(border-radius.htc); + background-image: url(fonts.svg#MyGeometricModern); +} diff --git a/lesscpy/test/css/properties-uri.min.css b/lesscpy/test/css/properties-uri.min.css new file mode 100644 index 0000000..bd9d5dd --- /dev/null +++ b/lesscpy/test/css/properties-uri.min.css @@ -0,0 +1,6 @@ +#data-uri{background:url(data:image/png;charset=utf-8;base64, + kiVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD/ + k//+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4U + kg9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC);background-image:url(data:image/x-png,f9difSSFIIGFIFJD1f982FSDKAA9==);} +#svg-data-uri{background:transparent url('data:image/svg+xml, ');} +.uri_test{background-image:url(images/image.jpg);background-image:url(../some/path);background-image:url(./../some/path);background-image:url(./images/image.jpg);background-image:url(http://some/path/img.jpeg);background-image:url(https://some.server.com:9696/path/img.jpeg);behavior:url(border-radius.htc);background-image:url(fonts.svg#MyGeometricModern);} diff --git a/lesscpy/test/less/imports/circular.less b/lesscpy/test/less/imports/circular.less new file mode 100644 index 0000000..92094f7 --- /dev/null +++ b/lesscpy/test/less/imports/circular.less @@ -0,0 +1 @@ +@import 'circular.less'; \ No newline at end of file diff --git a/lesscpy/test/less/imports/import.less b/lesscpy/test/less/imports/import.less new file mode 100644 index 0000000..4338bba --- /dev/null +++ b/lesscpy/test/less/imports/import.less @@ -0,0 +1,5 @@ +@imported: 9px; + +.mixin { + color: red; +} \ No newline at end of file diff --git a/lesscpy/test/less/imports/import_f.less b/lesscpy/test/less/imports/import_f.less new file mode 100644 index 0000000..4325fc1 --- /dev/null +++ b/lesscpy/test/less/imports/import_f.less @@ -0,0 +1,6 @@ +/* + +*/ +.mixf (@var: 7px) { + width: @var; +} \ No newline at end of file diff --git a/lesscpy/test/testissues.py b/lesscpy/test/testissues.py new file mode 100644 index 0000000..2512ded --- /dev/null +++ b/lesscpy/test/testissues.py @@ -0,0 +1,40 @@ +""" + lesscpy tests. Issues +""" +import unittest +import os +import glob +import bootstrap + +from lesscpy.lessc import parser +from lesscpy.lessc import formatter + + +class TestCase(unittest.TestCase): + pass + +def create_test (pair): + def do_test_expected(self): + if os.path.exists(pair[1]): + p = parser.LessParser() + p.parse(filename=pair[0]) + f = formatter.Formatter() + pout = f.format(p).split('\n') + i = 0 + with open(pair[1]) as cssf: + for line in cssf.readlines(): + self.assertEqual(line.rstrip(), pout[i], '%s: Line %d' % (pair[1], i+1)) + i += 1 + else: self.fail('%s not found' % pair[1]) + return do_test_expected + +LESS = glob.glob( os.path.join('less/issues/', '*.less')) +for less in LESS: + css = less.split('.')[0].split('/')[-1] + css = 'css/issues/' + css + '.css' + test_method = create_test((less, css)) + test_method.__name__ = 'test_%s' % less.replace('./-', '_') + setattr(TestCase, test_method.__name__, test_method) + +if __name__=="__main__": + unittest.main() \ No newline at end of file