예제 #1
0
    def test_get_css_rules_from_svg_document04(self):
        # 'style' element
        # See also: svg/style8.css
        parser = SVGParser()
        root = parser.create_element('svg')
        style = root.create_sub_element('style')
        style.text = '@import url(http://localhost:8000/svg/style8.css);'

        style_sheets = get_css_style_sheets_from_svg_document(root)
        self.assertEqual(1, len(style_sheets))

        css_style_sheet = style_sheets[0]
        self.assertIsNone(css_style_sheet.owner_rule)
        self.assertEqual('text/css', css_style_sheet.type)
        self.assertIsNone(css_style_sheet.href)
        self.assertEqual(style, css_style_sheet.owner_node)
        self.assertIsNone(css_style_sheet.parent_style_sheet)
        self.assertIsNone(css_style_sheet.title)
        self.assertEqual('all', css_style_sheet.media.media_text)

        css_rules = css_style_sheet.css_rules
        self.assertEqual(1, len(css_rules))

        css_rule = css_rules[0]
        self.assertEqual(CSSRule.IMPORT_RULE, css_rule.type)
        css_stylesheet = css_rule.style_sheet
        self.assertEqual(15,
                         len(css_stylesheet.css_rules),
                         msg='http server may not be working.')
예제 #2
0
    def test_get_css_rules_from_svg_document05(self):
        svg = '''
        <svg xmlns="http://www.w3.org/2000/svg">
          <style>
            @import url(svg/style8.css);
          </style>
        </svg>
        '''
        doc = window.document
        doc.write(svg)
        root = doc.document_element

        style_sheets = get_css_style_sheets_from_svg_document(root)
        self.assertEqual(1, len(style_sheets))

        css_rules = style_sheets[0].css_rules
        self.assertEqual(1, len(css_rules))

        css_rule = css_rules[0]
        self.assertEqual(CSSRule.IMPORT_RULE, css_rule.type)
        self.assertEqual(style_sheets[0], css_rule.parent_style_sheet)
        self.assertIsNone(css_rule.parent_rule)
        self.assertEqual(0, css_rule.media.length)

        style = doc.get_elements_by_tag_name('style')[0]
        self.assertEqual(style, style_sheets[0].owner_node)
예제 #3
0
    def test_get_css_rules_from_svg_document03(self):
        # 'link' element
        # See also: svg/style8.css
        parser = SVGParser()
        root = parser.create_element('svg')
        link = root.create_sub_element('link')
        link.attributes.update({
            'rel': 'stylesheet',
            'href': 'http://localhost:8000/svg/style8.css',
            'type': 'text/css',
        })

        style_sheets = get_css_style_sheets_from_svg_document(root)
        self.assertEqual(1, len(style_sheets))

        css_style_sheet = style_sheets[0]
        self.assertIsNone(css_style_sheet.owner_rule)
        self.assertEqual('text/css', css_style_sheet.type)
        self.assertEqual('http://localhost:8000/svg/style8.css',
                         css_style_sheet.href)
        self.assertEqual(link, css_style_sheet.owner_node)
        self.assertIsNone(css_style_sheet.parent_style_sheet)
        self.assertIsNone(css_style_sheet.title)
        self.assertEqual(0, css_style_sheet.media.length)

        css_rules = css_style_sheet.css_rules
        self.assertEqual(15,
                         len(css_rules),
                         msg='http server may not be working.')
예제 #4
0
    def test_get_css_rules_from_svg_document06(self):
        # <link> element
        # <link rel="stylesheet" type="text/css" href="ny1.css"/>
        # See also: svg/ny1u.svg and svg/ny1.css
        doc = window.document
        doc.location = 'http://localhost:8000/svg/ny1u.svg'
        root = doc.document_element
        style_sheets = get_css_style_sheets_from_svg_document(root)
        self.assertEqual(1, len(style_sheets))

        css_style_sheet = style_sheets[0]
        self.assertEqual(7, len(css_style_sheet.css_rules))

        for css_rule in css_style_sheet.css_rules:
            self.assertEqual(css_style_sheet, css_rule.parent_style_sheet)
