def METHOD_NAME(self):
    message = testcase["message"]
    range_enabled = testcase.get("range_enabled")
    time_detector = TimeDetector(entity_name='time', language=language, timezone=timezone)
    time_dicts, spans = time_detector.detect_entity(text=message, range_enabled=range_enabled, **kwargs)
    for time_dict in time_dicts:
        # TODO: This is not correct! actual output should not modified instead expected output should be
        if "range" not in time_dict:
            time_dict.update({"range": None})
        if "time_type" not in time_dict:
            time_dict.update({"time_type": None})
    expected_time_dicts, expected_spans = parse_expected_outputs(testcase["outputs"])
    expected_outputs = list(six.moves.zip(expected_time_dicts, expected_spans))
    prefix = failure_string_prefix.format(message=message, language=language)
    self.assertEqual(len(time_dicts), len(spans),
                     prefix + u"Returned times and original_texts have different lengths")
    self.assertEqual(len(spans), len(expected_outputs),
                     prefix + u"Returned times and expected_outputs have different lengths")
    for output in six.moves.zip(time_dicts, spans):
        self.assertIn(output, expected_outputs,
                      prefix + u"{got} not in {expected_outputs}".format(got=output,
                                                                         expected_outputs=expected_outputs))