class ElsevierPackageTests(unittest.TestCase):

    """Test extraction of Elsevier records."""

    def setUp(self):
        """Setup initial document."""
        self.els = ElsevierPackage(CONSYN=True,
                                   journal_mappings=journal_mappings)
        self.document = parse(pkg_resources.resource_filename(
            'harvestingkit.tests',
            os.path.join('data', 'sample_consyn_record.xml')
        ))

    def test_doi(self):
        """Test that doi is good."""
        self.assertEqual(self.els._get_doi(self.document), '10.1016/0370-2693(88)91603-6')

    def test_title(self):
        """Test that title is good."""
        self.assertEqual(self.els.get_title(self.document), 'Toward classification of conformal theories')

    def test_doctype(self):
        """Test that doctype is good."""
        self.assertEqual(self.els.get_doctype(self.document), 'fla')

    def test_abstract(self):
        """Test that abstract is good."""
        abstract = 'By studying the representations of the mapping class groups '\
                   'which arise in 2D conformal theories we derive some restrictions '\
                   'on the value of the conformal dimension h i of operators and the '\
                   'central charge c of the Virasoro algebra. As a simple application '\
                   'we show that when there are a finite number of operators in the '\
                   'conformal algebra, the h i and c are all rational.'
        self.assertEqual(self.els.get_abstract(self.document), abstract)

    def test_keywords(self):
        """Test that keywords are good."""
        keywords = ['Heavy quarkonia', 'Quark gluon plasma', 'Mott effect', 'X(3872)']
        self.assertEqual(self.els.get_keywords(self.document), keywords)

    def test_add_orcids(self):
        """Test that orcids are good.

        According to "Tag by Tag The Elsevier DTD 5 Family of XML DTDs" orcids will be
        distributed as an attribute in the ce:author tag.
        """
        xml_author = Element('ce:author')
        xml_author.setAttribute('orcid', '1234-5678-4321-8765')
        authors = [{}]

        # _add_orcids will alter the authors list
        self.els._add_orcids(authors, [xml_author])

        self.assertEqual(authors, [{'orcid': 'ORCID:1234-5678-4321-8765'}])

    def test_authors(self):
        """Test that authors are good."""
        authors = [{'affiliation': ['Lyman Laboratory of Physics, Harvard University, Cambridge, MA 02138, USA'], 'surname': 'Vafa', 'given_name': 'Cumrun', 'orcid': 'ORCID:1234-5678-4321-8765'}]
        self.assertEqual(self.els.get_authors(self.document), authors)

    def test_copyright(self):
        """Test that copyright is good."""
        self.assertEqual(self.els.get_copyright(self.document), 'Copyright unknown. Published by Elsevier B.V.')

    def test_publication_information(self):
        """Test that pubinfo is good."""
        publication_information = ('Phys.Lett.',
                                   '0370-2693',
                                   'B206',
                                   '3',
                                   '421',
                                   '426',
                                   '1988',
                                   '1988-05-26',
                                   '10.1016/0370-2693(88)91603-6')
        self.assertEqual(self.els.get_publication_information(self.document), publication_information)

    def test_publication_date_oa(self):
        """Test that date is good from openAccessEffective."""
        data = """
        <doc xmlns:oa="http://vtw.elsevier.com/data/ns/properties/OpenAccess-1/">
        <oa:openAccessInformation>
          <oa:openAccessStatus xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            http://vtw.elsevier.com/data/voc/oa/OpenAccessStatus#Full
          </oa:openAccessStatus>
          <oa:openAccessEffective xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2014-11-11T08:38:44Z</oa:openAccessEffective>
          <oa:sponsor xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <oa:sponsorName>SCOAP&#xB3; - Sponsoring Consortium for Open Access Publishing in Particle Physics</oa:sponsorName>
            <oa:sponsorType>http://vtw.elsevier.com/data/voc/oa/SponsorType#FundingBody</oa:sponsorType>
          </oa:sponsor>
          <oa:userLicense xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">http://creativecommons.org/licenses/by/3.0/</oa:userLicense>
        </oa:openAccessInformation>
        </doc>"""
        doc = parseString(data)
        self.assertEqual(
            self.els.get_publication_date(doc),
            "2014-11-11"
        )

    def test_publication_date_cover_display(self):
        """Test that date is good from coverDisplayDate."""
        data = """
        <doc xmlns:prism="http://vtw.elsevier.com/data/ns/properties/OpenAccess-1/">
          <prism:coverDisplayDate>December 2014</prism:coverDisplayDate>
        </doc>"""
        doc = parseString(data)
        self.assertEqual(
            self.els.get_publication_date(doc),
            "2014-12"
        )

    def test_publication_date_cover_display_full(self):
        """Test that date is good from coverDisplayDate."""
        data = """
        <doc xmlns:prism="http://vtw.elsevier.com/data/ns/properties/OpenAccess-1/">
          <prism:coverDisplayDate>1 December 2014</prism:coverDisplayDate>
        </doc>"""
        doc = parseString(data)
        self.assertEqual(
            self.els.get_publication_date(doc),
            "2014-12-01"
        )

    def test_publication_date_cover(self):
        """Test that date is good."""
        data = """
        <doc xmlns:prism="http://vtw.elsevier.com/data/ns/properties/OpenAccess-1/">
          <prism:coverDisplayDate>April 2011</prism:coverDisplayDate>
          <prism:coverDate>2011-04-01</prism:coverDate>
        </doc>"""
        doc = parseString(data)
        self.assertEqual(
            self.els.get_publication_date(doc),
            "2011-04-01"
        )

    def test_references(self):
        """Test that references is good."""
        references = [('[1]', ['Belavin, A.A.', 'Polyakov, A.M.', 'Zamolodchikov, A.B.'], '', 'Nucl. Phys. B 241 1984', '333', '', '241', '1984', [], None, True, '', 'Nucl. Phys. B', '', [], '', []),
                      ('[2]', ['Friedan, D.', 'Qiu, Z.', 'Shenker, S.H.'], '', 'Phys. Rev. Lett. 52 1984', '1575', '', '52', '1984', [], None, True, '', 'Phys. Rev. Lett.', '', [], '', []),
                      ('[3]', ['Cardy, J.L.'], '', 'Nucl. Phys. B 270 1986', '186', '', '270', '1986', [], None, True, '[FS16]', 'Nucl. Phys. B', '', [], '', []),
                      ('[3]', ['Capelli, A.', 'Itzykson, C.', 'Zuber, J.-B.'], '', 'Nucl. Phys. B 280 1987', '445', '', '280', '1987', [], None, True, '[FS 18]', 'Nucl. Phys. B', '', [], '', []),
                      ('[3]', ['Capelli, A.', 'Itzykson, C.', 'Zuber, J.-B.'], '', 'Commun. Math. Phys. 113 1987', '1', '', '113', '1987', [], None, True, '', 'Commun. Math. Phys.', '', [], '', []),
                      ('[3]', ['Gepner, D.'], '', 'Nucl. Phys. B 287 1987', '111', '', '287', '1987', [], None, True, '', 'Nucl. Phys. B', '', [], '', []),
                      ('[4]', [], '', '', '', '', '', '', 'G. Anderson and G. Moore, IAS preprint IASSNS-HEP-87/69.', None, [], '', '', '', [], '', []),
                      ('[5]', ['Friedan, D.', 'Shenker, S.'], '', 'Phys. Lett. B 175 1986', '287', '', '175', '1986', [], None, True, '', 'Phys. Lett. B', '', [], '', []),
                      ('[5]', ['Friedan, D.', 'Shenker, S.'], '', 'Nucl. Phys. B 281 1987', '509', '', '281', '1987', [], None, True, '', 'Nucl. Phys. B', '', [], '', []),
                      ('[6]', [], '', '', '', '', '', '', 'E. Martinec and S. Shenker, unpublished.', None, [], '', '', '', [], '', []),
                      ('[7]', ['Vafa, C.'], '', 'Phys. Lett. B 199 1987', '195', '', '199', '1987', [], None, True, '', 'Phys. Lett. B', '', [], '', []),
                      ('[8]', ['Harer, J.'], '', 'Inv. Math. 72 1983', '221', '', '72', '1983', [], None, True, '', 'Inv. Math.', '', [], '', []),
                      ('[9]', ['Tsuchiya, A.', 'Kanie, Y.'], '', 'Lett. Math. Phys. 13 1987', '303', '', '13', '1987', [], None, True, '', 'Lett. Math. Phys.', '', [], '', []),
                      ('[10]', [], '', '', '', '', '', '', 'E. Verlinde, to be published.', None, [], '', '', '', [], '', []),
                      ('[11]', ['Dehn, M.'], '', 'Acta Math. 69 1938', '135', '', '69', '1938', [], None, True, '', 'Acta Math.', '', [], '', []),
                      ('[12]', [], '', '', '', '', '', '', 'D. Friedan and S. Shenker, unpublished.', None, [], '', '', '', [], '', []),
                      ('[13]', [], '', '', '', '', '', '', 'J. Harvey, G. Moore, and C. Vafa, Nucl. Phys. B, to be published', None, [], '', '', '', [], '', []),
                      ('[14]', [], '', '', '', '', '', '', 'D. Kastor, E. Martinec and Z. Qiu, E. Fermi Institute preprint EFI-87-58.', None, [], '', '', '', [], '', []),
                      ('[15]', ['Adeva, B.'], '', 'Phys. Rev. D 58 1998', '112001', '', '58', '1998', [], None, True, '', 'Phys. Rev. D', '', [], '', [])]
        for ref in self.els.get_references(self.document):
            self.assertTrue(ref in references)

    def test_get_record(self):
        """Test that the whole record is correct."""
        source_file = pkg_resources.resource_filename(
            'harvestingkit.tests',
            os.path.join('data', 'sample_consyn_record.xml')
        )
        marc_file = pkg_resources.resource_filename(
            'harvestingkit.tests',
            os.path.join('data', 'sample_consyn_output.xml')
        )
        xml = self.els.get_record(source_file, test=True)
        with open(marc_file) as marc:
            result = marc.read()
        self.assertEqual(xml.strip(), result.strip())
