Exemple #1
0
    def test_call_base(self, mocker):
        mock_Section = mocker.patch.object(template, 'Section')
        values = {'sections': {}}
        start_coord = location.Coordinate('path', 23)
        end_coord = location.Coordinate('path', 42)
        start_toks = [
            perfile.Token(perfile.TOK_WORD, 'section'),
            perfile.Token(perfile.TOK_CHAR, '('),
            perfile.Token(perfile.TOK_WORD, 'var1'),
            perfile.Token(perfile.TOK_CHAR, ','),
            perfile.Token(perfile.TOK_WORD, 'var2'),
            perfile.Token(perfile.TOK_CHAR, ','),
            perfile.Token(perfile.TOK_WORD, 'var3'),
            perfile.Token(perfile.TOK_CHAR, ')'),
            perfile.Token(perfile.TOK_CHAR, '{'),
        ]
        end_toks = []
        obj = template.SectionDirective(values, start_coord, start_toks)

        result = obj(end_coord, 'buf', end_toks)

        assert result is None
        assert values == {
            'sections': {
                'section': mock_Section.return_value
            },
        }
        mock_Section.assert_called_once_with(
            location.CoordinateRange('path', 23, 42),
            'section',
            {'var1', 'var2', 'var3'},
            'buf',
        )
Exemple #2
0
    def test_init_no_name(self):
        values = {'defines': {}}
        coord = location.Coordinate('path', 23)
        toks = [
            perfile.Token(perfile.TOK_WORD, ''),
            perfile.Token(perfile.TOK_CHAR, '{'),
        ]

        with pytest.raises(perfile.ParseException):
            template.DefineDirective(values, coord, toks)

        assert values == {'defines': {}}
Exemple #3
0
    def test_init_too_many_toks(self):
        values = {'structure': []}
        coord = location.Coordinate('path', 23)
        toks = [
            perfile.Token(perfile.TOK_WORD, 'something'),
            perfile.Token(perfile.TOK_CHAR, '{'),
        ]

        with pytest.raises(perfile.ParseException):
            template.LiteralDirective(values, coord, toks)

        assert values == {'structure': []}
Exemple #4
0
    def test_init_bad_brace(self):
        values = {'sections': {}}
        coord = location.Coordinate('path', 23)
        toks = [
            perfile.Token(perfile.TOK_WORD, 'section'),
            perfile.Token(perfile.TOK_CHAR, '('),
        ]

        with pytest.raises(perfile.ParseException):
            template.SectionDirective(values, coord, toks)

        assert values == {'sections': {}}
Exemple #5
0
    def test_init_base(self):
        values = {'defines': {}}
        coord = location.Coordinate('path', 23)
        toks = [
            perfile.Token(perfile.TOK_WORD, 'define'),
            perfile.Token(perfile.TOK_CHAR, '{'),
        ]

        result = template.DefineDirective(values, coord, toks)

        assert result.name == 'define'
        assert result.values is values
        assert result.start_coord == coord
        assert values == {'defines': {}}
Exemple #6
0
    def test_call_bad_end(self, mocker):
        mock_Literal = mocker.patch.object(template, 'Literal')
        values = {'structure': []}
        start_coord = location.Coordinate('path', 23)
        end_coord = location.Coordinate('path', 42)
        start_toks = [perfile.Token(perfile.TOK_CHAR, '{')]
        end_toks = [perfile.Token(perfile.TOK_CHAR, '}')]
        obj = template.LiteralDirective(values, start_coord, start_toks)

        with pytest.raises(perfile.ParseException):
            obj(end_coord, 'buf', end_toks)

        assert values == {'structure': []}
        assert not mock_Literal.called
Exemple #7
0
    def test_too_many_toks(self, mocker):
        mock_InsertSection = mocker.patch.object(template, 'InsertSection')
        values = {'structure': []}
        coord = location.Coordinate('path', 23)
        toks = [
            perfile.Token(perfile.TOK_WORD, 'section'),
            perfile.Token(perfile.TOK_CHAR, '{'),
        ]

        with pytest.raises(perfile.ParseException):
            template.insert(values, coord, toks)

        assert values == {'structure': []}
        assert not mock_InsertSection.called
