def random_option(self, option): self.log_debug(11, 'random_option(%r)', option) in_sub = in_cat = False repeat = 1 partial = None msg = Message() for item in option: if isinstance(item, str): if item == 'repeat': repeat = 1 + randrange(4) elif item == 'sub': in_sub = True elif item == 'cat': in_cat = True elif item == 'optional': if randrange(3): partial = Message(msg) else: break else: if in_sub: # Wrapped subexpression while repeat: result = self.random_expression(item) if result: msg &= result repeat -= 1 else: return partial elif in_cat: # Category name while repeat: result = self.random_category(item) if result: msg.append(result) repeat -= 1 else: return partial else: # Unwrapped subexpression(s) while repeat: result = self.random_expression(item) if result: msg.extend(result) repeat -= 1 else: return partial in_sub = in_cat = False repeat = 1 elif isinstance(item, Token): msg.extend([item] * repeat) repeat = 1 return msg
def test_max_neg_int(self): # What if we let it overflow the full 14 bits? last = Turn(WIN, protocol.max_neg_int - 1, seasons=(SPR, SUM, FAL, AUT, WIN)) next = last.next() msg = Message(next) self.assertEqual(msg.fold(), [SPR, protocol.max_neg_int])
def test_end_of_time(self): # What happens when we run out of years? last = Turn(WIN, protocol.max_pos_int - 1, seasons=(SPR, SUM, FAL, AUT, WIN)) next = last.next() msg = Message(next) self.assertEqual(msg.fold(), [SPR, protocol.max_pos_int])
def handle_press_HUH(self, sender, message): flattened = Message(message) while ERR in flattened: flattened.pop(flattened.index(ERR)) folded = flattened.fold() self.handle_press_REJ(sender, folded)
def test_unicode_folding(self): name = [StringToken(c) for c in self.greek.encode("utf-8")] msg = Message([NME, name, [u"v1.3"]]) self.failUnlessEqual(msg.fold()[1][0], self.greek)