def test_missing(self): for template in [r'\1', r'\g<x>']: with self.subTest(template=template): with self.assertRaises(KeyError): formatting.RegexTemplate(r'\1').substitute_match( parsed_file.ParsedFile('', path='path', pragmas=()), match.SpanMatch('', (0, 0)), {})
def test_string_match(self): self.assertEqual( formatting.rewrite_templates( parsed_file.ParsedFile('abc', path='path', pragmas=()), collections.OrderedDict([ ('foo', match.SpanMatch('abc', (0, 3))), ('bar', match.StringMatch('xyz')) ]), {'foo': formatting.ShTemplate(r'$bar')}), {'foo': 'xyz'})
def test_named_template(self): self.assertEqual( formatting.rewrite_templates( parsed_file.ParsedFile('abc', path='path', pragmas=()), collections.OrderedDict([('foo', match.SpanMatch('b', (1, 2)))]), {'foo': formatting.RegexTemplate(r'x\g<foo>x')}), {'foo': 'xbx'})
def test_missing_template(self): self.assertEqual( formatting.rewrite_templates( parsed_file.ParsedFile('abc', path='path', pragmas=()), collections.OrderedDict([('foo', match.SpanMatch('', (-1, -1))), ('bar', match.SpanMatch('a', (0, 1)))]), { # swap foo and bar 'foo': formatting.RegexTemplate(r'bar=\g<bar>'), 'bar': formatting.RegexTemplate(r'foo=\g<foo>'), }), # foo is never matched, bar is replaced with foo=<non-match>, # which is treated as ''. {'bar': 'foo='})
def test_empty(self): self.assertEqual( formatting.rewrite_templates( parsed_file.ParsedFile('abc', path='path', pragmas=()), {}, {}), {})
def test_present_named(self): self.assertEqual( formatting.RegexTemplate(r'\g<x>').substitute_match( parsed_file.ParsedFile('a', path='path', pragmas=()), match.SpanMatch('', (0, 0)), {'x': match.SpanMatch('a', (0, 1))}), 'a')
def test_extra(self): self.assertEqual( formatting.RegexTemplate('').substitute_match( parsed_file.ParsedFile('b', path='path', pragmas=()), match.SpanMatch('', (0, 0)), {'a': match.SpanMatch('b', (0, 1))}), '')
def parse(self, data: Text, path: str): """Parses the data into a representation usable by the searcher.""" return parsed_file.ParsedFile(text=data, path=path, pragmas=())