Exemple #8
0
    def test_call_bad_end(self, mocker):
        mock_Define = mocker.patch.object(template, 'Define')
        values = {'defines': {}}
        start_coord = location.Coordinate('path', 23)
        end_coord = location.Coordinate('path', 42)
        start_toks = [
            perfile.Token(perfile.TOK_WORD, 'define'),
            perfile.Token(perfile.TOK_CHAR, '{'),
        ]
        end_toks = [perfile.Token(perfile.TOK_CHAR, '}')]
        obj = template.DefineDirective(values, start_coord, start_toks)

        with pytest.raises(perfile.ParseException):
            obj(end_coord, 'buf', end_toks)

        assert values == {'defines': {}}
        assert not mock_Define.called
Exemple #9
0
    def test_init_one_require(self):
        values = {'sections': {}}
        coord = location.Coordinate('path', 23)
        toks = [
            perfile.Token(perfile.TOK_WORD, 'section'),
            perfile.Token(perfile.TOK_CHAR, '('),
            perfile.Token(perfile.TOK_WORD, 'var1'),
            perfile.Token(perfile.TOK_CHAR, ')'),
            perfile.Token(perfile.TOK_CHAR, '{'),
        ]

        result = template.SectionDirective(values, coord, toks)

        assert result.name == 'section'
        assert result.requires == {'var1'}
        assert result.values is values
        assert result.start_coord == coord
        assert values == {'sections': {}}
Exemple #10
0
    def test_init_bad_tok(self):
        values = {'structure': []}
        coord = location.Coordinate('path', 23)
        toks = [perfile.Token(perfile.TOK_CHAR, '(')]

        with pytest.raises(perfile.ParseException):
            template.LiteralDirective(values, coord, toks)

        assert values == {'structure': []}
Exemple #11
0
    def test_init_missing_toks(self):
        values = {'sections': {}}
        coord = location.Coordinate('path', 23)
        toks = [perfile.Token(perfile.TOK_CHAR, '{')]

        with pytest.raises(perfile.ParseException):
            template.SectionDirective(values, coord, toks)

        assert values == {'sections': {}}
Exemple #12
0
    def test_init_base(self):
        values = {'structure': []}
        coord = location.Coordinate('path', 23)
        toks = [perfile.Token(perfile.TOK_CHAR, '{')]

        result = template.LiteralDirective(values, coord, toks)

        assert result.values is values
        assert result.start_coord == coord
        assert values == {'structure': []}
Exemple #13
0
    def test_call_base(self, mocker):
        mock_Define = mocker.patch.object(template, 'Define')
        values = {'defines': {}}
        start_coord = location.Coordinate('path', 23)
        end_coord = location.Coordinate('path', 42)
        start_toks = [
            perfile.Token(perfile.TOK_WORD, 'define'),
            perfile.Token(perfile.TOK_CHAR, '{'),
        ]
        end_toks = []
        obj = template.DefineDirective(values, start_coord, start_toks)

        result = obj(end_coord, 'buf', end_toks)

        assert result is None
        assert values == {
            'defines': {
                'define': mock_Define.return_value
            },
        }
        mock_Define.assert_called_once_with(
            location.CoordinateRange('path', 23, 42), 'define', 'buf')
Exemple #14
0
    def test_base(self, mocker):
        mock_InsertSection = mocker.patch.object(template, 'InsertSection')
        values = {'structure': []}
        coord = location.Coordinate('path', 23)
        toks = [perfile.Token(perfile.TOK_WORD, 'section')]

        result = template.insert(values, coord, toks)

        assert result is None
        assert values == {
            'structure': [mock_InsertSection.return_value],
        }
        mock_InsertSection.assert_called_once_with(
            location.CoordinateRange('path', 23, 23), 'section')
