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', )
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': {}}
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': []}
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': {}}
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': {}}
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
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
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
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': {}}
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': []}
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': {}}
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': []}
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')
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')
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': {}}
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')
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
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()
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()
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
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
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
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')