def test_find_imports(self):
        compiler = LESS()
        source = """
@import "foo.css", ;
@import " ";
@import "foo.less";
@import (less) "bar";
@import "foo";
@import "foo.css";
@import "foo" screen;
@import "http://foo.com/bar";
@import url(foo);
@import "rounded-corners", "text-shadow";
"""
        expected = [
            "bar",
            "foo",
            "foo.less",
            "rounded-corners",
            "text-shadow",
        ]
        self.assertEqual(
            compiler.find_imports(source),
            expected
        )
 def test_get_output_filename(self):
     compiler = LESS()
     self.assertEqual(compiler.get_output_filename("dummy.less"), "dummy.css")
     self.assertEqual(
         compiler.get_output_filename("dummy.less.less"),
         "dummy.less.css"
     )
    def test_find_imports(self):
        compiler = LESS()
        source = """
@import "foo.css";
@import " ";
@import "foo.less";
@import "@{VAR}.less";
@import (reference) "reference.less";
@import (inline) "inline.css";
@import (less) "less.less";
@import (css) "css.css";
@import (once) "once.less";
@import (multiple) "multiple.less";
@import "screen.less" screen;
@import url(url-import);
@import 'single-quotes.less';
@import "no-extension";
"""
        expected = sorted([
            "foo.less",
            "global-var.less",
            "reference.less",
            "inline.css",
            "less.less",
            "once.less",
            "multiple.less",
            "screen.less",
            "single-quotes.less",
            "no-extension",
        ])
        self.assertEqual(
            compiler.find_imports(source),
            expected
        )
    def test_find_dependencies(self):
        compiler = LESS()
        files = {
            "A.less": "@import 'B/C.less';",
            "B/C.less": "@import '../E';",
            "E.less": "p {color: red;}",
        }
        compiler.get_source = MagicMock(side_effect=lambda x: files[x])

        root = os.path.dirname(__file__)

        existing_files = set()
        for f in files:
            existing_files.add(os.path.join(root, "static", normalize_path(f)))

        with patch("os.path.exists") as mocked_os_path_exist:
            mocked_os_path_exist.side_effect = lambda x: x in existing_files

            self.assertEqual(
                compiler.find_dependencies("A.less"),
                ["B/C.less", "E.less"]
            )
            self.assertEqual(
                compiler.find_dependencies("B/C.less"),
                ["E.less"]
            )
            self.assertEqual(
                compiler.find_dependencies("E.less"),
                []
            )
Esempio n. 5
0
    def test_find_imports(self):
        compiler = LESS()
        source = """
@import "foo.css", ;
@import " ";
@import "foo.less";
@import (less) "bar";
@import "foo";
@import "foo.css";
@import "foo" screen;
@import "http://foo.com/bar";
@import url(foo);
@import "rounded-corners", "text-shadow";
"""
        expected = [
            "bar",
            "foo",
            "foo.less",
            "rounded-corners",
            "text-shadow",
        ]
        self.assertEqual(
            compiler.find_imports(source),
            expected
        )
Esempio n. 6
0
 def test_get_output_filename(self):
     compiler = LESS()
     self.assertEqual(compiler.get_output_filename("dummy.less"), "dummy.css")
     self.assertEqual(
         compiler.get_output_filename("dummy.less.less"),
         "dummy.less.css"
     )
 def test_postprocesss(self):
     compiler = LESS()
     with patch("static_precompiler.compilers.less.convert_urls"
                ) as mocked_convert_urls:
         mocked_convert_urls.return_value = "spam"
         self.assertEqual(compiler.postprocess("ham", "eggs"), "spam")
         mocked_convert_urls.assert_called_with("ham", "eggs")
