def from_string(new_scenario, string, with_file=None, original_string=None, language=None): """ Creates a new scenario from string""" # ignoring comments string = "\n".join(strings.get_stripped_lines(string, ignore_lines_starting_with='#')) if not language: language = Language() splitted = strings.split_wisely(string, u"(%s):" % language.examples, True) string = splitted[0] keys = [] outlines = [] if len(splitted) > 1: parts = [l for l in splitted[1:] if l not in language.examples] part = "".join(parts) keys, outlines = strings.parse_hashes(strings.get_stripped_lines(part)) lines = strings.get_stripped_lines(string) scenario_line = lines.pop(0) for repl in (language.scenario_outline, language.scenario): scenario_line = strings.remove_it(scenario_line, u"(%s): " % repl) scenario = new_scenario( name=scenario_line, remaining_lines=lines, keys=keys, outlines=outlines, with_file=with_file, original_string=original_string, language=language ) return scenario
def from_string(new_scenario, string, with_file=None, original_string=None, language=None): """ Creates a new scenario from string""" if not language: language = Language() splitted = strings.split_wisely(string, u"(%s):" % language.examples, True) string = splitted[0] keys = [] outlines = [] if len(splitted) > 1: part = splitted[-1] keys, outlines = parse_hashes(strings.get_stripped_lines(part)) lines = strings.get_stripped_lines(string) scenario_line = lines.pop(0) line = strings.remove_it(scenario_line, "(%s): " % language.scenario_outline) line = strings.remove_it(line, "(%s): " % language.scenario) scenario = new_scenario( name=line, remaining_lines=lines, keys=keys, outlines=outlines, with_file=with_file, original_string=original_string, language=language, ) return scenario
def from_string(cls, string, with_file=None, original_string=None): """Creates a new step from string""" lines = strings.get_stripped_lines(string) sentence = lines.pop(0) occ = 0 line = 0 if with_file and original_string: for pline, l in enumerate(original_string.splitlines()): if sentence in l: occ += 1 if cls.occurances.__contains__( sentence ) and cls.occurances[sentence] >= occ: continue if cls.occurances.__contains__( sentence ): cls.occurances[sentence] += 1 else: cls.occurances[sentence] = 1 line = pline + 1 break return cls(sentence, remaining_lines=lines, line=line, filename=with_file)
def from_string(new_feature, string, with_file=None, language=None): """Creates a new feature from string""" lines = strings.get_stripped_lines(string, ignore_lines_starting_with='#') if not language: language = Language() found = len( re.findall(r'(?:%s):[ ]*\w+' % language.feature, "\n".join(lines), re.U)) if found > 1: raise LettuceSyntaxError( with_file, 'A feature file must contain ONLY ONE feature!') elif found == 0: raise LettuceSyntaxError( with_file, 'Features must have a name. e.g: "Feature: This is my name"') while lines: matched = re.search(r'(?:%s):(.*)' % language.feature, lines[0], re.I) if matched: name = matched.groups()[0].strip() break lines.pop(0) feature = new_feature(name=name, remaining_lines=lines, with_file=with_file, original_string=string, language=language) return feature
def from_string(new_feature, string, with_file=None, language=None): """Creates a new feature from string""" lines = strings.get_stripped_lines(string, ignore_lines_starting_with='#') if not language: language = Language() found = len(re.findall(r'%s:[ ]*\w+' % language.feature, "\n".join(lines), re.U)) if found > 1: raise LettuceSyntaxError( with_file, 'A feature file must contain ONLY ONE feature!' ) elif found == 0: raise LettuceSyntaxError( with_file, 'Features must have a name. e.g: "Feature: This is my name"' ) while lines: matched = re.search(r'%s:(.*)' % language.feature, lines[0], re.I) if matched: name = matched.groups()[0].strip() break lines.pop(0) feature = new_feature(name=name, remaining_lines=lines, with_file=with_file, original_string=string, language=language) return feature
def test_multiline_is_part_of_previous_step(): "It should correctly parse a multi-line string as part of the preceding step" lines = strings.get_stripped_lines(MULTI_LINE) steps = Step.many_from_lines(lines) print steps assert_equals(len(steps), 1) assert isinstance(steps[0], Step) assert_equals(steps[0].sentence, "I have a string like so:")
def test_cannot_start_with_multiline(): "It should raise an error when a step starts with a multiline string" lines = strings.get_stripped_lines(INVALID_MULTI_LINE) try: step = Step.many_from_lines(lines) except LettuceSyntaxError: return assert False, "LettuceSyntaxError not raised"
def test_multiline_is_part_of_previous_step(): "It should correctly parse a multi-line string as part of the preceding step" lines = strings.get_stripped_lines(MULTI_LINE) steps = Step.many_from_lines(lines) print steps assert_equals(len(steps), 1) assert isinstance(steps[0], Step) assert_equals(steps[0].sentence, 'I have a string like so:')
def from_string(new_scenario, string, with_file=None, original_string=None, language=None, previous_scenario=None): """ Creates a new scenario from string""" # ignoring comments string = "\n".join( strings.get_stripped_lines(string, ignore_lines_starting_with='#')) if not language: language = Language() splitted = strings.split_wisely(string, u"(%s):" % language.examples, True) string = splitted[0] keys = [] outlines = [] if len(splitted) > 1: parts = [l for l in splitted[1:] if l not in language.examples] part = "".join(parts) keys, outlines = strings.parse_hashes( strings.get_stripped_lines(part)) lines = strings.get_stripped_lines(string) scenario_line = lines.pop(0).strip() for repl in (language.scenario_outline, language.scenario): scenario_line = strings.remove_it(scenario_line, u"(%s): " % repl).strip() scenario = new_scenario( name=scenario_line, remaining_lines=lines, keys=keys, outlines=outlines, with_file=with_file, original_string=original_string, language=language, previous_scenario=previous_scenario, ) return scenario
def test_get_stripped_lines_ignore_comments(): "strings.get_stripped_lines ignore lines that start with some char" my_string = """ first line # second line """ assert_equals(strings.get_stripped_lines(my_string, ignore_lines_starting_with="#"), ["first line"])
def test_get_stripped_lines(): "strings.get_stripped_lines strip every line, and jump empty ones" my_string = """ first line second line """ assert_equals(strings.get_stripped_lines(my_string), ["first line", "second line"])
def test_get_stripped_lines(): "strings.get_stripped_lines strip every line, and jump empty ones" my_string = ''' first line second line ''' assert_equals(strings.get_stripped_lines(my_string), ['first line', 'second line'])
def from_string(cls, string, with_file=None, original_string=None): """Creates a new step from string""" lines = strings.get_stripped_lines(string) sentence = lines.pop(0) line = None if with_file and original_string: for pline, line in enumerate(original_string.splitlines()): if sentence in line: line = pline + 1 break return cls(sentence, remaining_lines=lines, line=line, filename=with_file)
def test_get_stripped_lines_ignore_comments(): "strings.get_stripped_lines ignore lines that start with some char" my_string = ''' first line # second line ''' assert_equals( strings.get_stripped_lines(my_string, ignore_lines_starting_with="#"), [ 'first line', ])
def test_get_stripped_lines(): "strings.get_stripped_lines strip every line, and jump empty ones" my_string = ''' first line second line ''' assert_equals( strings.get_stripped_lines(my_string), [ 'first line', 'second line' ] )
def __init__(self, feature, filename, string, language): lines = [l.strip() for l in string.splitlines()] self.file = fs.relpath(filename) self.line = None described_at = [] description_lines = strings.get_stripped_lines(feature.description) for pline, part in enumerate(lines): part = part.strip() line = pline + 1 if part.startswith(u"%s:" % language.first_of_feature): self.line = line else: for description in description_lines: if part == description: described_at.append(line) self.description_at = tuple(described_at)
def __init__(self, string): self.feature = None lines = strings.get_stripped_lines(string) self.steps = Step.many_from_lines(lines, None, string)