log = []; c2.value; log = []; c1.value = True |
log = []; c2.value; log = []; c1.value = True |
self.failUnless(len(log)==2 and log[1]>log[0], log) |
self.failUnless(len(log)==2 and log[1]>log[0], log) |
|
|
|
def testUndoPostCommitCancelsUndoOfCommitSchedule(self): |
|
c1 = trellis.Value(False, discrete=True) |
|
def c2(): |
|
c1.value |
|
log.append(trellis.savepoint()) |
|
if len(log)==2: |
|
raise DummyError |
|
c2 = trellis.Cell(c2) |
|
log = []; c2.value; log = []; |
|
# This will raise a different error if undoing the on-commit stack |
|
# causes an underflow: |
|
self.assertRaises(DummyError, setattr, c1, 'value', True) |
|
|
|
|
|
class TestTime(unittest.TestCase): |
|
|
|
def testIndependentNextEventTime(self): |
|
# Ensure that next_event_time() never returns a *past* time |
|
t = Time() |
|
t.auto_update = False |
|
t20 = t[20] |
|
t40 = t[40] |
|
d(trellis.Cell) |
|
def check_reached(): |
|
t.reached(t20) |
|
t.reached(t40) |
|
nt = t.next_event_time(True) |
|
self.failIf(nt is not None and nt<=0) |
|
check_reached.value |
|
t.advance(25) |
|
t.advance(15) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
raise DummyError |
raise DummyError |
self.assertRaises(DummyError, checktime.get_value) |
self.assertRaises(DummyError, checktime.get_value) |
self.assertEqual(t._schedule, [t20._when, Max]) |
self.assertEqual(t._schedule, [t20._when, Max]) |
|
self.assertEqual(dict(t._events), {t20._when:log[0]}) |
|
del checktime |
|
self.failUnless(isinstance(log.pop(), trellis.Sensor)) |
self.assertEqual(dict(t._events), {}) |
self.assertEqual(dict(t._events), {}) |
self.failUnless(isinstance(log.pop(), trellis.Value)) |
|
self.assertEqual(log, []) |
self.assertEqual(log, []) |
|
|
def force_rollback(self): |
def force_rollback(self): |
|
|
|
|
|
|
|
|
|
|
def testUpdateUndo(self): |
def testUpdateUndo(self): |
t = Time() |
t = Time() |
t.auto_update = False |
t.auto_update = False |
files = [ |
files = [ |
'README.txt', 'STM-Observer.txt', 'Activity.txt', 'Collections.txt', |
'README.txt', 'STM-Observer.txt', 'Activity.txt', 'Collections.txt', |
'Internals.txt', |
'Internals.txt', |
][(sys.version<'2.4')*4:] # All but Internals use decorator syntax |
][(sys.version<'2.4')*3:] # All but Internals+Collections use decorator syntax |
try: |
try: |
from sqlalchemy.orm.attributes import ClassManager |
from sqlalchemy.orm.attributes import ClassManager |
except ImportError: |
except ImportError: |