Exemple #15
0
    def test_init_missing_close_paren(self):
        values = {'sections': {}}
        coord = location.Coordinate('path', 23)
        toks = [
            perfile.Token(perfile.TOK_WORD, 'section'),
            perfile.Token(perfile.TOK_CHAR, '('),
            perfile.Token(perfile.TOK_WORD, 'var1'),
            perfile.Token(perfile.TOK_CHAR, ','),
            perfile.Token(perfile.TOK_WORD, 'var2'),
            perfile.Token(perfile.TOK_CHAR, ','),
            perfile.Token(perfile.TOK_WORD, 'var3'),
            perfile.Token(perfile.TOK_CHAR, '{'),
        ]

        with pytest.raises(perfile.ParseException):
            template.SectionDirective(values, coord, toks)

        assert values == {'sections': {}}
Exemple #16
0
    def test_call_base(self, mocker):
        mock_Literal = mocker.patch.object(template, 'Literal')
        values = {'structure': []}
        start_coord = location.Coordinate('path', 23)
        end_coord = location.Coordinate('path', 42)
        start_toks = [perfile.Token(perfile.TOK_CHAR, '{')]
        end_toks = []
        obj = template.LiteralDirective(values, start_coord, start_toks)

        result = obj(end_coord, 'buf', end_toks)

        assert result is None
        assert values == {
            'structure': [mock_Literal.return_value],
        }
        mock_Literal.assert_called_once_with(
            location.CoordinateRange('path', 23, 42), 'buf')
Exemple #17
0
    def test_call_unclosed(self, mocker):
        mock_Section = mocker.patch.object(template, 'Section')
        values = {'sections': {}}
        start_coord = location.Coordinate('path', 23)
        end_coord = location.Coordinate('path', 42)
        start_toks = [
            perfile.Token(perfile.TOK_WORD, 'section'),
            perfile.Token(perfile.TOK_CHAR, '('),
            perfile.Token(perfile.TOK_WORD, 'var1'),
            perfile.Token(perfile.TOK_CHAR, ','),
            perfile.Token(perfile.TOK_WORD, 'var2'),
            perfile.Token(perfile.TOK_CHAR, ','),
            perfile.Token(perfile.TOK_WORD, 'var3'),
            perfile.Token(perfile.TOK_CHAR, ')'),
            perfile.Token(perfile.TOK_CHAR, '{'),
        ]
        end_toks = None
        obj = template.SectionDirective(values, start_coord, start_toks)

        with pytest.raises(perfile.ParseException):
            obj(end_coord, 'buf', end_toks)

        assert values == {'sections': {}}
        assert not mock_Section.called
Exemple #18
0
    def test_parse_line_start_deferred(self, mocker):
        directive = mocker.Mock(return_value='deferred')
        mocker.patch.dict(ParserForTest.DIRECTIVES, directive=directive)
        mock_parse_directive = mocker.patch.object(
            ParserForTest,
            '_parse_directive',
            return_value=('start',
                          [perfile.Token(perfile.TOK_WORD, 'directive'), 2,
                           3]))
        mock_LineList = mocker.patch.object(perfile.linelist, 'LineList')
        obj = ParserForTest()

        obj._parse_line('coord', '%test directive', 'values')

        assert obj._lines == 1
        assert obj._deferred == 'deferred'
        assert obj._buf == mock_LineList.return_value
        mock_parse_directive.assert_called_once_with('coord',
                                                     '%test directive')
        directive.assert_called_once_with('values', 'start', [2, 3])
        mock_LineList.assert_called_once_with()
