forked from sciunto-org/python-bibtexparser
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_bibtexexpression.py
More file actions
103 lines (78 loc) · 3.87 KB
/
test_bibtexexpression.py
File metadata and controls
103 lines (78 loc) · 3.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import unittest
from bibtexparser.bibtexexpression import BibtexExpression
class TestBibtexExpression(unittest.TestCase):
def setUp(self):
self.expr = BibtexExpression()
def test_minimal(self):
result = self.expr.entry.parse_string('@journal{key, name = 123 }')
self.assertEqual(result.get('EntryType'), 'journal')
self.assertEqual(result.get('Key'), 'key')
self.assertEqual(result.get('Fields'), {'name': '123'})
def test_capital_type(self):
result = self.expr.entry.parse_string('@JOURNAL{key, name = 123 }')
self.assertEqual(result.get('EntryType'), 'JOURNAL')
def test_capital_key(self):
result = self.expr.entry.parse_string('@journal{KEY, name = 123 }')
self.assertEqual(result.get('Key'), 'KEY')
def test_braced(self):
result = self.expr.entry.parse_string('@journal{key, name = {abc} }')
self.assertEqual(result.get('Fields'), {'name': 'abc'})
def test_braced_with_new_line(self):
result = self.expr.entry.parse_string(
'@journal{key, name = {abc\ndef} }')
self.assertEqual(result.get('Fields'), {'name': 'abc\ndef'})
def test_braced_unicode(self):
result = self.expr.entry.parse_string(
'@journal{key, name = {àbcđéf} }')
self.assertEqual(result.get('Fields'), {'name': 'àbcđéf'})
def test_quoted(self):
result = self.expr.entry.parse_string('@journal{key, name = "abc" }')
self.assertEqual(result.get('Fields'), {'name': 'abc'})
def test_quoted_with_new_line(self):
result = self.expr.entry.parse_string(
'@journal{key, name = "abc\ndef" }')
self.assertEqual(result.get('Fields'), {'name': 'abc\ndef'})
def test_quoted_with_unicode(self):
result = self.expr.entry.parse_string(
'@journal{key, name = "àbcđéf" }')
self.assertEqual(result.get('Fields'), {'name': 'àbcđéf'})
def test_entry_declaration_after_space(self):
self.expr.entry.parse_string(' @journal{key, name = {abcd}}')
def test_entry_declaration_no_key(self):
with self.assertRaises(self.expr.ParseException):
self.expr.entry.parse_string('@misc{name = {abcd}}')
def test_entry_declaration_no_key_new_line(self):
with self.assertRaises(self.expr.ParseException):
self.expr.entry.parse_string('@misc{\n name = {abcd}}')
def test_entry_declaration_no_key_comma(self):
with self.assertRaises(self.expr.ParseException):
self.expr.entry.parse_string('@misc{, \nname = {abcd}}')
def test_entry_declaration_no_key_keyvalue_without_space(self):
with self.assertRaises(self.expr.ParseException):
self.expr.entry.parse_string('@misc{\nname=aaa}')
def test_entry_declaration_key_with_whitespace(self):
with self.assertRaises(self.expr.ParseException):
self.expr.entry.parse_string('@misc{ xx yy, \n name = aaa}')
def test_string_declaration_after_space(self):
self.expr.string_def.parse_string(' @string{ name = {abcd}}')
def test_preamble_declaration_after_space(self):
self.expr.preamble_decl.parse_string(' @preamble{ "blah blah " }')
def test_declaration_after_space(self):
keys = []
self.expr.entry.add_parse_action(
lambda s, l, t: keys.append(t.get('Key'))
)
self.expr.main_expression.parse_string(' @journal{key, name = {abcd}}')
self.assertEqual(keys, ['key'])
def test_declaration_after_space_and_comment(self):
keys = []
self.expr.entry.add_parse_action(
lambda s, l, t: keys.append(t.get('Key'))
)
self.expr.main_expression.parse_string(
'% Implicit comment\n @article{key, name={abcd}}'
)
self.assertEqual(keys, ['key'])