Example #1
0
def test_store_prefixed_properties(parser):
    """
    Ensure that when the same rule has both prefixed and unprefixed versions of
    the same property, the CSS is stored correctly
    """
    css = (u"html body{\n"
           u"box-shadow: 10px 10px 5px #888;\n}"
           u"a:visited a:hover{\n"
           u"-moz-box-shadow: 10px 10px 5px #000;\n}")

    linkedcss = LinkedCSSFactory.create(raw_css=css_file(css))
    parser.parse(linkedcss)

    # Check to see that we saved the prefixed property -moz-box-shadow
    prefixed_property = models.CSSProperty.objects.filter(prefix="-moz-",
                                                          name="box-shadow",
                                                          value="10px 10px 5px #000")
    assert prefixed_property.count() == 1

    # Check to see that we saved the unprefixed property box-shadow
    unprefixed_property = models.CSSProperty.objects.filter(prefix="",
                                                            name="box-shadow",
                                                            value="10px 10px 5px #888")
    assert unprefixed_property.count() == 1

    # Make sure that the two properties are not the same object
    assert prefixed_property != unprefixed_property
Example #2
0
def test_store_prefixed_properties(parser):
    """
    Ensure that when the same rule has both prefixed and unprefixed versions of
    the same property, the CSS is stored correctly
    """
    css = (u"html body{\n"
           u"box-shadow: 10px 10px 5px #888;\n}"
           u"a:visited a:hover{\n"
           u"-moz-box-shadow: 10px 10px 5px #000;\n}")

    linkedcss = LinkedCSSFactory.create(raw_css=css_file(css))
    parser.parse(linkedcss)

    # Check to see that we saved the prefixed property -moz-box-shadow
    prefixed_property = models.CSSProperty.objects.filter(
        prefix="-moz-", name="box-shadow", value="10px 10px 5px #000")
    assert prefixed_property.count() == 1

    # Check to see that we saved the unprefixed property box-shadow
    unprefixed_property = models.CSSProperty.objects.filter(
        prefix="", name="box-shadow", value="10px 10px 5px #888")
    assert unprefixed_property.count() == 1

    # Make sure that the two properties are not the same object
    assert prefixed_property != unprefixed_property
Example #3
0
def test_unknown_property(parser):
    """ Make sure that unknown properties get saved """
    linkedcss = LinkedCSSFactory.create(raw_css=css_file(RAW_CSS))
    parser.parse(linkedcss)

    find_property = models.CSSProperty.objects.filter(prefix="-webkit-",
                                                      name="something",
                                                      value="something else")
    assert find_property.count() == 1
Example #4
0
def test_unknown_property(parser):
    """ Make sure that unknown properties get saved """
    linkedcss = LinkedCSSFactory.create(raw_css=css_file(RAW_CSS))
    parser.parse(linkedcss)

    find_property = models.CSSProperty.objects.filter(prefix="-webkit-",
                                                      name="something",
                                                      value="something else")
    assert find_property.count() == 1
Example #5
0
def test_arbitrary_prefix(parser):
    """ Make sure that unknown prefixes get saved """
    test_css = (u"body{\n" u"-testing-testprop: testval\n}")

    linkedcss = LinkedCSSFactory.create(raw_css=css_file(test_css))
    parser.parse(linkedcss)

    find_property = models.CSSProperty.objects.filter(prefix="-testing-",
                                                      name="testprop",
                                                      value="testval")
    assert find_property.count() == 1
Example #6
0
def test_arbitrary_prefix(parser):
    """ Make sure that unknown prefixes get saved """
    test_css = (u"body{\n"
                u"-testing-testprop: testval\n}")

    linkedcss = LinkedCSSFactory.create(raw_css=css_file(test_css))
    parser.parse(linkedcss)

    find_property = models.CSSProperty.objects.filter(prefix="-testing-",
                                                      name="testprop",
                                                      value="testval")
    assert find_property.count() == 1