Exemple #19
0
    def test_parse_line_end_deferred(self, mocker):
        deferred = mocker.Mock(return_value='deferred')
        mock_parse_directive = mocker.patch.object(
            ParserForTest,
            '_parse_directive',
            return_value=('start',
                          [perfile.Token(perfile.TOK_CHAR, '}'), 2, 3]))
        mock_LineList = mocker.patch.object(perfile.linelist, 'LineList')
        obj = ParserForTest()
        obj._deferred = deferred
        obj._buf = 'buf'

        obj._parse_line('coord', '%} end directive', 'values')

        assert obj._lines == 1
        assert obj._deferred == 'deferred'
        assert obj._buf == mock_LineList.return_value
        mock_parse_directive.assert_called_once_with('coord',
                                                     '%} end directive')
        deferred.assert_called_once_with('start', 'buf', [2, 3])
        mock_LineList.assert_called_once_with()
Exemple #20
0
    def test_parse_line_start_bad_directive(self, mocker):
        directive = mocker.Mock(return_value=None)
        mocker.patch.dict(ParserForTest.DIRECTIVES, directive=directive)
        mock_parse_directive = mocker.patch.object(
            ParserForTest,
            '_parse_directive',
            return_value=('start',
                          [perfile.Token(perfile.TOK_WORD, 'spam'), 2, 3]))
        mock_LineList = mocker.patch.object(perfile.linelist, 'LineList')
        obj = ParserForTest()

        with pytest.raises(perfile.ParseException):
            obj._parse_line('coord', '%test directive', 'values')

        assert obj._lines == 1
        assert obj._deferred is None
        assert obj._buf is None
        mock_parse_directive.assert_called_once_with('coord',
                                                     '%test directive')
        assert not directive.called
        assert not mock_LineList.called
Exemple #21
0
    def test_parse_line_end_comment_pfx(self, mocker):
        deferred = mocker.Mock(return_value=None)
        mock_parse_directive = mocker.patch.object(
            ParserForTest,
            '_parse_directive',
            return_value=('start',
                          [perfile.Token(perfile.TOK_CHAR, '}'), 2, 3]))
        mock_LineList = mocker.patch.object(perfile.linelist, 'LineList')
        obj = ParserForTest()
        obj._deferred = deferred
        obj._buf = 'buf'
        obj._comment_pfx = '%'

        obj._parse_line('coord', '} end directive', 'values')

        assert obj._lines == 1
        assert obj._deferred is None
        assert obj._buf is None
        mock_parse_directive.assert_called_once_with('coord',
                                                     '} end directive')
        deferred.assert_called_once_with('start', 'buf', [2, 3])
        assert not mock_LineList.called
Exemple #22
0
    def test_parse_line_end_bad_close(self, mocker):
        deferred = mocker.Mock(return_value=None)
        mock_parse_directive = mocker.patch.object(
            ParserForTest,
            '_parse_directive',
            return_value=('start',
                          [perfile.Token(perfile.TOK_CHAR, ')'), 2, 3]))
        mock_LineList = mocker.patch.object(perfile.linelist, 'LineList')
        obj = ParserForTest()
        obj._deferred = deferred
        obj._buf = 'buf'

        with pytest.raises(perfile.ParseException):
            obj._parse_line('coord', '%} end directive', 'values')

        assert obj._lines == 1
        assert obj._deferred == deferred
        assert obj._buf == 'buf'
        mock_parse_directive.assert_called_once_with('coord',
                                                     '%} end directive')
        assert not deferred.called
        assert not mock_LineList.called
Exemple #23
0
    def test_parse_line_accumulate_newline(self, mocker):
        buf = mocker.Mock()
        deferred = mocker.Mock(return_value=None)
        mock_parse_directive = mocker.patch.object(
            ParserForTest,
            '_parse_directive',
            return_value=('start',
                          [perfile.Token(perfile.TOK_CHAR, '}'), 2, 3]))
        mock_LineList = mocker.patch.object(perfile.linelist, 'LineList')
        obj = ParserForTest()
        obj._deferred = deferred
        obj._buf = buf

        obj._parse_line('coord', '} new line  \n', 'values')

        assert obj._lines == 1
        assert obj._deferred == deferred
        assert obj._buf == buf
        assert not mock_parse_directive.called
        assert not deferred.called
        assert not mock_LineList.called
        buf.append.assert_called_once_with('} new line  ', 'coord')