def test_charClass(self): g = VisualRegexGrammar() self._parseStringTest(g.charClass(), '\\A', Schema.CharClass(cls='A')) self._parseStringTest(g.charClass(), '\\b', Schema.CharClass(cls='b')) self._parseStringTest(g.charClass(), '\\B', Schema.CharClass(cls='B')) self._parseStringTest(g.charClass(), '\\d', Schema.CharClass(cls='d')) self._parseStringTest(g.charClass(), '\\D', Schema.CharClass(cls='D')) self._parseStringTest(g.charClass(), '\\s', Schema.CharClass(cls='s')) self._parseStringTest(g.charClass(), '\\S', Schema.CharClass(cls='S')) self._parseStringTest(g.charClass(), '\\w', Schema.CharClass(cls='w')) self._parseStringTest(g.charClass(), '\\W', Schema.CharClass(cls='W')) self._parseStringTest(g.charClass(), '\\Z', Schema.CharClass(cls='Z'))
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 charClass(self): return (Literal('\\') + RegEx('[AbBdDsSwWZ]')).action( lambda input, begin, end, x, bindings: Schema.CharClass(cls=x[1]))