Exemple #1
0
 def test_project_line_parser_doesnt_consume_after_lf(self):
     from gpl.parsers import PROJECT_LINE
     # make sure that the parser does not consume after LF
     from gpl.Pysec import match
     self.assertEqual(' NEXTLINE',
                       (PROJECT_LINE & match(' NEXTLINE')).parseString(project_line
                                                                       + LF + ' NEXTLINE'))
Exemple #2
0
 def test_project_line_parser_doesnt_consume_after_lf(self):
     from gpl.parsers import PROJECT_LINE
     # make sure that the parser does not consume after LF
     from gpl.Pysec import match
     self.assertEquals(' NEXTLINE',
                       (PROJECT_LINE
                        & match(' NEXTLINE')).parseString(project_line +
                                                          LF + ' NEXTLINE'))
Exemple #3
0
    def test_copyright(self):
        from gpl.parsers import COPYRIGHT_SIGN
        self.assertTrue(COPYRIGHT_SIGN.parseString('Copyright (C)'))

        from gpl.parsers import Span
        self.assertEqual('2010', str(Span(2010)))
        self.assertEqual('2010-2012', str(Span(2010, 2012)))

        from gpl.parsers import YEAR_SPAN
        self.assertEqual(Span(2010, 2012),
                          YEAR_SPAN.parseString('2010-2012'))
        self.assertEqual(Span(2010, 2010),
                          YEAR_SPAN.parseString('2010'))

        from gpl.parsers import YEARS
        self.assertEqual(set([2010]),
                          YEARS.parseString('2010'))
        self.assertEqual(set([2010, 2011]),
                          YEARS.parseString('2010,2011'))
        self.assertEqual(set([2010, 2011, 2012]),
                          YEARS.parseString('2010-2012'))
        self.assertEqual(set([2010, 2011, 2013, 2014, 2015, 2017]),
                          YEARS.parseString('2010,2011,2013-2015,2017'))

        from gpl.parsers import AUTHOR_NAME
        self.assertEqual('Hello World',
                          AUTHOR_NAME.parseString('Hello World'))
        self.assertEqual('Hello World',
                          AUTHOR_NAME.parseString('Hello World <'))

        from gpl.parsers import AUTHOR_EMAIL
        self.assertEqual('*****@*****.**',
                          AUTHOR_EMAIL.parseString('<*****@*****.**>'))

        from gpl.parsers import Author
        from gpl.parsers import AUTHOR
        self.assertEqual(Author('hong gil-dong', '*****@*****.**'),
                          AUTHOR.parseString('hong gil-dong <*****@*****.**>'))
        self.assertEqual(Author('hong gil-dong'),
                          (AUTHOR.parseString('hong gil-dong')))
        self.assertEqual(Author(None, '*****@*****.**'),
                          (AUTHOR.parseString('<*****@*****.**>')))

        from gpl.parsers import AUTHORS
        self.assertEqual([Author('mete0r'),
                           Author('hong gil-dong', '*****@*****.**')],
                          AUTHORS.parseString('mete0r, hong gil-dong <*****@*****.**>'))

        from gpl.parsers import Copyright
        from gpl.parsers import COPYRIGHT_LINE
        # ok with LF
        self.assertEqual(Copyright(set([2010, 2011, 2012]),
                                    [Author('mete0r')]),
                          (COPYRIGHT_LINE.parseString(copyright_line + LF)))

        # ok without LF
        self.assertEqual(Copyright(set([2010, 2011, 2012]),
                                    [Author('mete0r')]),
                          (COPYRIGHT_LINE.parseString(copyright_line)))

        # make sure that the parser does not consume after the LF
        from gpl.Pysec import match
        self.assertEqual(' NEXTLINE',
                          (COPYRIGHT_LINE & match(' NEXTLINE')).parseString(copyright_line + LF + ' NEXTLINE'))
Exemple #4
0
def py_comment(parser):
    return inline_spaces & match('#') & parser
Exemple #5
0
def skip_tailspace_of_line(parser):
    return skip_after(parser,
                      inline_spaces & option(None, match('\n')))
Exemple #6
0
        return name, description

    def __str__(self):
        return self.name + (' : ' + self.description
                            if self.description
                            else '')


alphabet = char_range('a', 'z') + char_range('A', 'Z')
PROJECT_NAME = (group_chars([one_of(alphabet),
                             many_chars(one_of(alphabet + char_range('0', '9') + '-_'), 1)])
                >> lift(str.strip))
PROJECT_NAME = skip_after(PROJECT_NAME, option(None, inline_spaces))
PROJECT_DESC = until_one_of('\n') >> lift(str.strip)
PROJECT_LINE = pair(PROJECT_NAME,
                    option(None, match(':') & PROJECT_DESC))
