def test_inner_combine(): ext1 = combine({"foo": 1}, {"foo": 11}) css = { "%ext2": combine({"bar": 2}, {"bar": 22}), "qux": extend(ext1, "ext2", css=combine({"baz": 3}, {"baz": 33})), "zzz": extend(ext1, "ext2", css=combine({"zzz": 4}, {"zzz": 44})) } assert render_css(css) == """\
def test_combine(): assert vars.combine == "combine" css = vars.combine() assert isinstance(css, dict) assert css == {} css1 = {"a": "b"} css = vars.combine(css1) assert isinstance(css, dict) assert css == {"a": "b"} css1 = {"a": "b"} css2 = {"aa": "bb"} css3 = {"aaa": "bbb"} css = vars.combine(css1, css2, css3) assert isinstance(css, dict) assert css == {"a": "b", "aa": "bb", "aaa": "bbb"} css2 = {"a": "bb"} css = vars.combine(css1, css2, css3) assert isinstance(css, vars.Combine) assert css.dicts == [ { "a": "b" }, { "a": "bb" }, { "aaa": "bbb" }, ] css4 = {"a": "bbbb"} css = vars.combine(css, css4) assert isinstance(css, vars.Combine) assert css.dicts == [ { "a": "b" }, { "a": "bb" }, { "aaa": "bbb" }, { "a": "bbbb" }, ]
def test_combine(): css = combine({".foo": { "a": { "color": "blue" } }}, { ".bar": { "color": "white" }, ".foo": { "color": "red", "a": combine({"color": "yellow"}, { "text-decoration": "underline", "color": "pink", }) }, }) assert (render_css(css, mode=Modes.NORMAL) == """\ .foo a { color: blue; } .bar { color: white; } .foo { color: red; } .foo a { color: yellow; text-decoration: underline; color: pink; } """)
def test_with_combine(): lib = { '%my-extend': { "margin": "1px" }, } css = { ".foo": { "margin": "2px" }, ".bar": extend('my-extend'), ".baz": { "a": { "margin": "3px" }, "b": extend('my-extend', css={"margin": "4px"}), } } assert render_css(combine(lib, css)) == """\
def render_accumulated_collected_to_string(self, acc: List) -> str: """Render the accumulated CSS parts to a string. All the parts are aggregated in a ``Combine``, that will convert strings to ``Raw``. This allow any parts to use "extends" defined previously. For the parameters, see ``Collector.render_accumulated_collected_to_string``. Returns ------- str The final CSS to display. """ final_list: List = [] for item in acc: if isinstance(item, Combine) or not callable(item): final_list.append(item) continue self.render_one_collected(item(), final_list) return get_default_mode().value["endline"] + render_css( combine(*final_list))