def test_dmenu_configuration_options():
    """
    Test that configuration options are correctly translated into
    command options for dmenu.
    """
    _Extension.global_defaults = {}

    opts = [
        ({}, ["dmenu"]),
        ({"dmenu_command": "testdmenu --test-option"}, ["testdmenu", "--test-option"]),
        ({"dmenu_command": ["testdmenu", "--test-option"]}, ["testdmenu", "--test-option"]),
        ({}, ["-fn", "sans"]),
        ({"dmenu_font": "testfont"}, ["-fn", "testfont"]),
        ({"font": "testfont"}, ["-fn", "testfont"]),
        ({"font": "testfont", "fontsize": 12}, ["-fn", "testfont-12"]),
        ({"dmenu_bottom": True}, ["-b"]),
        ({"dmenu_ignorecase": True}, ["-i"]),
        ({"dmenu_lines": 5}, ["-l", "5"]),
        ({"dmenu_prompt": "testprompt"}, ["-p", "testprompt"]),
        ({"background": BLACK}, ["-nb", BLACK]),
        ({"foreground": BLACK}, ["-nf", BLACK]),
        ({"selected_background": BLACK}, ["-sb", BLACK]),
        ({"selected_foreground": BLACK}, ["-sf", BLACK]),
        ({"dmenu_height": 100}, ["-h", "100"]),
    ]

    # Loop over options, create an instance of Dmenu with the provided "config"
    # find the index of the first item in "output" and check any following items
    # match the expected output
    for config, output in opts:
        extension = Dmenu(**config)
        extension._configure(None)
        index = extension.configured_command.index(output[0])
        assert output == extension.configured_command[index : index + len(output)]

    Test that configuration options are correctly translated into
    command options for dmenu.
    
test/extension/test_dmenu.py