def test_script_element(self): source = Element('script', {'src': '#'}) elements = list(links(source)) self.assertEqual(len(elements), 1) el, attr, url, pos = elements.pop() self.assertEqual(url, '#') self.assertEqual(pos, 0) self.assertEqual(attr, 'src') self.assertEqual(el.tag, 'script') self.assertEqual(el.attrib, {'src': '#'})
def test_inline_css_url(self): source = Element('div', {'style': 'background: url("#");'}) elements = list(links(source)) self.assertEqual(len(elements), 1) el, attr, url, pos = elements.pop() self.assertEqual(url, '#') self.assertEqual(pos, 17) self.assertEqual(attr, 'style') self.assertEqual(el.tag, 'div') self.assertEqual(el.attrib, {'style': 'background: url("#");'})
def test_meta_refresh_element(self): source = Element('meta', {'http-equiv': 'refresh', 'content': '#'}) elements = list(links(source)) self.assertEqual(len(elements), 1) el, attr, url, pos = elements.pop() self.assertEqual(url, '#') self.assertEqual(pos, 0) self.assertEqual(attr, 'content') self.assertEqual(el.tag, 'meta') self.assertEqual(el.attrib, {'http-equiv': 'refresh', 'content': '#'})
def test_form_element(self): source = Element('form', {'action': '#'}) elements = list(links(source)) self.assertEqual(len(elements), 1) el, attr, url, pos = elements.pop() self.assertEqual(url, '#') self.assertEqual(pos, 0) self.assertEqual(attr, 'action') self.assertEqual(el.tag, 'form') self.assertEqual(el.attrib, {'action': '#'})
def test_link_element(self): source = Element('link', {'href': '#'}) elements = list(links(source)) self.assertEqual(len(elements), 1) el, attr, url, pos = elements.pop() self.assertEqual(url, '#') self.assertEqual(pos, 0) self.assertEqual(attr, 'href') self.assertEqual(el.tag, 'link') self.assertEqual(el.attrib, {'href': '#'})
def test_html_style_tag_css_import(self): source = Element('style') source.text = '@import url(#);' elements = list(links(source)) self.assertEqual(len(elements), 1) el, attr, url, pos = elements.pop() self.assertEqual(url, '#') self.assertEqual(pos, 12) self.assertEqual(attr, None) self.assertEqual(el.tag, 'style') self.assertEqual(el.attrib, {})
def test_html_style_tag_css_url_with_altering_colons(self): source = Element('style') source.text = 'html {background: url("#\');}' elements = list(links(source)) self.assertEqual(len(elements), 1) el, attr, url, pos = elements.pop() self.assertEqual(url, '#') self.assertEqual(pos, 23) self.assertEqual(attr, None) self.assertEqual(el.tag, 'style') self.assertEqual(el.attrib, {})
def test_script_element_with_url_in_the_text(self): source = Element('script') source.text = 'var background = "url(\'image.jpg\')"' elements = list(links(source)) self.assertEqual(len(elements), 1) el, attr, url, pos = elements.pop() self.assertEqual(url, 'image.jpg') self.assertEqual(pos, 23) self.assertEqual(attr, None) self.assertEqual(el.tag, 'script') self.assertEqual(el.attrib, {})
def test_img_src_set_attribute_bad_formatted(self): source = Element('img', {'src-set': 'img1 1x; img2 2x,'}) elements = list(links(source)) self.assertEqual(len(elements), 2) el, attr, url, pos = elements.pop() self.assertEqual(url, 'img1') self.assertEqual(pos, 0) self.assertEqual(attr, 'src-set') self.assertEqual(el.tag, 'img') self.assertEqual(el.attrib, {'src-set': 'img1 1x; img2 2x,'}) el, attr, url, pos = elements.pop() self.assertEqual(url, 'img2') self.assertEqual(pos, 9) self.assertEqual(attr, 'src-set') self.assertEqual(el.tag, 'img') self.assertEqual(el.attrib, {'src-set': 'img1 1x; img2 2x,'})
def test_html_style_tag_font_face(self): source = Element('style') source.text = """ @font-face { font-family:'fontawesome'; src:url('../lib/fonts/fontawesome.eot?14663396#iefix') format('embedded-opentype'), url('../lib/fonts/fontawesome.woff?14663396') format('woff'), url('../lib/fonts/fontawesome.ttf?14663396') format('truetype'), url('../lib/fonts/fontawesome.svg?14663396#fontawesome') format('svg'); font-style:normal; } """ elements = list(links(source)) self.assertEqual(len(elements), 4) el, attr, url, pos = elements.pop() self.assertEqual(url, '../lib/fonts/fontawesome.eot?14663396#iefix') self.assertEqual(pos, 74) self.assertEqual(attr, None) self.assertEqual(el.tag, 'style') self.assertEqual(el.attrib, {}) el, attr, url, pos = elements.pop() self.assertEqual(url, '../lib/fonts/fontawesome.woff?14663396') self.assertEqual(pos, 162) self.assertEqual(attr, None) self.assertEqual(el.tag, 'style') self.assertEqual(el.attrib, {}) el, attr, url, pos = elements.pop() self.assertEqual(url, '../lib/fonts/fontawesome.ttf?14663396') self.assertEqual(pos, 232) self.assertEqual(attr, None) self.assertEqual(el.tag, 'style') self.assertEqual(el.attrib, {}) el, attr, url, pos = elements.pop() self.assertEqual(url, '../lib/fonts/fontawesome.svg?14663396#fontawesome') self.assertEqual(pos, 305) self.assertEqual(attr, None) self.assertEqual(el.tag, 'style') self.assertEqual(el.attrib, {})
def test_html_style_tag_css_import_without_url(self): source = Element('style') source.text = '@import fonts;' elements = list(links(source)) self.assertEqual(len(elements), 0)
def test_meta_refresh_element_without_content_url(self): source = Element('meta', {'http-equiv': 'refresh'}) elements = list(links(source)) self.assertEqual(len(elements), 0)
def test_form_element_without_action_url(self): source = Element('form') elements = list(links(source)) self.assertEqual(len(elements), 0)
def test_script_element_without_url(self): source = Element('script') source.text = 'console.log(hello);' elements = list(links(source)) self.assertEqual(len(elements), 0)
def test_link_element_without_url(self): source = Element('link') elements = list(links(source)) self.assertEqual(len(elements), 0)
def test_raise_error_on_invalid_argument(self): with self.assertRaises(AttributeError): list(links(''))