PROJECT_LINE = PROJECT_LINE >> lift(lambda seq: Project(*seq))
PROJECT_LINE = skip_before(inline_spaces, PROJECT_LINE)
PROJECT_LINE = skip_tailspace_of_line(PROJECT_LINE)


COPYRIGHT_SIGN = match('Copyright (C)')

class Span(Record('start', 'end')):

    @classmethod
    def prepare(cls, start, end=None):
        if end is None:
            end = start
        assert start <= end
        return start, end
Exemple #7
0
    def test_copyright(self):
        from gpl.parsers import COPYRIGHT_SIGN
        self.assertTrue(COPYRIGHT_SIGN.parseString('Copyright (C)'))

        from gpl.parsers import Span
        self.assertEquals('2010', str(Span(2010)))
        self.assertEquals('2010-2012', str(Span(2010, 2012)))

        from gpl.parsers import YEAR_SPAN
        self.assertEquals(Span(2010, 2012), YEAR_SPAN.parseString('2010-2012'))
        self.assertEquals(Span(2010, 2010), YEAR_SPAN.parseString('2010'))

        from gpl.parsers import YEARS
        self.assertEquals(set([2010]), YEARS.parseString('2010'))
        self.assertEquals(set([2010, 2011]), YEARS.parseString('2010,2011'))
        self.assertEquals(set([2010, 2011, 2012]),
                          YEARS.parseString('2010-2012'))
        self.assertEquals(set([2010, 2011, 2013, 2014, 2015, 2017]),
                          YEARS.parseString('2010,2011,2013-2015,2017'))

        from gpl.parsers import AUTHOR_NAME
        self.assertEquals('Hello World',
                          AUTHOR_NAME.parseString('Hello World'))
        self.assertEquals('Hello World',
                          AUTHOR_NAME.parseString('Hello World <'))

        from gpl.parsers import AUTHOR_EMAIL
        self.assertEquals('*****@*****.**',
                          AUTHOR_EMAIL.parseString('<*****@*****.**>'))

        from gpl.parsers import Author
        from gpl.parsers import AUTHOR
        self.assertEquals(
            Author('hong gil-dong', '*****@*****.**'),
            AUTHOR.parseString('hong gil-dong <*****@*****.**>'))
        self.assertEquals(Author('hong gil-dong'),
                          (AUTHOR.parseString('hong gil-dong')))
        self.assertEquals(Author(None, '*****@*****.**'),
                          (AUTHOR.parseString('<*****@*****.**>')))

        from gpl.parsers import AUTHORS
        self.assertEquals(
            [Author('mete0r'),
             Author('hong gil-dong', '*****@*****.**')],
            AUTHORS.parseString('mete0r, hong gil-dong <*****@*****.**>'))

        from gpl.parsers import Copyright
        from gpl.parsers import COPYRIGHT_LINE
        # ok with LF
        self.assertEquals(
            Copyright(set([2010, 2011, 2012]), [Author('mete0r')]),
            (COPYRIGHT_LINE.parseString(copyright_line + LF)))

        # ok without LF
        self.assertEquals(
            Copyright(set([2010, 2011, 2012]), [Author('mete0r')]),
            (COPYRIGHT_LINE.parseString(copyright_line)))

        # make sure that the parser does not consume after the LF
        from gpl.Pysec import match
        self.assertEquals(' NEXTLINE',
                          (COPYRIGHT_LINE
                           & match(' NEXTLINE')).parseString(copyright_line +
                                                             LF + ' NEXTLINE'))
Exemple #8
0
def py_comment(parser):
    return inline_spaces & match('#') & parser
Exemple #9
0
def skip_tailspace_of_line(parser):
    return skip_after(parser, inline_spaces & option(None, match('\n')))
Exemple #10
0
            description = description.strip()
        return name, description

    def __str__(self):
        return self.name + (' : ' +
                            self.description if self.description else '')


alphabet = char_range('a', 'z') + char_range('A', 'Z')
PROJECT_NAME = (group_chars([
    one_of(alphabet),
    many_chars(one_of(alphabet + char_range('0', '9') + '-_'), 1)
]) >> lift(str.strip))
PROJECT_NAME = skip_after(PROJECT_NAME, option(None, inline_spaces))
PROJECT_DESC = until_one_of('\n') >> lift(str.strip)
PROJECT_LINE = pair(PROJECT_NAME, option(None, match(':') & PROJECT_DESC))
PROJECT_LINE = PROJECT_LINE >> lift(lambda seq: Project(*seq))
PROJECT_LINE = skip_before(inline_spaces, PROJECT_LINE)
PROJECT_LINE = skip_tailspace_of_line(PROJECT_LINE)

COPYRIGHT_SIGN = match('Copyright (C)')


class Span(Record('start', 'end')):
    @classmethod
    def prepare(cls, start, end=None):
        if end is None:
            end = start
        assert start <= end
        return start, end