def test_compile_file():
    compiler = SCSS()

    assert (
        fix_line_breaks(compiler.compile_file("styles/test.scss")) ==
        "p {\n  font-size: 15px; }\n  p a {\n    color: red; }\n"
    )
Пример #2
0
    def test_find_dependencies(self):
        compiler = SCSS()
        files = {
            "A.scss": "@import 'B/C.scss';",
            "B/C.scss": "@import '../E';",
            "_E.scss": "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.scss"),
                ["B/C.scss", "_E.scss"]
            )
            self.assertEqual(
                compiler.find_dependencies("B/C.scss"),
                ["_E.scss"]
            )
            self.assertEqual(
                compiler.find_dependencies("_E.scss"),
                []
            )
 def test_parse_import_string(self):
     compiler = SCSS()
     import_string = """"foo, bar" , "foo", url(bar,baz),
      'bar,foo',bar screen, projection"""
     self.assertEqual(
         compiler.parse_import_string(import_string), [
             "bar",
             "bar,foo",
             "foo",
             "foo, bar",
         ]
     )
     import_string = """"foo,bar", url(bar,baz), 'bar,foo',bar screen, projection"""
     self.assertEqual(
         compiler.parse_import_string(import_string), [
             "bar",
             "bar,foo",
             "foo,bar",
         ]
     )
     import_string = """"foo" screen"""
     self.assertEqual(
         compiler.parse_import_string(import_string), [
             "foo",
         ]
     )
Пример #4
0
def test_postprocesss(monkeypatch):
    compiler = SCSS()
    convert_urls = call_recorder(lambda *args: "spam")
    monkeypatch.setattr("static_precompiler.compilers.scss.convert_urls",
                        convert_urls)
    assert compiler.postprocess("ham", "eggs") == "spam"
    assert convert_urls.calls == [call("ham", "eggs")]
    def test_compass(self):
        compiler = SCSS()

        self.assertEqual(
            fix_line_breaks(compiler.compile_file("test-compass.scss")),
            "p {\n  background: url('/static/images/test.png'); }\n"
        )
    def test_compile_file(self):
        compiler = SCSS()

        self.assertEqual(
            fix_line_breaks(compiler.compile_file("styles/test.scss")),
            "p {\n  font-size: 15px; }\n  p a {\n    color: red; }\n"
        )
def test_compass():
    compiler = SCSS(compass_enabled=True)

    assert (
        fix_line_breaks(compiler.compile_file("test-compass.scss")) ==
        "p {\n  background: url('/static/images/test.png'); }\n"
    )
 def test_get_output_filename(self):
     compiler = SCSS()
     self.assertEqual(compiler.get_output_filename("dummy.scss"), "dummy.css")
     self.assertEqual(
         compiler.get_output_filename("dummy.scss.scss"),
         "dummy.scss.css"
     )
Пример #9
0
 def test_postprocesss(self):
     compiler = SCSS()
     with patch("static_precompiler.compilers.scss.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")
