def test_align(self): bib_database = BibDatabase() bib_database.entries = [{ 'ID': 'abc123', 'ENTRYTYPE': 'book', 'author': 'test', 'thisisaverylongkey': 'longvalue', }] writer = BibTexWriter() writer.align_values = True result = bibdeskparser.dumps(bib_database, writer) expected = """@book{abc123, author = {test}, thisisaverylongkey = {longvalue} } """ self.assertEqual(result, expected) with open( 'tests/data/multiple_entries_and_comments.bib') as bibtex_file: bib_database = bibdeskparser.load(bibtex_file) writer = BibTexWriter() writer.contents = ['entries'] writer.align_values = True result = bibdeskparser.dumps(bib_database, writer) expected = """@book{Toto3000, author = {Toto, A and Titi, B}, title = {A title} } @article{Wigner1938, author = {Wigner, E.}, doi = {10.1039/TF9383400029}, issn = {0014-7672}, journal = {Trans. Faraday Soc.}, owner = {fr}, pages = {29--41}, publisher = {The Royal Society of Chemistry}, title = {The transition state method}, volume = {34}, year = {1938} } @book{Yablon2005, author = {Yablon, A.D.}, publisher = {Springer}, title = {Optical fiber fusion slicing}, year = {2005} } """ self.assertEqual(result, expected)
def test_multiple_string_write(self): bib_database = BibDatabase() bib_database.strings['name1'] = 'value1' bib_database.strings['name2'] = 'value2' # Order is important! result = bibdeskparser.dumps(bib_database) expected = '@string{name1 = {value1}}\n\n@string{name2 = {value2}}\n\n' self.assertEqual(result, expected)
def test_content_entries_only(self): with open( 'tests/data/multiple_entries_and_comments.bib') as bibtex_file: bib_database = bibdeskparser.load(bibtex_file) writer = BibTexWriter() writer.contents = ['entries'] result = bibdeskparser.dumps(bib_database, writer) expected = """@book{Toto3000, author = {Toto, A and Titi, B}, title = {A title} } @article{Wigner1938, author = {Wigner, E.}, doi = {10.1039/TF9383400029}, issn = {0014-7672}, journal = {Trans. Faraday Soc.}, owner = {fr}, pages = {29--41}, publisher = {The Royal Society of Chemistry}, title = {The transition state method}, volume = {34}, year = {1938} } @book{Yablon2005, author = {Yablon, A.D.}, publisher = {Springer}, title = {Optical fiber fusion slicing}, year = {2005} } """ self.assertEqual(result, expected)
def test_write_common_strings(self): bib_database = BibDatabase() bib_database.load_common_strings() writer = BibTexWriter(write_common_strings=True) result = bibdeskparser.dumps(bib_database, writer=writer) with io.open('tests/data/common_strings.bib') as f: expected = f.read() self.assertEqual(result, expected)
def test_write_dependent_strings(self): bib_database = BibDatabase() bib_database.strings['title'] = 'Mr' expr = BibDataStringExpression( [BibDataString(bib_database, 'title'), 'Smith'] ) bib_database.strings['name'] = expr result = bibdeskparser.dumps(bib_database) expected = ( '@string{title = {Mr}}\n\n@string{name = title # {Smith}}\n\n' ) self.assertEqual(result, expected)
def test_content_comment_only(self): with open( 'tests/data/multiple_entries_and_comments.bib') as bibtex_file: bib_database = bibdeskparser.load(bibtex_file) writer = BibTexWriter() writer.contents = ['comments'] result = bibdeskparser.dumps(bib_database, writer) expected = """@comment{} @comment{A comment} """ self.assertEqual(result, expected)
def test_entry_separator(self): bib_database = BibDatabase() bib_database.entries = [{ 'ID': 'abc123', 'ENTRYTYPE': 'book', 'author': 'test' }] writer = BibTexWriter() writer.entry_separator = '' result = bibdeskparser.dumps(bib_database, writer) expected = """@book{abc123, author = {test} } """ self.assertEqual(result, expected)
def test_sort_missing_field(self): bib_database = BibDatabase() bib_database.entries = [ { 'ID': 'b', 'ENTRYTYPE': 'article', 'year': '2000' }, { 'ID': 'c', 'ENTRYTYPE': 'book', 'year': '2010' }, { 'ID': 'a', 'ENTRYTYPE': 'book' }, ] writer = BibTexWriter() writer.order_entries_by = ('year', ) result = bibdeskparser.dumps(bib_database, writer) expected = "@book{a\n}\n\n@article{b,\n year = {2000}\n}\n\n@book{c,\n year = {2010}\n}\n\n" self.assertEqual(result, expected)
def test_single_string_write(self): bib_database = BibDatabase() bib_database.strings['name1'] = 'value1' result = bibdeskparser.dumps(bib_database) expected = '@string{name1 = {value1}}\n\n' self.assertEqual(result, expected)
def test_multiple_string_write(self): bib_database = BibDatabase() bib_database.preambles = [' a ', 'b'] result = bibdeskparser.dumps(bib_database) expected = '@preamble{" a "}\n\n@preamble{"b"}\n\n' self.assertEqual(result, expected)
def test_sort_type_id(self): writer = BibTexWriter() writer.order_entries_by = ('ENTRYTYPE', 'ID') result = bibdeskparser.dumps(self.bib_database, writer) expected = "@article{b\n}\n\n@book{a\n}\n\n@book{c\n}\n\n" self.assertEqual(result, expected)
def test_sort_none(self): writer = BibTexWriter() writer.order_entries_by = None result = bibdeskparser.dumps(self.bib_database, writer) expected = "@article{b\n}\n\n@book{c\n}\n\n@book{a\n}\n\n" self.assertEqual(result, expected)
def test_sort_default(self): result = bibdeskparser.dumps(self.bib_database) expected = "@book{a\n}\n\n@article{b\n}\n\n@book{c\n}\n\n" self.assertEqual(result, expected)
def test_write_str(self): with open(self.input_file_path) as bibtex_file: bibtex_database = bibdeskparser.load(bibtex_file) result = bibdeskparser.dumps(bibtex_database) self.assertEqual(result, self.expected)
def test_ignore_common_strings(self): bib_database = BibDatabase() bib_database.load_common_strings() result = bibdeskparser.dumps(bib_database) self.assertEqual(result, '')
def test_ignore_common_strings_only_if_not_overloaded(self): bib_database = BibDatabase() bib_database.load_common_strings() bib_database.strings['jan'] = 'Janvier' result = bibdeskparser.dumps(bib_database) self.assertEqual(result, '@string{jan = {Janvier}}\n\n')
def test_single_preamble_write(self): bib_database = BibDatabase() bib_database.preambles = [' a '] result = bibdeskparser.dumps(bib_database) expected = '@preamble{" a "}\n\n' self.assertEqual(result, expected)