2
from twisted.trial import unittest
3
from axiom.slotmachine import SetOnce, Attribute, SlotMachine, SchemaMachine
6
slots = ['a', 'initialized']
8
class B(SchemaMachine):
10
initialized = SetOnce()
11
other = SetOnce(default=None)
17
__slots__ = ['a', 'b',
31
class X(B, A, C, D, E):
37
class ClassWithDefault:
40
class DefaultTest(SchemaMachine, ClassWithDefault):
44
class SlotMachineTest(unittest.TestCase):
50
self.assertEquals(b.test, 2)
51
self.assertRaises(AttributeError, setattr, b, 'nottest', 'anything')
52
self.assertRaises(AttributeError, getattr, b, 'nottest')
53
self.assertEquals(b.other, None)
55
self.assertEquals(b.other, 7)
56
self.assertRaises(AttributeError, setattr, b, 'other', 'anything')
58
def testAttributesNotAllowed(self):
62
def testTrivialSubclass(self):
66
def testSetOnce(self):
69
self.assertRaises(AttributeError, setattr, b, 'initialized', 2)
70
self.assertEquals(b.initialized, 1)
73
def testClassicMixin(self):
77
self.assertRaises(AttributeError, setattr, x, 'initialized', 2)
78
self.assertRaises(AttributeError, setattr, x, 'nottest', 'anything')
79
self.assertRaises(AttributeError, getattr, x, 'nottest')
81
def testAttributesTraverseDeepHierarchy(self):
85
def testBaseDefault(self):
87
# self.failUnless('x' in dt.__slots__, 'x not in '+repr(dt.__slots__) )