Esempio n. 8
0
def test_find_imports():
    compiler = LESS()
    source = """
@import "foo.css";
@import " ";
@import "foo.less";
@import (reference) "reference.less";
@import (inline) "inline.css";
@import (less) "less.less";
@import (css) "css.css";
@import (once) "once.less";
@import (multiple) "multiple.less";
@import "screen.less" screen;
@import url(url-import);
@import 'single-quotes.less';
@import "no-extension";
"""
    expected = sorted([
        "foo.less",
        "reference.less",
        "inline.css",
        "less.less",
        "once.less",
        "multiple.less",
        "screen.less",
        "single-quotes.less",
        "no-extension",
    ])
    assert compiler.find_imports(source) == expected
def test_postprocesss(monkeypatch):
    compiler = LESS()

    convert_urls = call_recorder(lambda *args: "spam")

    monkeypatch.setattr("static_precompiler.compilers.less.convert_urls", convert_urls)

    assert compiler.postprocess("ham", "eggs") == "spam"
    assert convert_urls.calls == [call("ham", "eggs")]
Esempio n. 10
0
def test_postprocesss(monkeypatch):
    compiler = LESS()

    convert_urls = call_recorder(lambda *args: "spam")

    monkeypatch.setattr("static_precompiler.compilers.less.convert_urls",
                        convert_urls)

    assert compiler.postprocess("ham", "eggs") == "spam"
    assert convert_urls.calls == [call("ham", "eggs")]
    def test_compile_file(self):
        compiler = LESS()

        self.assertEqual(
            compiler.compile_file("styles/test.less"), """p {
  font-size: 15px;
}
p a {
  color: red;
}
h1 {
  color: blue;
}
""")
Esempio n. 12
0
def test_compile_source():
    compiler = LESS()

    assert compiler.compile_source("p {font-size: 15px; a {color: red;}}") == "p {\n  font-size: 15px;\n}\np a {\n  color: red;\n}\n"

    with pytest.raises(StaticCompilationError):
        compiler.compile_source('invalid syntax')

    # Test non-ascii
    NON_ASCII = """.external_link:first-child:before {
  content: "Zobacz także:";
  background: url(картинка.png);
}
"""
    assert compiler.compile_source(NON_ASCII) == NON_ASCII
Esempio n. 13
0
    def test_compile_file(self):
        compiler = LESS()

        self.assertEqual(
            compiler.compile_file("styles/test.less"),
            """p {
  font-size: 15px;
}
p a {
  color: #ff0000;
}
h1 {
  color: blue;
}
"""
        )
    def test_compile_source(self):
        compiler = LESS()

        self.assertEqual(
            compiler.compile_source("p {font-size: 15px; a {color: red;}}"),
            "p {\n  font-size: 15px;\n}\np a {\n  color: red;\n}\n")

        self.assertRaises(StaticCompilationError,
                          lambda: compiler.compile_source('invalid syntax'))

        # Test non-ascii
        NON_ASCII = """.external_link:first-child:before {
  content: "Zobacz także:";
  background: url(картинка.png);
}
"""
        self.assertEqual(compiler.compile_source(NON_ASCII), NON_ASCII)
Esempio n. 15
0
    def test_locate_imported_file(self):
        compiler = LESS()
        with patch("os.path.exists") as mocked_os_path_exist:

            existing_files = set()
            for f in ("A/B.less", "D.less"):
                existing_files.add(os.path.join(STATIC_ROOT, f))

            mocked_os_path_exist.side_effect = lambda x: x in existing_files

            self.assertEqual(
                compiler.locate_imported_file("A", "B.less"),
                "A/B.less"
            )
            self.assertEqual(
                compiler.locate_imported_file("E", "../D"),
                "D.less"
            )
            self.assertEqual(
                compiler.locate_imported_file("E", "../A/B.less"),
                "A/B.less"
            )
            self.assertEqual(
                compiler.locate_imported_file("", "D.less"),
                "D.less"
            )
            self.assertRaises(
                StaticCompilationError,
                lambda: compiler.locate_imported_file("", "Z.less")
            )
