123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
- from __future__ import annotations
- from prompt_toolkit.styles import Attrs, Style, SwapLightAndDarkStyleTransformation
- def test_style_from_dict():
- style = Style.from_dict(
- {
- "a": "#ff0000 bold underline strike italic",
- "b": "bg:#00ff00 blink reverse",
- }
- )
- # Lookup of class:a.
- expected = Attrs(
- color="ff0000",
- bgcolor="",
- bold=True,
- underline=True,
- strike=True,
- italic=True,
- blink=False,
- reverse=False,
- hidden=False,
- )
- assert style.get_attrs_for_style_str("class:a") == expected
- # Lookup of class:b.
- expected = Attrs(
- color="",
- bgcolor="00ff00",
- bold=False,
- underline=False,
- strike=False,
- italic=False,
- blink=True,
- reverse=True,
- hidden=False,
- )
- assert style.get_attrs_for_style_str("class:b") == expected
- # Test inline style.
- expected = Attrs(
- color="ff0000",
- bgcolor="",
- bold=False,
- underline=False,
- strike=False,
- italic=False,
- blink=False,
- reverse=False,
- hidden=False,
- )
- assert style.get_attrs_for_style_str("#ff0000") == expected
- # Combine class name and inline style (Whatever is defined later gets priority.)
- expected = Attrs(
- color="00ff00",
- bgcolor="",
- bold=True,
- underline=True,
- strike=True,
- italic=True,
- blink=False,
- reverse=False,
- hidden=False,
- )
- assert style.get_attrs_for_style_str("class:a #00ff00") == expected
- expected = Attrs(
- color="ff0000",
- bgcolor="",
- bold=True,
- underline=True,
- strike=True,
- italic=True,
- blink=False,
- reverse=False,
- hidden=False,
- )
- assert style.get_attrs_for_style_str("#00ff00 class:a") == expected
- def test_class_combinations_1():
- # In this case, our style has both class 'a' and 'b'.
- # Given that the style for 'a b' is defined at the end, that one is used.
- style = Style(
- [
- ("a", "#0000ff"),
- ("b", "#00ff00"),
- ("a b", "#ff0000"),
- ]
- )
- expected = Attrs(
- color="ff0000",
- bgcolor="",
- bold=False,
- underline=False,
- strike=False,
- italic=False,
- blink=False,
- reverse=False,
- hidden=False,
- )
- assert style.get_attrs_for_style_str("class:a class:b") == expected
- assert style.get_attrs_for_style_str("class:a,b") == expected
- assert style.get_attrs_for_style_str("class:a,b,c") == expected
- # Changing the order shouldn't matter.
- assert style.get_attrs_for_style_str("class:b class:a") == expected
- assert style.get_attrs_for_style_str("class:b,a") == expected
- def test_class_combinations_2():
- # In this case, our style has both class 'a' and 'b'.
- # The style that is defined the latest get priority.
- style = Style(
- [
- ("a b", "#ff0000"),
- ("b", "#00ff00"),
- ("a", "#0000ff"),
- ]
- )
- expected = Attrs(
- color="00ff00",
- bgcolor="",
- bold=False,
- underline=False,
- strike=False,
- italic=False,
- blink=False,
- reverse=False,
- hidden=False,
- )
- assert style.get_attrs_for_style_str("class:a class:b") == expected
- assert style.get_attrs_for_style_str("class:a,b") == expected
- assert style.get_attrs_for_style_str("class:a,b,c") == expected
- # Defining 'a' latest should give priority to 'a'.
- expected = Attrs(
- color="0000ff",
- bgcolor="",
- bold=False,
- underline=False,
- strike=False,
- italic=False,
- blink=False,
- reverse=False,
- hidden=False,
- )
- assert style.get_attrs_for_style_str("class:b class:a") == expected
- assert style.get_attrs_for_style_str("class:b,a") == expected
- def test_substyles():
- style = Style(
- [
- ("a.b", "#ff0000 bold"),
- ("a", "#0000ff"),
- ("b", "#00ff00"),
- ("b.c", "#0000ff italic"),
- ]
- )
- # Starting with a.*
- expected = Attrs(
- color="0000ff",
- bgcolor="",
- bold=False,
- underline=False,
- strike=False,
- italic=False,
- blink=False,
- reverse=False,
- hidden=False,
- )
- assert style.get_attrs_for_style_str("class:a") == expected
- expected = Attrs(
- color="ff0000",
- bgcolor="",
- bold=True,
- underline=False,
- strike=False,
- italic=False,
- blink=False,
- reverse=False,
- hidden=False,
- )
- assert style.get_attrs_for_style_str("class:a.b") == expected
- assert style.get_attrs_for_style_str("class:a.b.c") == expected
- # Starting with b.*
- expected = Attrs(
- color="00ff00",
- bgcolor="",
- bold=False,
- underline=False,
- strike=False,
- italic=False,
- blink=False,
- reverse=False,
- hidden=False,
- )
- assert style.get_attrs_for_style_str("class:b") == expected
- assert style.get_attrs_for_style_str("class:b.a") == expected
- expected = Attrs(
- color="0000ff",
- bgcolor="",
- bold=False,
- underline=False,
- strike=False,
- italic=True,
- blink=False,
- reverse=False,
- hidden=False,
- )
- assert style.get_attrs_for_style_str("class:b.c") == expected
- assert style.get_attrs_for_style_str("class:b.c.d") == expected
- def test_swap_light_and_dark_style_transformation():
- transformation = SwapLightAndDarkStyleTransformation()
- # Test with 6 digit hex colors.
- before = Attrs(
- color="440000",
- bgcolor="888844",
- bold=True,
- underline=True,
- strike=True,
- italic=True,
- blink=False,
- reverse=False,
- hidden=False,
- )
- after = Attrs(
- color="ffbbbb",
- bgcolor="bbbb76",
- bold=True,
- underline=True,
- strike=True,
- italic=True,
- blink=False,
- reverse=False,
- hidden=False,
- )
- assert transformation.transform_attrs(before) == after
- # Test with ANSI colors.
- before = Attrs(
- color="ansired",
- bgcolor="ansiblack",
- bold=True,
- underline=True,
- strike=True,
- italic=True,
- blink=False,
- reverse=False,
- hidden=False,
- )
- after = Attrs(
- color="ansibrightred",
- bgcolor="ansiwhite",
- bold=True,
- underline=True,
- strike=True,
- italic=True,
- blink=False,
- reverse=False,
- hidden=False,
- )
- assert transformation.transform_attrs(before) == after
|