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.')
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)
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.')
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)
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)