- Timestamp:
- 18/08/04 18:39:45 (8 years ago)
- Location:
- trunk
- Files:
-
- 2 modified
-
airspeed.py (modified) (2 diffs)
-
airspeed_test.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/airspeed.py
r21 r22 3 3 import re 4 4 import cStringIO as StringIO 5 import operator 5 6 6 7 __all__ = ['TemplateSyntaxError', 'Template'] … … 275 276 276 277 278 class BinaryOperator(_Element): 279 PATTERN = re.compile(r'\s*(>=|<=|<|==|!=|>)\s*(.*)$', re.S) 280 def parse(self): 281 self.operator, = self.identity_match(self.PATTERN) 282 op = operator 283 self.operator = {'>': op.__gt__, '>=': op.__ge__, 284 '<': op.__lt__, '<=': op.__le__, 285 '==': op.__eq__, '!=': op.__ne__}[self.operator] 286 287 def apply_to(self, value1, value2): 288 return self.operator(value1, value2) 289 290 277 291 class Condition(_Element): 278 292 OPENING_PATTERN = re.compile(r'\(\s*(.*)$', re.S) 279 293 CLOSING_PATTERN = re.compile(r'\s*\)(.*)$', re.S) 294 binary_operator = None 295 value2 = None 280 296 def parse(self): 281 297 self.require_match(self.OPENING_PATTERN, '(') 282 self.expression = self.next_element(Value) 283 self.require_match(self.CLOSING_PATTERN, ')') 284 self.calculate = self.expression.calculate 298 self.value = self.next_element(Value) 299 try: 300 self.binary_operator = self.next_element(BinaryOperator) 301 self.value2 = self.require_next_element(Value, 'value') 302 except NoMatch: 303 pass 304 self.require_match(self.CLOSING_PATTERN, ') or >') 305 306 def calculate(self, namespace): 307 if self.binary_operator is None: 308 return self.value.calculate(namespace) 309 else: 310 value1, value2 = self.value.calculate(namespace), self.value2.calculate(namespace) 311 return self.binary_operator.apply_to(value1, value2) 285 312 286 313 -
trunk/airspeed_test.py
r21 r22 266 266 else: self.fail('expected error') 267 267 268 268 def test_compare_greater_than_operator(self): 269 template = airspeed.Template('#if ( $value > 1 )yes#end') 270 self.assertEquals('', template.merge({'value': 0})) 271 self.assertEquals('', template.merge({'value': 1})) 272 self.assertEquals('yes', template.merge({'value': 2})) 273 274 def test_compare_greater_than_or_equal_operator(self): 275 template = airspeed.Template('#if ( $value >= 1 )yes#end') 276 self.assertEquals('', template.merge({'value': 0})) 277 self.assertEquals('yes', template.merge({'value': 1})) 278 self.assertEquals('yes', template.merge({'value': 2})) 279 280 def test_compare_less_than_operator(self): 281 template = airspeed.Template('#if ( $value < 1 )yes#end') 282 self.assertEquals('yes', template.merge({'value': 0})) 283 self.assertEquals('', template.merge({'value': 1})) 284 self.assertEquals('', template.merge({'value': 2})) 285 286 def test_compare_less_than_or_equal_operator(self): 287 template = airspeed.Template('#if ( $value <= 1 )yes#end') 288 self.assertEquals('yes', template.merge({'value': 0})) 289 self.assertEquals('yes', template.merge({'value': 1})) 290 self.assertEquals('', template.merge({'value': 2})) 291 292 def test_compare_equality_operator(self): 293 template = airspeed.Template('#if ( $value == 1 )yes#end') 294 self.assertEquals('', template.merge({'value': 0})) 295 self.assertEquals('yes', template.merge({'value': 1})) 296 self.assertEquals('', template.merge({'value': 2})) 269 297 # 270 298 # TODO:
