def setUp(self):
        self.parser = BibtexParser()
        self.book_bibtex = """@book{Anderson2007,
    title = {{What is Web 2.0?: ideas, technologies and implications for education}},
    publisher = {Citeseer},
    year = {2007},
    author = {Andersen, P.},
    booktitle = {Technology},
    file = {:media/datapart/Dokumente/eBooks/master\_thesis/Articles/10.1.1.108.9995.pdf:pdf},
    keywords = {Web 2.0},
    url = {http://www.jisc.ac.uk/media/documents/techwatch/tsw0701b.pdf}
}"""
        self.book_dict = {'Anderson2007': ['book', {
            'title': 'What is Web 2.0?: ideas, technologies and implications for education',
            'publisher': 'Citeseer',
            'year': '2007',
            'author': 'Andersen, P.',
            'booktitle': 'Technology',
            'file': ':media/datapart/Dokumente/eBooks/master\_thesis/Articles/10.1.1.108.9995.pdf:pdf',
            'keywords': 'Web 2.0',
            'url': 'http://www.jisc.ac.uk/media/documents/techwatch/tsw0701b.pdf'
            }]
            }
class BibTeXParserTests(unittest.TestCase):
    """Class to store BibTeXParser unittests"""

    def setUp(self):
        self.parser = BibtexParser()
        self.book_bibtex = """@book{Anderson2007,
    title = {{What is Web 2.0?: ideas, technologies and implications for education}},
    publisher = {Citeseer},
    year = {2007},
    author = {Andersen, P.},
    booktitle = {Technology},
    file = {:media/datapart/Dokumente/eBooks/master\_thesis/Articles/10.1.1.108.9995.pdf:pdf},
    keywords = {Web 2.0},
    url = {http://www.jisc.ac.uk/media/documents/techwatch/tsw0701b.pdf}
}"""
        self.book_dict = {'Anderson2007': ['book', {
            'title': 'What is Web 2.0?: ideas, technologies and implications for education',
            'publisher': 'Citeseer',
            'year': '2007',
            'author': 'Andersen, P.',
            'booktitle': 'Technology',
            'file': ':media/datapart/Dokumente/eBooks/master\_thesis/Articles/10.1.1.108.9995.pdf:pdf',
            'keywords': 'Web 2.0',
            'url': 'http://www.jisc.ac.uk/media/documents/techwatch/tsw0701b.pdf'
            }]
            }

    def test_empty_bibtex_entry(self):
        """Parsing nothing will return nothing."""
        self.assertRaises(ValueError, self.parser.parse_to_bibtex, "")

    def test_entry_without_attribute(self):
        """Parsing only the key."""
        bibtex = "@book{none}"
        parsed = self.parser.parse_to_bibtex(bibtex)
        self.assertEqual({'none': ['book', {}]}, parsed)

    def test_parse_single_field(self):
        """Parsing a single key = value pair."""
        field = "name = {value}"
        parsed = self.parser.field.parseString(field).asList()
        self.assertEqual(['name', 'value'], parsed)

    def test_entry_with_single_attribute_in_quotes(self):
        """Parsing an attribute enclosed in quotes."""
        bibtex = """@book{key,
                    value = "test"
                    }"""
        parsed = self.parser.parse_to_bibtex(bibtex)
        result_dict = {'key': ['book', {'value': 'test'}]}
        self.assertEqual(result_dict, parsed)

    def test_entry_with_single_attribute_in_braces(self):
        """Parsing an attribute enclosed in braces."""
        bibtex = """@book{key,
                    value = {test}
                    }"""
        parsed = self.parser.parse_to_bibtex(bibtex)
        result_dict = {'key': ['book', {'value': 'test'}]}
        self.assertEqual(result_dict, parsed)

    def test_entry_with_multiple_attributes(self):
        """Multiple attributes with equal delimeters."""
        bibtex = """@book{key,
                          value = {test},
                          value2 = {test2}
                          }"""
        parsed = self.parser.parse_to_bibtex(bibtex)
        result_dict = {'key': ['book', {'value': 'test', 'value2': 'test2'}]}
        self.assertEqual(result_dict, parsed)

    def test_braces_within_delimeters(self):
        """docstring for test_braces_within_delimeters"""
        bibtex = """@book{key,
                          value = {t{e}st},
                          value2 = "t{e}st2"
                          }"""
        parsed = self.parser.parse_to_bibtex(bibtex)
        result_dict = {'key': ['book', {'value': 't{e}st', 'value2': 't{e}st2'}]}
        self.assertEqual(result_dict, parsed)

    def test_number_can_be_unquoted(self):
        """docstring for test_number_can_be_unquoted"""
        bibtex = """@book{key,
                          value2 = 2008
                          }"""
        parsed = self.parser.parse_to_bibtex(bibtex)
        result_dict = {'key': ['book', {'value2': '2008'}]}
        self.assertEqual(result_dict, parsed)

    def test_delimeters_can_not_be_mixed(self):
        """docstring for test_delimeters_can_not_be_mixed"""
        bibtex = """@book{key,
                    value = "test},
                    value2 = {test2"
                    }"""
        self.assertRaises(ParseException, self.parser.parse_to_bibtex, bibtex)

    def test_complex_book_insertion(self):
        parsed = self.parser.parse_to_bibtex(self.book_bibtex)
        print parsed
        self.assertEqual(self.book_dict, parsed)

    def text_parse_double_braced_title(self):
        """docstring for text_parse_double_braced_title"""
        bibtex = """@book{key,
                    title = {{test}},
                    }"""
        value = self.parser.parse_to_bibtex(bibtex)
        result_dict = {'key': ['book', {'title': 'test'}]}
        self.assertEqual(result_dict, value)