示例#2
0
class ElsevierPackageTests(unittest.TestCase):
    """Test extraction of Elsevier records."""
    def setUp(self):
        """Setup initial document."""
        self.els = ElsevierPackage(CONSYN=True,
                                   journal_mappings=journal_mappings)
        self.document = parse(
            pkg_resources.resource_filename(
                'harvestingkit.tests',
                os.path.join('data', 'sample_consyn_record.xml')))

    def test_doi(self):
        """Test that doi is good."""
        self.assertEqual(self.els._get_doi(self.document),
                         '10.1016/0370-2693(88)91603-6')

    def test_title(self):
        """Test that title is good."""
        self.assertEqual(self.els.get_title(self.document),
                         'Toward classification of conformal theories')

    def test_doctype(self):
        """Test that doctype is good."""
        self.assertEqual(self.els.get_doctype(self.document), 'fla')

    def test_abstract(self):
        """Test that abstract is good."""
        abstract = 'By studying the representations of the mapping class groups '\
                   'which arise in 2D conformal theories we derive some restrictions '\
                   'on the value of the conformal dimension h i of operators and the '\
                   'central charge c of the Virasoro algebra. As a simple application '\
                   'we show that when there are a finite number of operators in the '\
                   'conformal algebra, the h i and c are all rational.'
        self.assertEqual(self.els.get_abstract(self.document), abstract)

    def test_keywords(self):
        """Test that keywords are good."""
        keywords = [
            'Heavy quarkonia', 'Quark gluon plasma', 'Mott effect', 'X(3872)'
        ]
        self.assertEqual(self.els.get_keywords(self.document), keywords)

    def test_add_orcids(self):
        """Test that orcids are good.

        According to "Tag by Tag The Elsevier DTD 5 Family of XML DTDs" orcids will be
        distributed as an attribute in the ce:author tag.
        """
        xml_author = Element('ce:author')
        xml_author.setAttribute('orcid', '1234-5678-4321-8765')
        authors = [{}]

        # _add_orcids will alter the authors list
        self.els._add_orcids(authors, [xml_author])

        self.assertEqual(authors, [{'orcid': 'ORCID:1234-5678-4321-8765'}])

    def test_authors(self):
        """Test that authors are good."""
        authors = [{
            'affiliation': [
                'Lyman Laboratory of Physics, Harvard University, Cambridge, MA 02138, USA'
            ],
            'surname':
            'Vafa',
            'given_name':
            'Cumrun',
            'orcid':
            'ORCID:1234-5678-4321-8765'
        }]
        self.assertEqual(self.els.get_authors(self.document), authors)

    def test_copyright(self):
        """Test that copyright is good."""
        self.assertEqual(self.els.get_copyright(self.document),
                         'Copyright unknown. Published by Elsevier B.V.')

    def test_publication_information(self):
        """Test that pubinfo is good."""
        publication_information = ('Phys.Lett.', '0370-2693', 'B206', '3',
                                   '421', '426', '1988', '1988-05-26',
                                   '10.1016/0370-2693(88)91603-6')
        self.assertEqual(self.els.get_publication_information(self.document),
                         publication_information)

    def test_publication_date_oa(self):
        """Test that date is good from openAccessEffective."""
        data = """
        <doc xmlns:oa="http://vtw.elsevier.com/data/ns/properties/OpenAccess-1/">
        <oa:openAccessInformation>
          <oa:openAccessStatus xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            http://vtw.elsevier.com/data/voc/oa/OpenAccessStatus#Full
          </oa:openAccessStatus>
          <oa:openAccessEffective xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2014-11-11T08:38:44Z</oa:openAccessEffective>
          <oa:sponsor xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <oa:sponsorName>SCOAP&#xB3; - Sponsoring Consortium for Open Access Publishing in Particle Physics</oa:sponsorName>
            <oa:sponsorType>http://vtw.elsevier.com/data/voc/oa/SponsorType#FundingBody</oa:sponsorType>
          </oa:sponsor>
          <oa:userLicense xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">http://creativecommons.org/licenses/by/3.0/</oa:userLicense>
        </oa:openAccessInformation>
        </doc>"""
        doc = parseString(data)
        self.assertEqual(self.els.get_publication_date(doc), "2014-11-11")

    def test_publication_date_cover_display(self):
        """Test that date is good from coverDisplayDate."""
        data = """
        <doc xmlns:prism="http://vtw.elsevier.com/data/ns/properties/OpenAccess-1/">
          <prism:coverDisplayDate>December 2014</prism:coverDisplayDate>
        </doc>"""
        doc = parseString(data)
        self.assertEqual(self.els.get_publication_date(doc), "2014-12")

    def test_publication_date_cover_display_full(self):
        """Test that date is good from coverDisplayDate."""
        data = """
        <doc xmlns:prism="http://vtw.elsevier.com/data/ns/properties/OpenAccess-1/">
          <prism:coverDisplayDate>1 December 2014</prism:coverDisplayDate>
        </doc>"""
        doc = parseString(data)
        self.assertEqual(self.els.get_publication_date(doc), "2014-12-01")

    def test_publication_date_cover(self):
        """Test that date is good."""
        data = """
        <doc xmlns:prism="http://vtw.elsevier.com/data/ns/properties/OpenAccess-1/">
          <prism:coverDisplayDate>April 2011</prism:coverDisplayDate>
          <prism:coverDate>2011-04-01</prism:coverDate>
        </doc>"""
        doc = parseString(data)
        self.assertEqual(self.els.get_publication_date(doc), "2011-04-01")

    def test_references(self):
        """Test that references is good."""
        references = [
            ('[1]', ['Belavin, A.A.', 'Polyakov, A.M.', 'Zamolodchikov, A.B.'
                     ], '', 'Nucl. Phys. B 241 1984', '333', '', '241', '1984',
             [], None, True, '', 'Nucl. Phys. B', '', [], '', []),
            ('[2]', ['Friedan, D.', 'Qiu, Z.', 'Shenker, S.H.'
                     ], '', 'Phys. Rev. Lett. 52 1984', '1575', '', '52',
             '1984', [], None, True, '', 'Phys. Rev. Lett.', '', [], '', []),
            ('[3]', ['Cardy, J.L.'
                     ], '', 'Nucl. Phys. B 270 1986', '186', '', '270', '1986',
             [], None, True, '[FS16]', 'Nucl. Phys. B', '', [], '', []),
            ('[3]', ['Capelli, A.', 'Itzykson, C.', 'Zuber, J.-B.'
                     ], '', 'Nucl. Phys. B 280 1987', '445', '', '280', '1987',
             [], None, True, '[FS 18]', 'Nucl. Phys. B', '', [], '', []),
            ('[3]', ['Capelli, A.', 'Itzykson, C.', 'Zuber, J.-B.'], '',
             'Commun. Math. Phys. 113 1987', '1', '', '113', '1987', [], None,
             True, '', 'Commun. Math. Phys.', '', [], '', []),
            ('[3]', ['Gepner, D.'
                     ], '', 'Nucl. Phys. B 287 1987', '111', '', '287', '1987',
             [], None, True, '', 'Nucl. Phys. B', '', [], '', []),
            ('[4]', [], '', '', '', '', '', '',
             'G. Anderson and G. Moore, IAS preprint IASSNS-HEP-87/69.', None,
             [], '', '', '', [], '', []),
            ('[5]', ['Friedan, D.', 'Shenker, S.'
                     ], '', 'Phys. Lett. B 175 1986', '287', '', '175', '1986',
             [], None, True, '', 'Phys. Lett. B', '', [], '', []),
            ('[5]', ['Friedan, D.', 'Shenker, S.'
                     ], '', 'Nucl. Phys. B 281 1987', '509', '', '281', '1987',
             [], None, True, '', 'Nucl. Phys. B', '', [], '', []),
            ('[6]', [], '', '', '', '', '', '',
             'E. Martinec and S. Shenker, unpublished.', None, [], '', '', '',
             [], '', []),
            ('[7]', ['Vafa, C.'
                     ], '', 'Phys. Lett. B 199 1987', '195', '', '199', '1987',
             [], None, True, '', 'Phys. Lett. B', '', [], '', []),
            ('[8]', ['Harer, J.'], '', 'Inv. Math. 72 1983', '221', '', '72',
             '1983', [], None, True, '', 'Inv. Math.', '', [], '', []),
            ('[9]', ['Tsuchiya, A.', 'Kanie, Y.'
                     ], '', 'Lett. Math. Phys. 13 1987', '303', '', '13',
             '1987', [], None, True, '', 'Lett. Math. Phys.', '', [], '', []),
            ('[10]', [], '', '', '', '', '', '',
             'E. Verlinde, to be published.', None, [], '', '', '', [], '',
             []),
            ('[11]', ['Dehn, M.'], '', 'Acta Math. 69 1938', '135', '', '69',
             '1938', [], None, True, '', 'Acta Math.', '', [], '', []),
            ('[12]', [], '', '', '', '', '', '',
             'D. Friedan and S. Shenker, unpublished.', None, [], '', '', '',
             [], '', []),
            ('[13]', [], '', '', '', '', '', '',
             'J. Harvey, G. Moore, and C. Vafa, Nucl. Phys. B, to be published',
             None, [], '', '', '', [], '', []),
            ('[14]', [], '', '', '', '', '', '',
             'D. Kastor, E. Martinec and Z. Qiu, E. Fermi Institute preprint EFI-87-58.',
             None, [], '', '', '', [], '', []),
            ('[15]', ['Adeva, B.'], '', 'Phys. Rev. D 58 1998', '112001', '',
             '58', '1998', [], None, True, '', 'Phys. Rev. D', '', [], '', [])
        ]
        for ref in self.els.get_references(self.document):
            self.assertTrue(ref in references)

    def test_get_record(self):
        """Test that the whole record is correct."""
        source_file = pkg_resources.resource_filename(
            'harvestingkit.tests',
            os.path.join('data', 'sample_consyn_record.xml'))
        marc_file = pkg_resources.resource_filename(
            'harvestingkit.tests',
            os.path.join('data', 'sample_consyn_output.xml'))
        xml = self.els.get_record(source_file, test=True)
        with open(marc_file) as marc:
            result = marc.read()
        self.assertEqual(xml.strip(), result.strip())