예제 #5
0
    def test_get_css_rules_from_svg_document01(self):
        # 'link' and 'style' elements
        svg = '''
        <svg width="5cm" height="4cm" viewBox="0 0 500 400"
             xmlns="http://www.w3.org/2000/svg">
          <link rel="stylesheet" href="svg/style8.css"/>
          <style type="text/css"><![CDATA[
            .Border { fill:none; stroke:blue; stroke-width:1 }
            .Connect { fill:none; stroke:#888888; stroke-width:2 }
            .SamplePath { fill:none; stroke:red; stroke-width:5 }
            .EndPoint { fill:none; stroke:#888888; stroke-width:2 }
            .CtlPoint { fill:#888888; stroke:none }
            .AutoCtlPoint { fill:none; stroke:blue; stroke-width:4 }
            .Label { font-size:22; font-family:Verdana }
          ]]></style>
          <style>
            @media print { /* rule (1) */
              /* hide navigation controls when printing */
              #navigation { display: none }
              @media (max-width: 12cm) { /* rule (2) */
                /* keep notes in flow when printing to narrow pages */
                .note { float: none }
              }
            }
            @media screen and (min-width: 35em),
                   print and (min-width: 40em) {
              #section_navigation { float: left; width: 10em; }
            }
          </style>
          <rect class="Border" x="1" y="1" width="498" height="398" id="rect01" />
          <polyline class="Connect" points="100,200 100,100" id="polyline01" />
          <path class="SamplePath" d="M100,200 C100,100 250,100 250,200
                                               S400,300 400,200" id="path01" />
          <circle class="EndPoint" cx="100" cy="200" r="10" id="circle01" />
          <text class="Label" x="25" y="70" id="text01">
            M100,200 C100,100 250,100 250,200</text>
        </svg>
        '''
        parser = SVGParser()
        tree = parser.parse(StringIO(svg))
        root = tree.getroot()

        style_sheets = get_css_style_sheets_from_svg_document(root)
        self.assertEqual(3, len(style_sheets))

        # <link rel="stylesheet" href="svg/style8.css"/>
        css_style_sheet = style_sheets[0]
        self.assertEqual(15, len(css_style_sheet.css_rules))

        css_rule = css_style_sheet.css_rules[0]
        self.assertEqual(CSSRule.STYLE_RULE, css_rule.type)
        self.assertEqual('svg', css_rule.selector_text)

        css_rule = css_style_sheet.css_rules[14]
        self.assertEqual(CSSRule.STYLE_RULE, css_rule.type)
        self.assertEqual('#inner-petals .segment:hover > .segment-edge',
                         css_rule.selector_text)

        # <style type="text/css">...
        css_style_sheet = style_sheets[1]
        self.assertEqual(7, len(css_style_sheet.css_rules))

        css_rule = css_style_sheet.css_rules[0]
        self.assertEqual(CSSRule.STYLE_RULE, css_rule.type)
        self.assertEqual('.Border', css_rule.selector_text)

        css_rule = css_style_sheet.css_rules[6]
        self.assertEqual(CSSRule.STYLE_RULE, css_rule.type)
        self.assertEqual('.Label', css_rule.selector_text)

        # <style> @media at-rule
        css_style_sheet = style_sheets[2]
        self.assertEqual(2, len(css_style_sheet.css_rules))

        # @media 'print'
        css_rule = css_style_sheet.css_rules[0]
        self.assertEqual(CSSRule.MEDIA_RULE, css_rule.type)
        self.assertEqual('print', css_rule.media.media_text)

        # child rules
        self.assertEqual(2, len(css_rule.css_rules))

        # (1) style rule
        child_css_rule = css_rule.css_rules[0]
        self.assertEqual(CSSRule.STYLE_RULE, child_css_rule.type)
        self.assertEqual('#navigation', child_css_rule.selector_text)

        # (2) @media at-rule
        child_css_rule = css_rule.css_rules[1]
        self.assertEqual(CSSRule.MEDIA_RULE, child_css_rule.type)
        self.assertEqual('(max-width: 12cm)', child_css_rule.media.media_text)

        css_rule = css_style_sheet.css_rules[1]
        self.assertEqual(CSSRule.MEDIA_RULE, css_rule.type)
        self.assertEqual(
            'screen and (min-width: 35em), print and (min-width: 40em)',
            css_rule.media.media_text)