Example #7
0
def test_parse(parser):
    """Make sure CSS rules are saved correctly"""
    linkedcss = LinkedCSSFactory.create(raw_css=css_file(RAW_CSS))
    parser.parse(linkedcss)

    # The rule for "html body" should be saved
    find_rule = models.CSSRule.objects.filter(linkedcss=linkedcss,
                                              selector="html body")
    assert find_rule.count() == 1

    # The property "margin" should have been saved with value "0 auto"
    find_property = models.CSSProperty.objects.filter(rule=find_rule,
                                                      prefix="",
                                                      name="margin",
                                                      value="0 auto")
    assert find_property.count() == 1
Example #8
0
def test_parse(parser):
    """Make sure CSS rules are saved correctly"""
    linkedcss = LinkedCSSFactory.create(raw_css=css_file(RAW_CSS))
    parser.parse(linkedcss)

    # The rule for "html body" should be saved
    find_rule = models.CSSRule.objects.filter(linkedcss=linkedcss,
                                              selector="html body")
    assert find_rule.count() == 1

    # The property "margin" should have been saved with value "0 auto"
    find_property = models.CSSProperty.objects.filter(rule=find_rule,
                                                      prefix="",
                                                      name="margin",
                                                      value="0 auto")
    assert find_property.count() == 1
Example #9
0
def test_comments_dont_break_parser(parser):
    """
    Ensure comments between properties and rules don't break our parsing of CSS
    """
    # Place comments between various elements to see that they're successfully
    # ignored by the parser
    commented_css = (u"html body{ /* comment inline */\n"
                     u"box-shadow: 10px 10px 5px #888;\n"
                     u"/* comment between properties */\n"
                     u"color: #000;\n}"
                     u"/* comment between rules */\n"
                     u"a:visited a:hover{\n"
                     u"-moz-box-shadow: 10px 10px 5px #000;"
                     "/* comment inline */\n}")

    linkedcss = LinkedCSSFactory.create(raw_css=css_file(commented_css))
    parser.parse(linkedcss)

    # Check to see that expected rules were saved
    rule1 = models.CSSRule.objects.filter(linkedcss=linkedcss,
                                          selector="html body")

    assert rule1.count() == 1

    rule2 = models.CSSRule.objects.filter(linkedcss=linkedcss,
                                          selector="a:visited a:hover")
    assert rule2.count() == 1

    # Check to see that expected properties were saved
    property1 = models.CSSProperty.objects.filter(rule=rule1,
                                                  prefix="",
                                                  name="box-shadow",
                                                  value="10px 10px 5px #888")
    assert property1.count() == 1

    property2 = models.CSSProperty.objects.filter(rule=rule2,
                                                  prefix="-moz-",
                                                  name="box-shadow",
                                                  value="10px 10px 5px #000")
    assert property2.count() == 1
Example #10
0
def test_comments_dont_break_parser(parser):
    """
    Ensure comments between properties and rules don't break our parsing of CSS
    """
    # Place comments between various elements to see that they're successfully
    # ignored by the parser
    commented_css = (u"html body{ /* comment inline */\n"
                     u"box-shadow: 10px 10px 5px #888;\n"
                     u"/* comment between properties */\n"
                     u"color: #000;\n}"
                     u"/* comment between rules */\n"
                     u"a:visited a:hover{\n"
                     u"-moz-box-shadow: 10px 10px 5px #000;"
                     "/* comment inline */\n}")

    linkedcss = LinkedCSSFactory.create(raw_css=css_file(commented_css))
    parser.parse(linkedcss)

    # Check to see that expected rules were saved
    rule1 = models.CSSRule.objects.filter(linkedcss=linkedcss,
                                          selector="html body")

    assert rule1.count() == 1

    rule2 = models.CSSRule.objects.filter(linkedcss=linkedcss,
                                          selector="a:visited a:hover")
    assert rule2.count() == 1

    # Check to see that expected properties were saved
    property1 = models.CSSProperty.objects.filter(rule=rule1,
                                                  prefix="",
                                                  name="box-shadow",
                                                  value="10px 10px 5px #888")
    assert property1.count() == 1

    property2 = models.CSSProperty.objects.filter(rule=rule2,
                                                  prefix="-moz-",
                                                  name="box-shadow",
                                                  value="10px 10px 5px #000")
    assert property2.count() == 1