Changeset 48
- Timestamp:
- 15/09/05 10:01:39 (3 years ago)
- Files:
-
- trunk/airspeed.py (modified) (2 diffs)
- trunk/airspeed_test.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/airspeed.py
r47 r48 319 319 class Value(_Element): 320 320 def parse(self): 321 self.expression = self.next_element((SimpleReference, IntegerLiteral, StringLiteral, InterpolatedStringLiteral, ArrayLiteral, Condition ))321 self.expression = self.next_element((SimpleReference, IntegerLiteral, StringLiteral, InterpolatedStringLiteral, ArrayLiteral, Condition, UnaryOperatorValue)) 322 322 323 323 def calculate(self, namespace, loader): … … 449 449 450 450 451 class UnaryOperatorValue(_Element): 452 UNARY_OP = re.compile(r'\s*(!)\s*(.*)$', re.S) 453 OPERATORS = {'!': operator.__not__} 454 def parse(self): 455 op_string, = self.identity_match(self.UNARY_OP) 456 self.value = self.next_element(Value) 457 self.op = self.OPERATORS[op_string] 458 459 def calculate(self, namespace, loader): 460 return self.op(self.value.calculate(namespace, loader)) 461 462 451 463 class Condition(_Element): 452 464 START = re.compile(r'\(\s*(.*)$', re.S) trunk/airspeed_test.py
r47 r48 332 332 self.assertEquals('', template.merge({'value': False})) 333 333 self.assertEquals('yes', template.merge({'value': True})) 334 335 def test_logical_negation_operator(self): 336 template = airspeed.Template('#if ( !$value )yes#end') 337 self.assertEquals('yes', template.merge({'value': False})) 338 self.assertEquals('', template.merge({'value': True})) 339 340 def test_compound_binary_and_unary_operators(self): 341 template = airspeed.Template('#if ( !$value1 && !$value2 )yes#end') 342 self.assertEquals('', template.merge({'value1': False, 'value2': True})) 343 self.assertEquals('', template.merge({'value1': True, 'value2': False})) 344 self.assertEquals('', template.merge({'value1': True, 'value2': True})) 345 self.assertEquals('yes', template.merge({'value1': False, 'value2': False})) 334 346 335 347 def test_cannot_define_macro_to_override_reserved_statements(self):