Пример #10
0
def test_compass_import():
    compiler = SCSS(compass_enabled=True)

    assert fix_line_breaks(compiler.compile_file("styles/test-compass-import.scss")) == ".round-corners {\n  -moz-border-radius: 4px / 4px;\n  -webkit-border-radius: 4px 4px;\n  border-radius: 4px / 4px; }\n"

    compiler = SCSS(compass_enabled=False)
    with pytest.raises(StaticCompilationError):
        compiler.compile_file("styles/test-compass-import.scss")
    def test_compass_import(self):
        compiler = SCSS()

        with patch.object(compiler, "compass_enabled", return_value=True):
            self.assertEqual(
                fix_line_breaks(compiler.compile_file("styles/test-compass-import.scss")),
                ".round-corners {\n  -webkit-border-radius: 4px 4px;\n  -moz-border-radius: 4px / 4px;\n  border-radius: 4px / 4px; }\n"
            )

        with patch.object(compiler, "compass_enabled", return_value=False):
            self.assertRaises(StaticCompilationError, lambda: compiler.compile_file("styles/test-compass-import.scss"))
    def test_find_imports(self):
        compiler = SCSS()
        source = """
@import "foo.css", ;
@import " ";
@import "foo.scss";
@import "foo";
@import "foo.css";
@import "foo" screen;
@import "http://foo.com/bar";
@import url(foo);
@import "rounded-corners",
        "text-shadow";
@import "compass";
@import "compass.scss";
@import "compass/css3";
@import url(http://fonts.googleapis.com/css?family=Arvo:400,700,400italic,700italic);
@import url("http://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,400,700,600,300");
@import "foo,bar", url(bar,baz), 'bar,foo';
"""

        compiler.compass_enabled = MagicMock()
        compiler.compass_enabled.return_value = False

        expected = [
            "bar,foo",
            "compass",
            "compass.scss",
            "compass/css3",
            "foo",
            "foo,bar",
            "foo.scss",
            "rounded-corners",
            "text-shadow",
        ]
        self.assertEqual(
            compiler.find_imports(source),
            expected
        )

        compiler.compass_enabled.return_value = True
        expected = [
            "bar,foo",
            "foo",
            "foo,bar",
            "foo.scss",
            "rounded-corners",
            "text-shadow",
        ]
        self.assertEqual(
            compiler.find_imports(source),
            expected
        )
Пример #13
0
    def test_locate_imported_file(self):
        compiler = SCSS()
        with patch("os.path.exists") as mocked_os_path_exist:

            root = os.path.dirname(__file__)

            existing_files = set()
            for f in ("A/B.scss", "A/_C.scss", "D.scss"):
                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.scss"),
                             "A/B.scss")
            self.assertEqual(compiler.locate_imported_file("A", "C"),
                             "A/_C.scss")
            self.assertEqual(compiler.locate_imported_file("E", "../D"),
                             "D.scss")
            self.assertEqual(compiler.locate_imported_file("E", "../A/B.scss"),
                             "A/B.scss")
            self.assertEqual(compiler.locate_imported_file("", "D.scss"),
                             "D.scss")
            self.assertRaises(
                StaticCompilationError,
                lambda: compiler.locate_imported_file("", "Z.scss"))
Пример #14
0
    def test_locate_imported_file(self):
        compiler = SCSS()
        with patch("os.path.exists") as mocked_os_path_exist:

            existing_files = set()
            for f in ("A/B.scss", "A/_C.scss", "D.scss"):
                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.scss"),
                "A/B.scss"
            )
            self.assertEqual(
                compiler.locate_imported_file("A", "C"),
                "A/_C.scss"
            )
            self.assertEqual(
                compiler.locate_imported_file("E", "../D"),
                "D.scss"
            )
            self.assertEqual(
                compiler.locate_imported_file("E", "../A/B.scss"),
                "A/B.scss"
            )
            self.assertEqual(
                compiler.locate_imported_file("", "D.scss"),
                "D.scss"
            )
            self.assertRaises(
                StaticCompilationError,
                lambda: compiler.locate_imported_file("", "Z.scss")
            )
def test_find_imports():
    source = """
@import "foo.css", ;
@import " ";
@import "foo.scss";
@import "foo";
@import "foo.css";
@import "foo" screen;
@import "http://foo.com/bar";
@import url(foo);
@import "rounded-corners",
        "text-shadow";
@import "compass";
@import "compass.scss";
@import "compass/css3";
@import url(http://fonts.googleapis.com/css?family=Arvo:400,700,400italic,700italic);
@import url("http://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,400,700,600,300");
@import "foo,bar", url(bar,baz), 'bar,foo';
"""

    expected = [
        "bar,foo",
        "compass",
        "compass.scss",
        "compass/css3",
        "foo",
        "foo,bar",
        "foo.scss",
        "rounded-corners",
        "text-shadow",
    ]
    compiler = SCSS(compass_enabled=False)
    assert compiler.find_imports(source) == expected

    compiler = SCSS(compass_enabled=True)
    expected = [
        "bar,foo",
        "foo",
        "foo,bar",
        "foo.scss",
        "rounded-corners",
        "text-shadow",
    ]
    assert compiler.find_imports(source) == expected
