Beispiel #1
0
 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