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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
from chrysacase import ChrysalideTestCase
from gi.repository import GObject
from pychrysalide.glibext import SingletonCandidate, SingletonFactory
class TestSingleton(ChrysalideTestCase):
"""Test cases for pychrysalide.glibext.SingletonFactory."""
def testSingletonCreation(self):
"""Create singleton objects."""
with self.assertRaisesRegex(NotImplementedError, 'SingletonCandidate can not be constructed'):
sc = SingletonCandidate()
class NewSingletonImplem(GObject.Object, SingletonCandidate):
pass
nsi = NewSingletonImplem()
self.assertIsNotNone(nsi)
def testFactoryCreation(self):
"""Create singleton factories."""
sf = SingletonFactory()
self.assertIsNotNone(sf)
class MyFactory(SingletonFactory):
pass
msf = MyFactory()
self.assertIsNotNone(msf)
def testSingletonMethods(self):
"""Test the singleton methods."""
class IntegerCacheImplem(GObject.Object, SingletonCandidate):
def __init__(self, val):
super().__init__()
self._val = val
def __eq__(self, other):
return self._val == other._val
def __hash__(self):
return hash('common-key')
val_0 = IntegerCacheImplem(0)
val_0_bis = IntegerCacheImplem(0)
val_1 = IntegerCacheImplem(1)
self.assertEqual(hash(val_0), hash(val_0_bis))
self.assertEqual(hash(val_0), hash(val_1))
self.assertEqual(val_0.hash(), val_0_bis.hash())
self.assertEqual(val_0.hash(), val_1.hash())
self.assertTrue(val_0 == val_0_bis)
self.assertFalse(val_0 == val_1)
def testSingletonFootprint(self):
"""Check for singleton memory footprint."""
class IntegerCacheImplem(GObject.Object, SingletonCandidate):
def __init__(self, val):
super().__init__()
self._val = val
def __eq__(self, other):
return self._val == other._val
def __hash__(self):
return hash('common-key')
val_0 = IntegerCacheImplem(0)
val_0_bis = IntegerCacheImplem(0)
val_1 = IntegerCacheImplem(1)
sf = SingletonFactory()
obj = sf.get_instance(val_0)
self.assertTrue(obj is val_0)
obj = sf.get_instance(val_0_bis)
self.assertTrue(obj is val_0)
obj = sf.get_instance(val_1)
self.assertTrue(obj is val_1)
|