Handle dateTime timestamps in RDF.Nodes
[htsworkflow.git] / htsworkflow / util / test / test_rdfhelp.py
1 import unittest
2 import types
3
4 from datetime import datetime
5
6 from htsworkflow.util.rdfhelp import \
7      blankOrUri, \
8      toTypedNode, \
9      fromTypedNode, \
10      xsdNS
11
12 try:
13   import RDF
14
15   class TestRDFHelp(unittest.TestCase):
16       def test_typed_node_boolean(self):
17           node = toTypedNode(True)
18           self.failUnlessEqual(node.literal_value['string'], u'1')
19           self.failUnlessEqual(str(node.literal_value['datatype']),
20                                'http://www.w3.org/2001/XMLSchema#boolean')
21
22       def test_typed_node_string(self):
23           node = toTypedNode('hello')
24           self.failUnlessEqual(node.literal_value['string'], u'hello')
25           self.failUnless(node.literal_value['datatype'] is None)
26
27       def test_blank_or_uri_blank(self):
28           node = blankOrUri()
29           self.failUnlessEqual(node.is_blank(), True)
30
31       def test_blank_or_uri_url(self):
32           s = 'http://google.com'
33           node = blankOrUri(s)
34           self.failUnlessEqual(node.is_resource(), True)
35           self.failUnlessEqual(str(node.uri), s)
36
37       def test_blank_or_uri_node(self):
38           s = RDF.Node(RDF.Uri('http://google.com'))
39           node = blankOrUri(s)
40           self.failUnlessEqual(node.is_resource(), True)
41           self.failUnlessEqual(node, s)
42
43       def test_unicode_node_roundtrip(self):
44           literal = u'\u5927'
45           roundtrip = fromTypedNode(toTypedNode(literal))
46           self.failUnlessEqual(roundtrip, literal)
47           self.failUnlessEqual(type(roundtrip), types.UnicodeType)
48
49       def test_datetime_no_microsecond(self):
50           dateTimeType = xsdNS['dateTime'].uri
51           short_isostamp = '2011-12-20T11:44:25'
52           short_node = RDF.Node(literal=short_isostamp,
53                                datatype=dateTimeType)
54           short_datetime = datetime(2011,12,20,11,44,25)
55
56           self.assertEqual(fromTypedNode(short_node), short_datetime)
57           self.assertEqual(toTypedNode(short_datetime), short_node)
58           self.assertEqual(fromTypedNode(toTypedNode(short_datetime)),
59                            short_datetime)
60
61       def test_datetime_with_microsecond(self):
62           dateTimeType = xsdNS['dateTime'].uri
63           long_isostamp = '2011-12-20T11:44:25.081776'
64           long_node = RDF.Node(literal=long_isostamp,
65                                datatype=dateTimeType)
66           long_datetime = datetime(2011,12,20,11,44,25,81776)
67
68           self.assertEqual(fromTypedNode(long_node), long_datetime)
69           self.assertEqual(toTypedNode(long_datetime), long_node)
70           self.assertEqual(fromTypedNode(toTypedNode(long_datetime)),
71                            long_datetime)
72
73   def suite():
74       return unittest.makeSuite(testRdfHelp, 'test')
75 except ImportError, e:
76     print "Unable to test rdfhelp"
77
78     def suite():
79         return None
80
81 if __name__ == "__main__":
82     unittest.main(defaultTest='suite')