'Verifies the selection of select list identified by `locator` is exactly `*items`.
If you want to test that no option is selected, simply give no `items`.
Select list keywords work on both lists and combo boxes. Key attributes for
select lists are `id` and `name`. See `introduction` for details about
locating elements.'

@keyword
def list_selection_should_be(self, locator, *items):

    items_str = ((items and ('option(s)    [    %s    ]' % '    |    '.join(items))) or 'no    options')
    self.info(("Verifying    list    '%s'    has    %s    selected." % (locator, items_str)))
    items = list(items)
    self.page_should_contain_list(locator)
    (select, options) = self._get_select_list_options_selected(locator)
    if ((not items) and (len(options) == 0)):
        return
    selected_values = self._get_values_for_options(options)
    selected_labels = self._get_labels_for_options(options)
    err = ("List    '%s'    should    have    had    selection    [    %s    ]    but    it    was    [    %s    ]" % (locator, '    |    '.join(items), '    |    '.join(selected_labels)))
    for item in items:
        if (item not in (selected_values + selected_labels)):
            raise AssertionError(err)
    for (selected_value, selected_label) in zip(selected_values, selected_labels):
        if ((selected_value not in items) and (selected_label not in items)):
            raise AssertionError(err)
