1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
# standard imports
import unittest
# bsie imports
from bsie.extractor import base
from bsie.utils import bsfs, node as _node, ns
# objects to test
from bsie.extractor.image.iptc import Iptc
## code ##
class TestIptc(unittest.TestCase):
def test_eq(self):
# identical instances are equal
self.assertEqual(Iptc(), Iptc())
self.assertEqual(hash(Iptc()), hash(Iptc()))
# comparison respects type
class Foo(): pass
self.assertNotEqual(Iptc(), Foo())
self.assertNotEqual(hash(Iptc()), hash(Foo()))
self.assertNotEqual(Iptc(), 1234)
self.assertNotEqual(hash(Iptc()), hash(1234))
self.assertNotEqual(Iptc(), None)
self.assertNotEqual(hash(Iptc()), hash(None))
def test_schema(self):
self.assertSetEqual({pred.uri for pred in Iptc().schema.predicates()}, {
ns.bsfs.Predicate,
ns.bse.tag,
ns.bst.label,
})
def test_extract(self):
ext = Iptc()
node = _node.Node(ns.bsfs.File, '') # Blank node
content = {
'Iptc.Application2.Keywords': ['hello', 'world'],
'Iptc.Application2.RecordVersion': '4',
}
# target tags
t_hello = _node.Node(ns.bsn.Tag, label='hello')
t_world = _node.Node(ns.bsn.Tag, label='world')
# invalid principals are ignored
self.assertSetEqual(set(ext.extract(node, content, {ns.bse.filename})), set())
# extract finds all relevant information
self.assertSetEqual(set(ext.extract(node, content, {ext.schema.predicate(ns.bse.tag)})), {
(node, ext.schema.predicate(ns.bse.tag), t_hello),
(node, ext.schema.predicate(ns.bse.tag), t_world),
(t_hello, ext.schema.predicate(ns.bst.label), 'hello'),
(t_world, ext.schema.predicate(ns.bst.label), 'world'),
})
# empty content is acceptable
self.assertSetEqual(set(ext.extract(node, {}, set(ext.principals))), set())
# no principals is acceptable
self.assertSetEqual(set(ext.extract(node, content, set())), set())
## main ##
if __name__ == '__main__':
unittest.main()
## EOF ##
|