def __unicode__(self): messages = [] total_stories = float(self.successful_stories + self.failed_stories) total_scenarios = float(self.successful_scenarios + self.failed_scenarios) percentage_successful_stories = (self.successful_stories / (total_stories or 1)) percentage_failed_stories = (self.failed_stories / (total_stories or 1)) percentage_successful_scenarios = (self.successful_scenarios / (total_scenarios or 1)) percentage_failed_scenarios = (self.failed_scenarios / (total_scenarios or 1)) messages.append("=" * 80) messages.append(self.language["test_run_summary"]) messages.append("=" * 80) messages.append("${GREEN}"+self.language["stories_ran_successfully"] % (self.successful_stories, percentage_successful_stories * 100)) messages.append("${RED}"+self.language["stories_that_failed"] % (self.failed_stories, percentage_failed_stories * 100)) messages.append("${GREEN}"+self.language["scenarios_ran_successfully"] % (self.successful_scenarios, percentage_successful_scenarios * 100)) messages.append("${RED}"+self.language["scenarios_that_failed"] % (self.failed_scenarios, percentage_failed_scenarios * 100)) messages.append("${NORMAL}") messages.append(self.language["test_run_status"] % (self.failed_stories > 0 and "FAILED" or "SUCCESSFUL")) period = (self.end_time - self.start_time) if period == 0: threshold = 0 else: threshold = total_scenarios / period messages.append(self.language["test_run_timing"] % (total_scenarios, period)) messages.append(self.language["test_run_threshold"] % threshold) if (self.failed_stories > 0): messages.append("") messages.append("=" * 80) messages.append(self.language["test_run_failures"]) messages.append("=" * 80) for story in [story for story in self.stories if story.status == "FAILED"]: messages.append("%s %s %s %s %s %s" % (self.language["as_a"], force_unicode(story.as_a), self.language["i_want_to"], force_unicode(story.i_want_to), self.language["so_that"], force_unicode(story.so_that))) messages.append("-" * 80) for scenario in [scenario for scenario in story.scenarios if scenario.status == "FAILED"]: messages.append(u"%s %s - %s" % (self.language["scenario"], force_unicode(scenario.index), force_unicode(scenario.title))) messages.append("-" * 80) messages.append("%s: " % self.language["given"]) self.render_actions(messages, scenario.givens) messages.append("%s: " % self.language["when"]) self.render_actions(messages, scenario.whens) messages.append("%s: " % self.language["then"]) self.render_actions(messages, scenario.thens) messages.append("-" * 80) return self.term.render(u"\n".join(messages))
def render_actions(self, messages, action_collection): for action in action_collection: self.color = status_by_color(action.status) messages.append(u" ${%s}%s - %s${NORMAL}" % (self.color, force_unicode(action.description), force_unicode(action.status))) if (action.status == "FAILED"): if (action.error): messages[-1] += (u" - %s" % action.error)
def load(self, culture): self.__clear() file_name = "language_" + culture + ".txt" file_path = os.path.join(self.languages_dir, file_name) if not os.path.exists(file_path): raise LanguageParseError(culture, file_path) try: content = unicode(open(file_path).read(), encoding='utf-8') lines = [line.strip() for line in content.split("\n") if len(line)] except ValueError: raise LanguageParseError(culture, file_path) for line in [line for line in lines if not line.startswith("#")]: key, value = line.split("=") key = key.strip() value = force_unicode(value.strip()) if "<element selector>" in value: value = value.replace("<element selector>", self.language_items["supported_elements"]) if key.endswith("_regex"): value = re.compile(value, re.U) self.language_items[key.strip()] = value
def __msg_pre_story(self, context, story): messages = [] messages.append(u"=" * 80) messages.append(u"%s" % context.language["story"]) messages.append(u"\n %s %s\n %s %s\n %s %s\n" % (context.language["as_a"], force_unicode(story.as_a), context.language["i_want_to"], force_unicode(story.i_want_to), context.language["so_that"], force_unicode(story.so_that))) print self.term.render(u"\n".join(messages))
def __msg_pre_scenario(self, context, scenario): messages = [] messages.append(u"-" * 80) messages.append(u"%s %s - %s" % (context.language["scenario"], force_unicode(scenario.index), force_unicode(scenario.title))) messages.append(u"-" * 80) messages.append(u"") print self.term.render(u"\n".join(messages))
def render_actions(self, messages, action_collection): for action in action_collection: messages.append(u" %s - %s" % (force_unicode(action.description), force_unicode(action.status))) if (action.status == "FAILED"): if (action.error): messages[-1] += (u" - %s" % action.error)
def __getitem__(self, key): item = self.language_items.get(key, None) if item is None: raise LookupError(self.language_items.get("language_lookup_error", None) % key) if not isinstance(item, re._pattern_type): item = force_unicode(item.replace("\\n", "\n")) return item
def render_actions(self, messages, action_collection): for action in action_collection: self.color = status_by_color(action.status) messages.append(u" ${%s}%s - %s${NORMAL}" % (self.color, force_unicode(action.description), force_unicode(action.status)))
def __msg_post_story(self, context, story): messages = [] messages.append(u"-" * 80) self.color = status_by_color(story.status) messages.append(u"${%s}%s: %s${NORMAL}" % (self.color, context.language["story_status"], force_unicode(story.status))) messages.append(u"-" * 80) messages.append(u"") print self.term.render(u"\n".join(messages))