'Verify that specified tests exists in suite.
\'names\' contains test names to check. These tests are expected to
pass/fail as their documentation says. Is same name is given multiple
times, test ought to be executed multiple times too.
\'names_and_statuses\' contains test names with associated custom status
in format `STATUS:Message`. Test is given both in \'names\' and in
\'names_and_statuses\', only the latter has an effect.'

def should_contain_tests(self, suite, *names, **names_and_statuses):

    tests = self.get_tests_from_suite(suite)
    expected = [(n, None) for n in names if (n not in names_and_statuses)]
    expected.extend(((n, s) for (n, s) in names_and_statuses.items()))
    tests_msg = ('\nExpected    tests    :    %s\nActual    tests            :    %s' % (',    '.join(sorted([e[0] for e in expected], key=(lambda s: s.lower()))), ',    '.join(sorted([t.name for t in tests], key=(lambda s: s.lower())))))
    if (len(tests) != len(expected)):
        raise AssertionError(('Wrong    number    of    tests.' + tests_msg))
    for test in tests:
        print ("Verifying    test    '%s'" % test.name)
        try:
            status = self._find_expected_status(test.name, expected)
        except IndexError:
            raise AssertionError(("Test    '%s'    was    not    expected    to    be    run.%s" % (test.name, tests_msg)))
        expected.pop(expected.index((test.name, status)))
        if (status and (':' in status)):
            (status, message) = status.split(':', 1)
        else:
            message = None
        self._check_test_status(test, status, message)
    assert (not expected)
