if rule.rule_passed(): # a rule passed, move on
self.rules.remove(rule)
return len(self.rules) == 0
- assert False, 'No assertion rules were satisfied for statement'
+ return False
+
+ def rule_passed(self):
+ return self.is_consumed()
def consume_final(self):
return len(self.rules) == 0
+class Or(AllOf):
+ def __init__(self, *rules):
+ self.rules = set(rules)
+ self._consume_final = False
+
+ def is_consumed(self):
+ if not self.rules:
+ return True
+ for rule in list(self.rules):
+ if rule.rule_passed(): # a rule passed
+ self._consume_final = True
+ return True
+ return False
+
+ def consume_final(self):
+ assert self._consume_final, "Unsatisified rules remain"
def _process_engine_statement(query, context):
if util.jython:
create_session, unitofwork, attributes,\
Session, class_mapper, sync, exc as orm_exc
-from sqlalchemy.testing.assertsql import AllOf, CompiledSQL
+from sqlalchemy.testing.assertsql import AllOf, CompiledSQL, Or
class AssertsUOW(object):
def _get_test_uow(self, session):
"WHERE nodes.id = :param_1",
lambda ctx: {'param_1': c2id}
),
- CompiledSQL(
- "DELETE FROM nodes WHERE nodes.id = :id",
- lambda ctx: [{'id': c1id}, {'id': c2id}]
- ),
- CompiledSQL(
- "DELETE FROM nodes WHERE nodes.id = :id",
- lambda ctx: {'id': pid}
- ),
+ Or(
+ AllOf(
+ CompiledSQL(
+ "DELETE FROM nodes WHERE nodes.id = :id",
+ lambda ctx: [{'id': c1id}, {'id': c2id}]
+ ),
+ CompiledSQL(
+ "DELETE FROM nodes WHERE nodes.id = :id",
+ lambda ctx: {'id': pid}
+ ),
+ ),
+ CompiledSQL(
+ "DELETE FROM nodes WHERE nodes.id = :id",
+ lambda ctx: [{'id': c1id}, {'id': c2id}, {'id': pid}]
+ ),
+
+ )
),
)