def test_charSet(self): g = VisualRegexGrammar() self._parseStringFailTest(g.charSet(), '[]') self._parseStringTest( g.charSet(), '[abc]', Schema.CharSet(items=[ Schema.CharSetChar(char=Schema.LiteralChar(char='a')), Schema.CharSetChar(char=Schema.LiteralChar(char='b')), Schema.CharSetChar(char=Schema.LiteralChar(char='c')) ])) self._parseStringTest( g.charSet(), '[^abc]', Schema.CharSet( invert='1', items=[ Schema.CharSetChar(char=Schema.LiteralChar(char='a')), Schema.CharSetChar(char=Schema.LiteralChar(char='b')), Schema.CharSetChar(char=Schema.LiteralChar(char='c')) ])) self._parseStringTest( g.charSet(), '[a-z]', Schema.CharSet(items=[ Schema.CharSetRange(min=Schema.LiteralChar(char='a'), max=Schema.LiteralChar(char='z')) ])) self._parseStringTest( g.charSet(), '[a-zA-Z0-9_]', Schema.CharSet(items=[ Schema.CharSetRange(min=Schema.LiteralChar(char='a'), max=Schema.LiteralChar(char='z')), Schema.CharSetRange(min=Schema.LiteralChar(char='A'), max=Schema.LiteralChar(char='Z')), Schema.CharSetRange(min=Schema.LiteralChar(char='0'), max=Schema.LiteralChar(char='9')), Schema.CharSetChar(char=Schema.LiteralChar(char='_')) ])) self._parseStringTest( g.charSet(), '[^^]', Schema.CharSet( invert='1', items=[Schema.CharSetChar(char=Schema.LiteralChar(char='^'))])) self._parseStringTest( g.charSet(), '[-]', Schema.CharSet( items=[Schema.CharSetChar(char=Schema.LiteralChar(char='-'))])) self._parseStringTest( g.charSet(), '[a-]', Schema.CharSet(items=[ Schema.CharSetChar(char=Schema.LiteralChar(char='a')), Schema.CharSetChar(char=Schema.LiteralChar(char='-')) ])) self._parseStringTest( g.charSet(), '[+--]', Schema.CharSet(items=[ Schema.CharSetRange(min=Schema.LiteralChar(char='+'), max=Schema.LiteralChar(char='-')) ]))
def test_regex(self): g = VisualRegexGrammar() self._parseStringTest(g.regex(), 'a', Schema.LiteralChar(char='a')) self._parseStringTest( g.regex(), 'abc|def', Schema.Choice(subexps=[ Schema.Sequence(subexps=[ Schema.LiteralChar(char='a'), Schema.LiteralChar(char='b'), Schema.LiteralChar(char='c') ]), Schema.Sequence(subexps=[ Schema.LiteralChar(char='d'), Schema.LiteralChar(char='e'), Schema.LiteralChar(char='f') ]) ])) self._parseStringTest( g.regex(), r'[\w\-][\w\-\.]+@[\w\-][\w\-\.]+[a-zA-Z]{1,4}', Schema.Sequence(subexps=[ Schema.CharSet(items=[ Schema.CharSetChar(char=Schema.CharClass(cls='w')), Schema.CharSetChar(char=Schema.EscapedChar(char='-')) ]), Schema.OneOrMore(subexp=Schema.CharSet(items=[ Schema.CharSetChar(char=Schema.CharClass(cls='w')), Schema.CharSetChar(char=Schema.EscapedChar(char='-')), Schema.CharSetChar(char=Schema.EscapedChar(char='.')) ])), Schema.LiteralChar(char='@'), Schema.CharSet(items=[ Schema.CharSetChar(char=Schema.CharClass(cls='w')), Schema.CharSetChar(char=Schema.EscapedChar(char='-')) ]), Schema.OneOrMore(subexp=Schema.CharSet(items=[ Schema.CharSetChar(char=Schema.CharClass(cls='w')), Schema.CharSetChar(char=Schema.EscapedChar(char='-')), Schema.CharSetChar(char=Schema.EscapedChar(char='.')) ])), Schema.RepeatRange(subexp=Schema.CharSet(items=[ Schema.CharSetRange(min=Schema.LiteralChar(char='a'), max=Schema.LiteralChar(char='z')), Schema.CharSetRange(min=Schema.LiteralChar(char='A'), max=Schema.LiteralChar(char='Z')) ]), min='1', max='4', greedy='1') ]))
def test_sequence(self): g = VisualRegexGrammar() self._parseStringTest( g.sequence(), 'abc', Schema.Sequence(subexps=[ Schema.LiteralChar(char='a'), Schema.LiteralChar(char='b'), Schema.LiteralChar(char='c') ])) self._parseStringTest( g.sequence(), 'a*bc', Schema.Sequence(subexps=[ Schema.ZeroOrMore(subexp=Schema.LiteralChar(char='a')), Schema.LiteralChar(char='b'), Schema.LiteralChar(char='c') ])) self._parseStringTest( g.sequence(), 'ab*c', Schema.Sequence(subexps=[ Schema.LiteralChar(char='a'), Schema.ZeroOrMore(subexp=Schema.LiteralChar(char='b')), Schema.LiteralChar(char='c') ])) self._parseStringTest( g.sequence(), 'abc*', Schema.Sequence(subexps=[ Schema.LiteralChar(char='a'), Schema.LiteralChar(char='b'), Schema.ZeroOrMore(subexp=Schema.LiteralChar(char='c')) ])) self._parseStringTest( g.sequence(), '[a-z]bc', Schema.Sequence(subexps=[ Schema.CharSet(items=[ Schema.CharSetRange(min=Schema.LiteralChar(char='a'), max=Schema.LiteralChar(char='z')) ]), Schema.LiteralChar(char='b'), Schema.LiteralChar(char='c') ])) self._parseStringTest( g.sequence(), '\\wbc*', Schema.Sequence(subexps=[ Schema.CharClass(cls='w'), Schema.LiteralChar(char='b'), Schema.ZeroOrMore(subexp=Schema.LiteralChar(char='c')) ]))
def charSetItemRange(self): return ( self.charSetChar() + Literal('-') + self.charSetChar()).action(lambda input, begin, end, x, bindings: Schema.CharSetRange(min=x[0], max=x[2]))