1 import copy
2 from itertools import imap
3
4 from nose.tools import *
5
6 from grassyknoll.tests import *
7 from grassyknoll.collection.Collection import *
8
14
16 ids=CollectionIds(imap(unicode, xrange(num)), {'pants':34})
17 assert len(ids) == num
18 for i, uid in enumerate(ids):
19 assert unicode(i) == uid
20 assert isinstance(uid, unicode)
21
22 assert hasattr(ids, 'metadata')
23 assert ids.metadata == {'pants':34}
24
25 ids2=copy.copy(ids)
26
27 assert isinstance(ids2, CollectionIds)
28 assert ids is not ids2
29 assert ids == ids2
30 assert ids.metadata is not ids2.metadata
31 assert ids.metadata == ids2.metadata
32
33 dump=ids.dump()
34 assert isinstance(dump, dict)
35 assert_sorted_equals(dump, ['metadata', 'ids'])
36 assert dump['metadata'] is not ids.metadata
37 assert dump['ids'] == ids
38
39
41 result=CollectionResult(pants=42, shirt=36, __id__=u'clothes')
42
43 result2=copy.copy(result)
44 assert result is not result2
45 assert result == result2
46
47 assert result['pants'] == 42
48 del result['pants']
49 assert 'pants' not in result
50
51 assert not hasattr(result, 'shirt')
52 assert_raises(AttributeError, lambda: result.shirt)
53 assert_raises(AttributeError, delattr, result, 'shirt')
54 assert 'shirt' in result
55
56 assert 'id' not in result
57 assert hasattr(result, 'id')
58 assert result.id == u'clothes'
59 assert result['__id__'] == u'clothes'
60
61 del result.id
62 assert not hasattr(result, 'id')
63 assert '__id__' not in result
64
65 result['__belt__']=u'large'
66 assert result.belt == u'large'
67
68 assert result.items
69 assert_raises(AttributeError, setattr, result, 'items', 42)
70 assert_raises(AttributeError, delattr, result, 'items')
71 assert result.items
72
73 dump=result.dump()
74 assert dump is not result
75 assert dump == result
76
78 doc=CollectionDocument(pants=42, shirt=36, norman='viking')
79
80 doc2=copy.copy(doc)
81 assert doc is not doc2
82 assert doc == doc2
83 assert doc2.norman == 'viking'
84
85 assert doc['pants'] == 42
86 del doc['pants']
87 assert 'pants' not in doc
88
89 assert not hasattr(doc, 'shirt')
90 assert_raises(AttributeError, lambda: doc.shirt)
91 assert_raises(AttributeError, delattr, doc, 'shirt')
92 assert 'shirt' in doc
93
94 assert doc.norman == 'viking'
95 assert 'norman' not in doc
96
97 doc['__belt__']=u'large'
98 assert doc.belt == u'large'
99
100 assert 'id' not in doc
101 assert not hasattr(doc, 'id')
102
103 doc.id=u'clothes'
104 assert doc.id == u'clothes'
105 assert doc['__id__'] == u'clothes'
106
107 del doc.id
108 assert not hasattr(doc, 'id')
109 assert '__id__' not in doc
110
111 assert doc.items
112 assert_raises(AttributeError, setattr, doc, 'items', 42)
113 assert_raises(AttributeError, delattr, doc, 'items')
114 assert doc.items
115
116
118 yield __test_result_set, ()
119 yield __test_result_set, [CollectionResult(height=42, width=34, color='blue', __id__=u'pants')]
120 yield __test_result_set, [CollectionResult(height=42, width=34, color='blue', __id__=u'pants'),
121 CollectionResult(height=56, width=101, color='pink', __id__=u'shirt')]
122
123
125 rset=CollectionResultSet(items)
126 assert len(rset) == len(items)
127 for r1, r2 in zip(items, rset):
128 assert r1 is r2
129
130 assert hasattr(rset, 'metadata')
131
132 rset2=copy.copy(rset)
133 assert isinstance(rset2, CollectionResultSet)
134 assert rset2 is not rset
135 assert rset2 == rset
136 assert rset2.metadata is not rset.metadata
137 assert rset2.metadata == rset.metadata
138
139 dump=rset.dump()
140 assert isinstance(dump, dict)
141 assert_sorted_equals(dump, ['metadata', 'results'])
142 assert dump['metadata'] is not rset.metadata
143 assert dump['results'] == rset
144