from typing import Any, List, Tuple, Optional, Union, Dict

from sublime_music.ui import actions

def test_variant_type_from_python():
    assert actions.variant_type_from_python(bool) == 'b'
    assert actions.variant_type_from_python(int) == 'x'
    assert actions.variant_type_from_python(float) == 'd'
    assert actions.variant_type_from_python(str) == 's'
    assert actions.variant_type_from_python(Any) == 'v'
    assert actions.variant_type_from_python(List[int]) == 'ax'
    assert actions.variant_type_from_python(Tuple[str, int, bool]) == '(sxb)'
    assert actions.variant_type_from_python(Optional[str]) == 'ms'
    assert actions.variant_type_from_python(Union[str, int]) == '[sx]'
    assert actions.variant_type_from_python(Dict[str, int]) == 'a{sx}'

    assert (actions.variant_type_from_python(
        Tuple[Dict[Optional[str], List[bool]], List[List[Any]]])
        == '(a{msab}aav)')
