def test_handlers(self): "css_parser.log" s = self._setHandler() css_parser.log.setLevel(logging.FATAL) self.assertEqual(css_parser.log.getEffectiveLevel(), logging.FATAL) css_parser.parseString('a { color: 1 }') self.assertEqual(s.getvalue(), '') css_parser.log.setLevel(logging.DEBUG) css_parser.parseString('a { color: 1 }') self.assertEqual( s.getvalue(), 'ERROR Property: Invalid value for "CSS Level 2.1" property: 1 [1:5: color]\n' ) s = self._setHandler() css_parser.log.setLevel(logging.WARNING) css_parser.parseUrl('http://example.com') q = s.getvalue()[:38] if q.startswith('WARNING URLError'): pass else: self.assertEqual(q, 'ERROR Expected "text/css" mime type')
def test_parseUrl(self): "css_parser.parseUrl()" href = basetest.get_sheet_filename('import.css') # href = u'file:' + urllib.pathname2url(href) href = css_parser.helper.path2url(href) # href = 'http://seewhatever.de/sheets/import.css' s = css_parser.parseUrl(href, media='tv, print', title='from url') self.assertIsInstance(s, css_parser.css.CSSStyleSheet) self.assertEqual(href, s.href) self.assertEqual(self.exp.encode(), s.cssText) self.assertEqual('utf-8', s.encoding) self.assertEqual('tv, print', s.media.mediaText) self.assertEqual('from url', s.title) sr = s.cssRules[1] img = sr.style.getProperty('background-image').propertyValue[0].value self.assertEqual(img, 'images/example.gif') ir = s.cssRules[0] self.assertEqual('import/import2.css', ir.href) irs = ir.styleSheet self.assertEqual( irs.cssText, '@import "../import3.css";\n@import "import-impossible.css" print;\n.import2 {\n /* sheets/import2.css */\n background: url(http://example.com/images/example.gif);\n background: url(//example.com/images/example.gif);\n background: url(/images/example.gif);\n background: url(images2/example.gif);\n background: url(./images2/example.gif);\n background: url(../images/example.gif);\n background: url(./../images/example.gif)\n }' # noqa .encode()) ir2 = irs.cssRules[0] self.assertEqual('../import3.css', ir2.href) irs2 = ir2.styleSheet self.assertEqual( irs2.cssText, '/* import3 */\n.import3 {\n /* from ./import/../import3.css */\n background: url(images/example3.gif);\n background: url(./images/example3.gif);\n background: url(import/images2/example2.gif);\n background: url(./import/images2/example2.gif);\n background: url(import/images2/../../images/example3.gif)\n }' # noqa .encode())
def get_css(self): """获取css 并转换为mapping""" # 下载css sheet = css_parser.parseUrl(self.cssulr, validate=False, media=False) for rule in sheet.cssRules: if hasattr(rule, "selectorList"): for selector in rule.selectorList: if self.reg.search(selector.selectorText): sel = selector.selectorText.split('.')[1] self.mapping[sel] = self.get_box( rule.style["background-position"])