def test_find_dependencies(monkeypatch):
    compiler = LESS()
    files = {
        "A.less": "@import 'B/C.less';",
        "B/C.less": "@import '../E';",
        "E.less": "p {color: red;}",
    }
    monkeypatch.setattr("static_precompiler.compilers.less.LESS.get_source", lambda self, x: files[x])

    root = os.path.dirname(__file__)

    existing_files = set()
    for f in files:
        existing_files.add(os.path.join(root, "static", normalize_path(f)))

    monkeypatch.setattr("os.path.exists", lambda path: path in existing_files)

    assert compiler.find_dependencies("A.less") == ["B/C.less", "E.less"]
    assert compiler.find_dependencies("B/C.less") == ["E.less"]
    assert compiler.find_dependencies("E.less") == []
Esempio n. 17
0
def test_find_dependencies(monkeypatch):
    compiler = LESS()
    files = {
        "A.less": "@import 'B/C.less';",
        "B/C.less": "@import '../E';",
        "E.less": "p {color: red;}",
    }
    monkeypatch.setattr("static_precompiler.compilers.less.LESS.get_source",
                        lambda self, x: files[x])

    root = os.path.dirname(__file__)

    existing_files = set()
    for f in files:
        existing_files.add(os.path.join(root, "static", normalize_path(f)))

    monkeypatch.setattr("os.path.exists", lambda path: path in existing_files)

    assert compiler.find_dependencies("A.less") == ["B/C.less", "E.less"]
    assert compiler.find_dependencies("B/C.less") == ["E.less"]
    assert compiler.find_dependencies("E.less") == []
Esempio n. 18
0
    def test_find_dependencies(self):
        compiler = LESS()
        files = {
            "A.less": "@import 'B/C.less';",
            "B/C.less": "@import '../E';",
            "E.less": "p {color: red;}",
        }
        compiler.get_source = MagicMock(side_effect=lambda x: files[x])

        existing_files = set()
        for f in files:
            existing_files.add(os.path.join(STATIC_ROOT, f))

        with patch("os.path.exists") as mocked_os_path_exist:
            mocked_os_path_exist.side_effect = lambda x: x in existing_files

            self.assertEqual(
                compiler.find_dependencies("A.less"),
                ["B/C.less", "E.less"]
            )
            self.assertEqual(
                compiler.find_dependencies("B/C.less"),
                ["E.less"]
            )
            self.assertEqual(
                compiler.find_dependencies("E.less"),
                []
            )
Esempio n. 19
0
    def test_locate_imported_file(self):
        compiler = LESS()
        with patch("os.path.exists") as mocked_os_path_exist:

            root = os.path.dirname(__file__)

            existing_files = set()
            for f in ("A/B.less", "D.less"):
                existing_files.add(os.path.join(root, "static", normalize_path(f)))

            mocked_os_path_exist.side_effect = lambda x: x in existing_files

            self.assertEqual(
                compiler.locate_imported_file("A", "B.less"),
                "A/B.less"
            )
            self.assertEqual(
                compiler.locate_imported_file("E", "../D"),
                "D.less"
            )
            self.assertEqual(
                compiler.locate_imported_file("E", "../A/B.less"),
                "A/B.less"
            )
            self.assertEqual(
                compiler.locate_imported_file("", "D.less"),
                "D.less"
            )
            self.assertRaises(
                StaticCompilationError,
                lambda: compiler.locate_imported_file("", "Z.less")
            )
Esempio n. 20
0
    def test_compile_source(self):
        compiler = LESS()

        self.assertEqual(
            compiler.compile_source("p {font-size: 15px; a {color: red;}}"),
            "p {\n  font-size: 15px;\n}\np a {\n  color: red;\n}\n"
        )

        self.assertRaises(
            StaticCompilationError,
            lambda: compiler.compile_source('invalid syntax')
        )

        # Test non-ascii
        NON_ASCII = """.external_link:first-child:before {
  content: "Zobacz także:";
  background: url(картинка.png);
}
"""
        self.assertEqual(
            compiler.compile_source(NON_ASCII),
            NON_ASCII
        )
