blob: 9fbe92a670b2a3ee80939bd759c76d6b82213132 [file] [log] [blame]
# encoding: utf-8
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE.txt file distributed with
# this work for additional information regarding copyright ownership. The ASF
# licenses this file to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
'''Unit tests for the `profile` module.
'''
__docformat__ = 'restructuredtext'
import unittest, xml.dom.minidom
from oodt.profile import ProfileAttributes, ResourceAttributes, Profile, UnspecifiedProfileElement, RangedProfileElement,\
EnumeratedProfileElement
class ProfileAttributesTest(unittest.TestCase):
'''Unit test for the ProfileAttributes class.
'''
def testDefaults(self):
'''Test to see if default values are reasonable.
'''
pa = ProfileAttributes()
self.assertEquals('UNKNOWN', pa.id)
self.assertEquals('1.0.0', pa.version)
self.assertEquals('profile', pa.type)
self.assertEquals('active', pa.statusID)
self.assertEquals('unclassified', pa.securityType)
self.assertEquals('UNKNOWN', pa.parentID)
self.assertEquals(0, len(pa.childIDs))
self.assertEquals('UNKNOWN', pa.regAuthority)
self.assertEquals(0, len(pa.revNotes))
def testCmp(self):
'''Test comparison operators.
'''
a = ProfileAttributes('1')
b = ProfileAttributes('1')
c = ProfileAttributes('2')
self.assertEquals(a, a)
self.assertEquals(a, b)
self.assertNotEquals(a, c)
self.assert_(a <= a)
self.assert_(a <= b)
self.assert_(a <= c)
self.assert_(a < c)
def testXML(self):
'''Test XML serialization and re-composition from XML.
'''
a = ProfileAttributes('1.3.1.9', '2.0.0', 'profile', 'inactive', 'classified', '1.3.1', ['1.3.1.9.1', '1.3.1.9.2'],
'NASA', ['Updated', 'Created'])
doc = xml.dom.minidom.getDOMImplementation().createDocument(None, None, None)
node = a.toXML(doc)
b = ProfileAttributes(node=node)
self.assertEquals(a, b)
def testXMLValidity(self):
'''Test to see if all required XML elements are in there.
'''
a = ProfileAttributes('1.3.1.9', '2.0.0', 'profile', 'inactive', 'classified', '1.3.1', ['1.3.1.9.1', '1.3.1.9.2'],
'NASA', ['Updated', 'Created'])
doc = xml.dom.minidom.getDOMImplementation().createDocument(None, None, None)
node = a.toXML(doc)
self.assertEquals('profAttributes', node.nodeName)
childElements = [n.nodeName for n in node.childNodes]
self.assertEquals([u'profId', u'profVersion', u'profType', u'profStatusId', u'profSecurityType', u'profParentId',
u'profChildId', u'profChildId', u'profRegAuthority', u'profRevisionNote', u'profRevisionNote'],
childElements)
def testInstances(self):
'''Test to ensure instances don't share instance data.
'''
a = ProfileAttributes(id='1')
b = ProfileAttributes(id='2')
self.assertNotEquals(a, b)
a.childIDs.append('3')
self.assertNotEquals(a.childIDs, b.childIDs)
a.revNotes.append('Uhhhhh, spam?')
self.assertNotEquals(a.revNotes, b.revNotes)
class ResourceAttributesTest(unittest.TestCase):
'''Unit test for the ResourceAttributes class.
'''
def testDefaults(self):
'''Test if default values are reasonable.
'''
ra = ResourceAttributes()
self.assertEquals('UNKNOWN', ra.identifier)
self.assertEquals('UNKNOWN', ra.title)
self.assertEquals(0, len(ra.formats))
self.assertEquals('UNKNOWN', ra.description)
self.assertEquals(0, len(ra.creators))
self.assertEquals(0, len(ra.subjects))
self.assertEquals(0, len(ra.publishers))
self.assertEquals(0, len(ra.contributors))
self.assertEquals(0, len(ra.dates))
self.assertEquals(0, len(ra.types))
self.assertEquals(0, len(ra.sources))
self.assertEquals(0, len(ra.languages))
self.assertEquals(0, len(ra.relations))
self.assertEquals(0, len(ra.coverages))
self.assertEquals(0, len(ra.rights))
self.assertEquals(0, len(ra.contexts))
self.assertEquals('UNKNOWN', ra.aggregation)
self.assertEquals('UNKNOWN', ra.resClass)
self.assertEquals(0, len(ra.locations))
def testCmp(self):
'''Test comparison operations.
'''
a = ResourceAttributes('uri:fish', 'Fish', ['text/html'], 'A book about fish.')
b = ResourceAttributes('uri:fish', 'Fish', ['text/html'], 'A book about fish.')
c = ResourceAttributes('uri:clams', 'Clams', ['text/html'], 'A book about clams.')
self.assertEquals(a, a)
self.assertEquals(a, b)
self.assertNotEquals(a, c)
self.assert_(a <= b)
self.assert_(a >= c)
self.assert_(a > c)
self.assert_(a <= a)
def testXML(self):
'''Test XML serialization and recomposition from XML.
'''
a = ResourceAttributes('uri:fish', 'Fish', ['text/html'], 'A book about fish.')
doc = xml.dom.minidom.getDOMImplementation().createDocument(None, None, None)
node = a.toXML(doc)
b = ResourceAttributes(node=node)
self.assertEquals(a, b)
def testXMLValidity(self):
'''Test to see if all required XML elements are in there.
'''
a = ResourceAttributes('uri:anus', 'Anus', ['text/html'], 'The anus, rectum, and other parts of the bum.',
['Buttman'], ['butts', 'henies', 'booties'], ['Butts and Co Publishing'], ['Dr Eugene Bottomman, III'],
[], ['reference'], ['The Big Book of Booty'], ['en'], ['Buttholes and other oddities'],
['anatomy'], ['Cannot touch this'], ['system.buttServer'], 'granule', 'system.buttServer',
['http://butt.info/butt'])
doc = xml.dom.minidom.getDOMImplementation().createDocument(None, None, None)
node = a.toXML(doc)
childElements = [n.nodeName for n in node.childNodes]
self.assertEquals([u'Identifier', u'Title', u'Format', u'Description', u'Creator', u'Subject', u'Subject',
u'Subject', u'Publisher', u'Contributor', u'Type', u'Source', u'Language', u'Relation', u'Coverage',
u'Rights', u'resContext', u'resAggregation', u'resClass', u'resLocation'], childElements)
def testInstances(self):
'''Test to ensure instances don't share instance data.
'''
a = ResourceAttributes()
b = ResourceAttributes()
a.formats.append('text/xml')
a.creators.append('Dennis Moore')
a.subjects.append('Silliness')
a.publishers.append('BBC')
a.contributors.append('Nigel')
a.types.append('Video')
a.languages.append('en')
a.relations.append('Fawlty Towers')
a.coverages.append('1970')
a.rights.append('Abused')
a.contexts.append('humor')
a.locations.append('http://bbc.co.uk/')
self.assertNotEquals(a.formats, b.formats)
self.assertNotEquals(a.creators, b.creators)
self.assertNotEquals(a.subjects, b.subjects)
self.assertNotEquals(a.publishers, b.publishers)
self.assertNotEquals(a.contributors, b.contributors)
self.assertNotEquals(a.types, b.types)
self.assertNotEquals(a.languages, b.languages)
self.assertNotEquals(a.relations, b.relations)
self.assertNotEquals(a.coverages, b.coverages)
self.assertNotEquals(a.rights, b.rights)
self.assertNotEquals(a.contexts, b.contexts)
self.assertNotEquals(a.locations, b.locations)
class ProfileTest(unittest.TestCase):
'''Unit test for class Profile.
'''
def testCmp(self):
a = Profile()
b = Profile()
self.assertEquals(a, b)
def testXML(self):
'''Test XML serialization and recomposition from XML.
'''
a = Profile()
doc = xml.dom.minidom.getDOMImplementation().createDocument(None, None, None)
node = a.toXML(doc)
b = Profile(node=node)
self.assertEquals(a, b)
x = UnspecifiedProfileElement('tastiness', 'How tasty it was', 'char', 'subjective', ['yumminess'],
'This is highly subjective.')
y = EnumeratedProfileElement('meal', 'What meal was eaten', 'char', 'meal', ['serving'], 'Typical values',
['Breakfast', 'Brunch', 'Lunch', 'Dinner'])
z = RangedProfileElement('spicyness', 'How spicy it was', 'float', 'scovilles', ['piquancy'],
'Hotter the better, I say', 0.0, 1000000.0)
a.profElements['tastiness'], a.profElements['meal'], a.profElements['spicyness'] = x, y, z
node = a.toXML(doc)
b = Profile(node=node)
self.assertEquals(a, b)
def testInstances(self):
'''Test to ensure isntances don't share isntance data.
'''
a = Profile()
b = Profile()
self.assertEquals(a, b)
a.profElements['a'] = 'b'
self.assertNotEquals(a, b)
def test_suite():
'''Make the test suite.
'''
import doctest
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(ProfileAttributesTest))
suite.addTest(unittest.makeSuite(ResourceAttributesTest))
suite.addTest(unittest.makeSuite(ProfileTest))
return suite
if __name__ == '__main__':
unittest.main(defaultTest='test_suite')