Пример #16
0
    def test_compile_source(self):
        compiler = SCSS()

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

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

        # Test non-ascii
        NON_ASCII = """@charset "UTF-8";
.external_link:first-child:before {
  content: "Zobacz także:";
  background: url(картинка.png); }
"""
        self.assertEqual(fix_line_breaks(compiler.compile_source(NON_ASCII)),
                         NON_ASCII)
def test_parse_import_string():
    compiler = SCSS()
    import_string = """"foo, bar" , "foo", url(bar,baz),
     'bar,foo',bar screen, projection"""
    assert compiler.parse_import_string(import_string) == [
        "bar",
        "bar,foo",
        "foo",
        "foo, bar",
    ]

    import_string = """"foo,bar", url(bar,baz), 'bar,foo',bar screen, projection"""
    assert compiler.parse_import_string(import_string) == [
        "bar",
        "bar,foo",
        "foo,bar",
    ]

    import_string = """"foo" screen"""
    assert compiler.parse_import_string(import_string) == ["foo"]
Пример #18
0
def test_parse_import_string():
    compiler = SCSS()
    import_string = """"foo, bar" , "foo", url(bar,baz),
     'bar,foo',bar screen, projection"""
    assert compiler.parse_import_string(import_string) == [
        "bar",
        "bar,foo",
        "foo",
        "foo, bar",
    ]

    import_string = """"foo,bar", url(bar,baz), 'bar,foo',bar screen, projection"""
    assert compiler.parse_import_string(import_string) == [
        "bar",
        "bar,foo",
        "foo,bar",
    ]

    import_string = """"foo" screen"""
    assert compiler.parse_import_string(import_string) == ["foo"]
def test_find_dependencies(monkeypatch):
    compiler = SCSS()
    files = {
        "A.scss": "@import 'B/C.scss';",
        "B/C.scss": "@import '../E';",
        "_E.scss": "p {color: red;}",
        "compass-import.scss": '@import "compass"',
    }
    monkeypatch.setattr("static_precompiler.compilers.scss.SCSS.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 x: x in existing_files)

    assert compiler.find_dependencies("A.scss") == ["B/C.scss", "_E.scss"]
    assert compiler.find_dependencies("B/C.scss") == ["_E.scss"]
    assert compiler.find_dependencies("_E.scss") == []
def test_locate_imported_file(monkeypatch):
    compiler = SCSS()

    root = os.path.dirname(__file__)

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

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

    assert compiler.locate_imported_file("A", "B.scss") == "A/B.scss"
    assert compiler.locate_imported_file("A", "C") == "A/_C.scss"
    assert compiler.locate_imported_file("E", "../D") == "D.scss"
    assert compiler.locate_imported_file("E", "../A/B.scss") == "A/B.scss"
    assert compiler.locate_imported_file("", "D.scss") == "D.scss"
    assert compiler.locate_imported_file("A", "S.sass") == "A/S.sass"
    assert compiler.locate_imported_file("A", "S") == "A/S.sass"

    with pytest.raises(StaticCompilationError):
        compiler.locate_imported_file("", "Z.scss")
    def test_find_dependencies(self):
        compiler = SCSS()
        files = {
            "A.scss": "@import 'B/C.scss';",
            "B/C.scss": "@import '../E';",
            "_E.scss": "p {color: red;}",
            "compass-import.scss": '@import "compass"',
        }
        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.scss"),
                ["B/C.scss", "_E.scss"]
            )
            self.assertEqual(
                compiler.find_dependencies("B/C.scss"),
                ["_E.scss"]
            )
            self.assertEqual(
                compiler.find_dependencies("_E.scss"),
                []
            )
