%PDF- %PDF-
Direktori : /lib/calibre/calibre/srv/tests/ |
Current File : //lib/calibre/calibre/srv/tests/fast_css_transform.py |
#!/usr/bin/env python3 # License: GPL v3 Copyright: 2021, Kovid Goyal <kovid at kovidgoyal.net> import ast from calibre.srv.tests.base import SimpleTest from calibre_extensions.fast_css_transform import parse_css_number, transform_properties class TestTransform(SimpleTest): def test_number_parsing(self): for x in '.314 -.314 0.314 0 2 +2 -1 1e2 -3.14E+2 2e-2'.split(): self.ae(parse_css_number(x), ast.literal_eval(x)) self.ae(parse_css_number('2em'), 2) self.ae(parse_css_number('.3em'), 0.3) self.ae(parse_css_number('3x3'), 3) def test_basic_css_transforms(self): def d(src, expected, is_declaration=True, url_callback=None): self.ae(transform_properties(src, is_declaration=is_declaration, url_callback=url_callback), expected) def upper_case(val): return val.upper() def u(src, expected, is_declaration=True, url_callback=upper_case): return d(src, expected, url_callback=url_callback, is_declaration=is_declaration) def s(src, expected, url_callback=upper_case): return d(src, expected, url_callback=url_callback, is_declaration=False) s('.c { page-break-after: 1 always }', '.c { break-after: 1 always ; -webkit-column-break-after: 1 always }') s('.c { page-break-after: always\ncolor:red }', '.c { break-after: always; -webkit-column-break-after: always\ncolor:red }') s('.c { page-break-after: always\n}', '.c { break-after: always; -webkit-column-break-after: always\n}') s('.c { page-break-after: always;color:red }', '.c { break-after: always; -webkit-column-break-after: always;color:red }') s('.c { page-break-after: /**/always }', '.c { break-after: always ; -webkit-column-break-after: always }') s('.c { page-break-after: always !important }', '.c { break-after: always !important ; -webkit-column-break-after: always !important }') s('.c { page-break-after: always;}', '.c { break-after: always; -webkit-column-break-after: always;}') s('.c{x:url(y)}', '.c{x:url("Y")}') s('@im/* c */port "x.y";', '@import "X.Y";') s('@import url("narrow.css") supports(display: flex) handheld and (max-width: 400px);', '@import url("NARROW.CSS") supports(display: flex) handheld and (max-width: 400px);') s('@import url( x/*a*/.y);', '@import url("X.Y");') u('background: url( te st.gif ) 12; src: url(x)', 'background: url("TE ST.GIF") 12; src: url("X")') u('background: url(te/**/st.gif); xxx: url()', 'background: url("TEST.GIF"); xxx: url()') u(r'background: uRl(t\)e/st.gif)', 'background: url("T)E/ST.GIF")') u('a:url( "( )" /**/ )', 'a:url("( )")') u('a:url( "(/*)" )', 'a:url( "(/*)" )', url_callback=lambda x: x) d('font-size: 197583965730245.28px', 'font-size: 1.2349e+13rem') d('font-size: 19.28px', 'font-size: 1.205rem') d('font-size:+19.28px', 'font-size:1.205rem') d('font-size: .28in', 'font-size: 1.68rem') d('font-size: +.28in', 'font-size: 1.68rem') d(r'f\ont-s\69z\65 : 16\px', 'font-size: 1rem') d('font -size: 16px', 'font -size: 16px') d('font-/* */size: 1/*x*/6/**/p/**/x !important', 'font-size: 1rem !important') d('fOnt-size :16px', 'fOnt-size :1rem') d('fönt-size :16px', 'fönt-size :16px') d('font-size:2%', 'font-size:2%') d('font-size: 72pt; margin: /*here*/ 20px; font-size: 2in', 'font-size: 6rem; margin: /*here*/ 20px; font-size: 12rem') d(r'''font: "some 'name" 32px''', 'font: "some \'name" 2rem') d(r'''font: 'some "name' 32px''', 'font: \'some "name\' 2rem') d(r'''font: 'some \n ame' 32px''', 'font: "some n ame" 2rem') d('''font: 'some \\\nname' 32px''', 'font: "some name" 2rem') d('font: sans-serif 16px/3', 'font: sans-serif 1rem/3') d('font: sans-serif small/17', 'font: sans-serif 0.8rem/17') d('-epub-writing-mode: a; -web/* */kit-writing-mode: b; writing-mode: c', 'writing-mode: a; writing-mode: b; writing-mode: c') d('xxx:yyy', 'xxx:yyy') d('page-break-before: always', 'break-before: always; -webkit-column-break-before: always') sheet = ''' @import "b/loc.test"; @media screen { font: 16px calc(20vw - 30rem); .cls { color: red; font-size: 16px; background: url("b/loc.test") } #moo.cat { x: url("b/loc.test") } @zoo { not(.woo) and why { font: 16px "something something" 16; page-break-before: avoid } } } .why { font: 16px} ''' s(sheet, sheet.replace('16px', '1rem').replace('b/loc.test', 'B/LOC.TEST').replace('page-', 'break-before: avoid; -webkit-column-'))