Esempio n. 21
0
def test_locate_imported_file(monkeypatch):
    compiler = LESS()

    root = os.path.dirname(__file__)

    existing_files = set()
    for f in ("A/B.less", "D.less"):
        existing_files.add(os.path.join(root, "static", normalize_path(f)))

    monkeypatch.setattr("os.path.exists", lambda path: path in existing_files)

    assert compiler.locate_imported_file("A", "B.less") == "A/B.less"
    assert compiler.locate_imported_file("E", "../D") == "D.less"
    assert compiler.locate_imported_file("E", "../A/B.less") == "A/B.less"
    assert compiler.locate_imported_file("", "D.less") == "D.less"

    with pytest.raises(StaticCompilationError):
        compiler.locate_imported_file("", "Z.less")
def test_locate_imported_file(monkeypatch):
    compiler = LESS()

    root = os.path.dirname(__file__)

    existing_files = set()
    for f in ("A/B.less", "D.less"):
        existing_files.add(os.path.join(root, "static", normalize_path(f)))

    monkeypatch.setattr("os.path.exists", lambda path: path in existing_files)

    assert compiler.locate_imported_file("A", "B.less") == "A/B.less"
    assert compiler.locate_imported_file("E", "../D") == "D.less"
    assert compiler.locate_imported_file("E", "../A/B.less") == "A/B.less"
    assert compiler.locate_imported_file("", "D.less") == "D.less"

    with pytest.raises(StaticCompilationError):
        compiler.locate_imported_file("", "Z.less")
Esempio n. 23
0
def test_compile_source():
    compiler = LESS()

    assert (compiler.compile_source("p {font-size: 15px; a {color: red;}}") ==
            "p {\n  font-size: 15px;\n}\np a {\n  color: red;\n}\n")

    with pytest.raises(StaticCompilationError):
        compiler.compile_source('invalid syntax')

    # Test non-ascii
    NON_ASCII = """.external_link:first-child:before {
  content: "Zobacz także:";
  background: url(картинка.png);
}
"""
    assert compiler.compile_source(NON_ASCII) == NON_ASCII
    def test_locate_imported_file(self):
        compiler = LESS()
        with patch("os.path.exists") as mocked_os_path_exist:

            root = os.path.dirname(__file__)

            existing_files = set()
            for f in ("A/B.less", "D.less"):
                existing_files.add(
                    os.path.join(root, "static", normalize_path(f)))

            mocked_os_path_exist.side_effect = lambda x: x in existing_files

            self.assertEqual(compiler.locate_imported_file("A", "B.less"),
                             "A/B.less")
            self.assertEqual(compiler.locate_imported_file("E", "../D"),
                             "D.less")
            self.assertEqual(compiler.locate_imported_file("E", "../A/B.less"),
                             "A/B.less")
            self.assertEqual(compiler.locate_imported_file("", "D.less"),
                             "D.less")
            self.assertRaises(
                StaticCompilationError,
                lambda: compiler.locate_imported_file("", "Z.less"))
Esempio n. 25
0
 def test_postprocesss(self):
     compiler = LESS()
     with patch("static_precompiler.compilers.less.convert_urls") as mocked_convert_urls:
         mocked_convert_urls.return_value = "spam"
         self.assertEqual(compiler.postprocess("ham", "eggs"), "spam")
         mocked_convert_urls.assert_called_with("ham", "eggs")
def test_compile_file():
    compiler = LESS()

    assert compiler.compile_file("styles/test.less") == """p {
Esempio n. 27
0
 def test_is_supported(self):
     compiler = LESS()
     self.assertEqual(compiler.is_supported("dummy"), False)
     self.assertEqual(compiler.is_supported("dummy.less"), True)
 def test_is_supported(self):
     compiler = LESS()
     self.assertEqual(compiler.is_supported("dummy"), False)
     self.assertEqual(compiler.is_supported("dummy.less"), True)
from django.template.base import Library
from static_precompiler.compilers import LESS
from static_precompiler.templatetags.compile_static import register_compiler_tags

register = Library()
compiler = LESS()

register_compiler_tags(register, compiler)
Esempio n. 30
0
def test_compile_file():
    compiler = LESS()

    assert compiler.compile_file("styles/test.less") == """p {