Пример #22
0
def test_find_dependencies(monkeypatch):
    compiler = SCSS()
    files = {
        "A.scss": "@import 'B/C.scss';",
        "B/C.scss": "@import '../E';",
        "_E.scss": "p {color: red;}",
        "compass-import.scss": '@import "compass"',
    }
    monkeypatch.setattr("static_precompiler.compilers.scss.SCSS.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 x: x in existing_files)

    assert compiler.find_dependencies("A.scss") == ["B/C.scss", "_E.scss"]
    assert compiler.find_dependencies("B/C.scss") == ["_E.scss"]
    assert compiler.find_dependencies("_E.scss") == []
Пример #23
0
    def test_find_imports(self):
        compiler = SCSS()
        source = """
@import "foo.css", ;
@import " ";
@import "foo.scss";
@import "foo";
@import "foo.css";
@import "foo" screen;
@import "http://foo.com/bar";
@import url(foo);
@import "rounded-corners", "text-shadow";
"""
        expected = [
            "foo",
            "foo.scss",
            "rounded-corners",
            "text-shadow",
        ]
        self.assertEqual(
            compiler.find_imports(source),
            expected
        )
    def test_compile_source(self):
        compiler = SCSS()

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

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

        # Test non-ascii
        NON_ASCII = """@charset "UTF-8";
.external_link:first-child:before {
  content: "Zobacz także:";
  background: url(картинка.png); }
"""
        self.assertEqual(
            fix_line_breaks(compiler.compile_source(NON_ASCII)),
            NON_ASCII
        )
Пример #25
0
def test_compass_import():
    compiler = SCSS(compass_enabled=True)

    assert (fix_line_breaks(
        compiler.compile_file("styles/test-compass-import.scss")) ==
            ".round-corners {\n"
            "  -moz-border-radius: 4px / 4px;\n"
            "  -webkit-border-radius: 4px 4px;\n"
            "  border-radius: 4px / 4px; }\n")

    compiler = SCSS(compass_enabled=False)
    with pytest.raises(StaticCompilationError):
        compiler.compile_file("styles/test-compass-import.scss")
Пример #26
0
def test_find_imports():
    source = """
@import "foo.css", ;
@import " ";
@import "foo.scss";
@import "foo";
@import "foo.css";
@import "foo" screen;
@import "http://foo.com/bar";
@import url(foo);
@import "rounded-corners",
        "text-shadow";
@import "compass";
@import "compass.scss";
@import "compass/css3";
@import url(http://fonts.googleapis.com/css?family=Arvo:400,700,400italic,700italic);
@import url("http://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,400,700,600,300");
@import "foo,bar", url(bar,baz), 'bar,foo';
"""

    expected = [
        "bar,foo",
        "compass",
        "compass.scss",
        "compass/css3",
        "foo",
        "foo,bar",
        "foo.scss",
        "rounded-corners",
        "text-shadow",
    ]
    compiler = SCSS(compass_enabled=False)
    assert compiler.find_imports(source) == expected

    compiler = SCSS(compass_enabled=True)
    expected = [
        "bar,foo",
        "foo",
        "foo,bar",
        "foo.scss",
        "rounded-corners",
        "text-shadow",
    ]
    assert compiler.find_imports(source) == expected
def test_postprocesss(monkeypatch):
    compiler = SCSS()
    convert_urls = call_recorder(lambda *args: "spam")
    monkeypatch.setattr("static_precompiler.compilers.scss.convert_urls", convert_urls)
    assert compiler.postprocess("ham", "eggs") == "spam"
    assert convert_urls.calls == [call("ham", "eggs")]
def test_compile_source():
    compiler = SCSS(executable="scss")
    assert (
        fix_line_breaks(compiler.compile_source("p {font-size: 15px; a {color: red;}}")) ==
        "p {\n  font-size: 15px; }\n  p a {\n    color: red; }\n"
    )

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

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

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

    # Test non-ascii
    NON_ASCII = """@charset "UTF-8";
.external_link:first-child:before {
  content: "Zobacz także:";
  background: url(картинка.png); }
"""
    assert fix_line_breaks(compiler.compile_source(NON_ASCII)) == NON_ASCII

    compiler = SASS(executable="sass")
    assert (
        fix_line_breaks(compiler.compile_source("p\n  font-size: 15px\n  a\n    color: red")) ==
        "p {\n  font-size: 15px; }\n  p a {\n    color: red; }\n"
    )
    compiler = SASS(executable="scss")
    assert (
        fix_line_breaks(compiler.compile_source("p\n  font-size: 15px\n  a\n    color: red")) ==
        "p {\n  font-size: 15px; }\n  p a {\n    color: red; }\n"
    )
Пример #29
0
def test_compile_file():
    compiler = SCSS()

    assert (fix_line_breaks(compiler.compile_file("styles/test.scss")) ==
            "p {\n  font-size: 15px; }\n  p a {\n    color: red; }\n")
Пример #30
0
def test_compass():
    compiler = SCSS(compass_enabled=True)

    assert (fix_line_breaks(compiler.compile_file("test-compass.scss")) ==
            "p {\n  background: url('/static/images/test.png'); }\n")
Пример #31
0
def test_compile_source():
    compiler = SCSS(executable="scss")
    assert (fix_line_breaks(
        compiler.compile_source("p {font-size: 15px; a {color: red;}}")) ==
            "p {\n  font-size: 15px; }\n  p a {\n    color: red; }\n")

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

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

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

    # Test non-ascii
    NON_ASCII = """@charset "UTF-8";
.external_link:first-child:before {
  content: "Zobacz także:";
  background: url(картинка.png); }
"""
    assert fix_line_breaks(compiler.compile_source(NON_ASCII)) == NON_ASCII

    compiler = SASS(executable="sass")
    assert (fix_line_breaks(
        compiler.compile_source("p\n  font-size: 15px\n  a\n    color: red"))
            == "p {\n  font-size: 15px; }\n  p a {\n    color: red; }\n")
    compiler = SASS(executable="scss")
    assert (fix_line_breaks(
        compiler.compile_source("p\n  font-size: 15px\n  a\n    color: red"))
            == "p {\n  font-size: 15px; }\n  p a {\n    color: red; }\n")
 def test_is_supported(self):
     compiler = SCSS()
     self.assertEqual(compiler.is_supported("dummy"), False)
     self.assertEqual(compiler.is_supported("dummy.scss"), True)
 def test_postprocesss(self):
     compiler = SCSS()
     with patch("static_precompiler.compilers.scss.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")
Пример #34
0
from django.template.base import Library
from static_precompiler.compilers import SCSS
from static_precompiler.templatetags.base import BaseInlineNode

register = Library()
compiler = SCSS()


class InlineSCSSNode(BaseInlineNode):

    compiler = compiler


#noinspection PyUnusedLocal
@register.tag(name="inlinescss")
def do_inlinecoffeescript(parser, token):
    nodelist = parser.parse(("endinlinescss", ))
    parser.delete_first_token()
    return InlineSCSSNode(nodelist)


@register.simple_tag
def scss(path):
    return compiler.compile(path)
Пример #35
0
def test_locate_imported_file(monkeypatch):
    compiler = SCSS()

    root = os.path.dirname(__file__)

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

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

    assert compiler.locate_imported_file("A", "B.scss") == "A/B.scss"
    assert compiler.locate_imported_file("A", "C") == "A/_C.scss"
    assert compiler.locate_imported_file("E", "../D") == "D.scss"
    assert compiler.locate_imported_file("E", "../A/B.scss") == "A/B.scss"
    assert compiler.locate_imported_file("", "D.scss") == "D.scss"
    assert compiler.locate_imported_file("A", "S.sass") == "A/S.sass"
    assert compiler.locate_imported_file("A", "S") == "A/S.sass"

    with pytest.raises(StaticCompilationError):
        compiler.locate_imported_file("", "Z.scss")