Exemplo n.º 1
0
 def test_receives_repeated_normal_CR_LF_in_broken_godwars_mode_fine(self):
     self.tc.fix_broken_godwars_line_endings = True
     self.tc.dataReceived("foo\r\n\r\n")
     expected = [
         simpleml("foo", fg_code(WHITE, False), bg_code(BLACK)),
         simpleml("", fg_code(WHITE, False), bg_code(BLACK))
     ]
     for ml in expected:
         ml.wrap = True
     lines = [
         line
         for ((line, ), kwargs) in self.e.metalineReceived.call_args_list
     ]
     assert lines == expected, lines
Exemplo n.º 2
0
def prompt_time_display(match, realm):
    """Add a pink coloured timestamp to the prompt."""
    now = datetime.now()
    metaline = simpleml(
        (now.strftime("(%H:%M:%S.%%s) ") % str(now.microsecond)[:2]),
        HexFGCode(0xFF, 0xA0, 0xA0), bg_code(BLACK))
    realm.alterer.insert_metaline(match.end(1), metaline)
Exemplo n.º 3
0
    def write(self, line, soft_line_start=False):
        """Write a line to the screen.
        
        This forcibly converts its argument to a Metaline.
        """
        if not isinstance(line, (basestring, Metaline)):
            line = str(line)
        if isinstance(line, basestring):
            metaline = simpleml(line, fg_code(WHITE, False), bg_code(BLACK))
            metaline.wrap = False
            metaline.soft_line_start = soft_line_start
        else:
            metaline = line
        #we don't need to close off the ends of the note, because thanks to
        #the magic of the ColourCodeParser, each new line is started by the
        #implied colour, so notes can't bleed out into text (though the
        #reverse can be true).

        #this needs to be before the futzing with NLs and GA, because textwrap
        #obliterates all other newlines.
        metaline = metaline.wrapped(self.wrapper)

        #we don't actually append newlines at the end, but the start. This
        #simplifies things, because we don't use a newline where a soft line
        #end meets a soft line start, so there's only one place in this code
        #that can add newlines.
        if self._last_line_end is not None:
            if self._last_line_end == 'hard' or not metaline.soft_line_start:
                metaline.insert(0, '\n')

        for prot in self.protocols:
            prot.metalineReceived(metaline)

        self._last_line_end = metaline.line_end
Exemplo n.º 4
0
def test_insert_metaline():
    ml_one = Metaline('foo baz', RunLengthList([(0, 'foo'), (4, 'baz')]),
                      RunLengthList([(0, 'foo'), (4, 'baz')]))
    ml_two = simpleml('bar ', 'bar', 'bar')
    ml_one.insert_metaline(4, ml_two)
    assert ml_one == Metaline(
        "foo bar baz", RunLengthList([(0, 'foo'), (4, 'bar'), (8, 'baz')]),
        RunLengthList([(0, 'foo'), (4, 'bar'), (8, 'baz')]))
Exemplo n.º 5
0
 def test_fixes_LF_CR_normally(self):
     self.tc.fix_broken_godwars_line_endings = True
     self.tc.dataReceived("foo\n\r")
     expected = [simpleml("foo", fg_code(WHITE, False), bg_code(BLACK))]
     expected[0].wrap = True
     lines = [
         line
         for ((line, ), kwargs) in self.e.metalineReceived.call_args_list
     ]
     assert lines == expected, lines
Exemplo n.º 6
0
    def test_no_tell_sent_doesnt_cock_up(self):
        ml = simpleml('Bar tells you, "Blah."', fg_code(WHITE, False),
                      bg_code(BLACK))
        self.fact.realm.metalineReceived(ml)
        ml_written = self.p.metalineReceived.call_args[0][0]
        colour_expecting = ml_written.fores.get_at(0)

        self.fact.realm.send("tell baz blah")
        ml = simpleml("Whom do you wish to tell to?", fg_code(WHITE, False),
                      bg_code(BLACK))
        self.fact.realm.metalineReceived(ml)

        self.fact.realm.send("tell bar blah")
        ml = simpleml('You tell Bar, "Blah."', fg_code(WHITE, False),
                      bg_code(BLACK))
        self.fact.realm.metalineReceived(ml)
        ml_written_2 = self.p.metalineReceived.call_args[0][0]

        assert ml_written_2.fores.get_at(10) == colour_expecting
Exemplo n.º 7
0
    def connectionMade(self):
        """The MUD's been connected to."""
        message = time.strftime("Connection opened at %H:%M:%S.")
        colour = HexFGCode(0xFF, 0xAA, 0x00)  #lovely orange
        metaline = simpleml(message, colour, bg_code(BLACK))
        self.write(metaline)
        for prot in self.protocols:
            prot.connectionMade()

        self.telnet.msdp.add_listener(self.mmap)
Exemplo n.º 8
0
 def obj_as_metaline(self, o):
     desc = self.objs[o]
     print desc.keys()
     colour = HexFGCode(0xFF, 0xAA, 0x00)
     metaline = simpleml('(', colour, bg_code(BLACK))
     metaline += simpleml(desc['type'], colour, bg_code(BLACK))
     
     if desc['weapon'] and desc['weapon'] != 'None':
         metaline += simpleml(',' + desc['weapon'], fg_code(YELLOW, True), bg_code(BLACK))
         metaline += simpleml(',' + desc['dmg_str'], fg_code(RED, True), bg_code(BLACK))
         metaline += simpleml(',' + '%s' % desc['dmg_avg'], fg_code(RED, True), bg_code(BLACK))
         
     if desc['ac']:
         metaline += simpleml(',AC:%s' % desc['ac'], fg_code(RED, True), bg_code(BLACK))
     
     if desc['prop'] != '':
         metaline += simpleml(',' + desc['prop'], fg_code(BLUE, True), bg_code(BLACK))
     
     metaline += simpleml(')', colour, bg_code(BLACK))
     return metaline
Exemplo n.º 9
0
    def connectionLost(self):
        """The link to the MUD died.

        It is guaranteed that this will be called before close on connection
        event receivers.
        """
        message = time.strftime("Connection closed at %H:%M:%S.")
        colour = HexFGCode(0xFF, 0xAA, 0x00)  #lovely orange
        metaline = simpleml(message, colour, bg_code(BLACK))
        self.write(metaline)
        for prot in self.protocols:
            prot.connectionLost()
        #we might be waiting on the connection to die before we send out
        #close events
        if self._closing_down:
            for prot in self.protocols:
                prot.close()
        self._closing_down = True
        self.mmap.save()
Exemplo n.º 10
0
 def anyline(self, match, realm):
     if self.opozn_flag:
         s = match.group(1).strip()
         if s != '':
             self.obj_desc = '%s\n%s' % (self.obj_desc, s)
     
     if self.parse_flag:
         
         # logging baz
         m = RE_BAZ_NEW.match(match.group(1))
         print m, match.group(1)
         if m:
             w = {
                 'lot': m.group(1).strip(),
                 'object': m.group(2).strip(),
                 'price': m.group(3).strip(),
                 'date': '%s' % datetime.datetime.now(),
                 }
             self.baz_log.write('%s\n' % json.dumps(w, encoding="utf-8"))
             self.baz_log.flush()
         
         print 'PPPPP', match.group(1).strip()
         for res in OBJ_RES:
             m = res.match(match.group(1))
             if m:
                 o = m.group(1).strip()
                 if not self.has_obj(o):
                     print 'Getting from mudportal'
                     desc = self.get_from_mudportal(o)
                     if desc != {}:
                         self.update_obj(o, desc)
                 print o
                 if self.has_obj(o):
                     realm.alterer.insert_metaline(m.start(1) + len(o) + 1, self.obj_as_metaline(o))
                 else:
                     metaline = simpleml('(?)', fg_code(RED, True), bg_code(BLACK))
                     realm.alterer.insert_metaline(m.start(1) + len(o) + 1, metaline)
Exemplo n.º 11
0
 def test_metalineReceived_doesnt_change_colour_if_not_needed(self):
     self.o.change_colour = Mock()
     self.o.metalineReceived(simpleml("foo", self.o.fore, self.o.back))
     assert not self.o.change_colour.called
Exemplo n.º 12
0
 def test_metalineReceived_changes_colour_if_needed(self):
     self.o.metalineReceived(simpleml("foo", self.f1, self.b1))
     print self.o.method_calls
     assert self.o.method_calls == [("change_colour", (), {}),
                                    ("write_out_span", ("foo", ), {})]
Exemplo n.º 13
0
 def test_metalineReceived_calls_write_out_span(self):
     self.o.write_out_span = Mock()
     self.o.metalineReceived(simpleml("foo", self.o.fore, self.o.back))
     assert self.o.write_out_span.call_args_list == [(("foo", ), {})]
Exemplo n.º 14
0
def test_Metaline_addition_normal():
    res = simpleml("foo", sentinel.fore, sentinel.back) + \
          simpleml("bar", sentinel.fore2, sentinel.back2)
    assert res.line == "foobar", res.line
    assert res.fores.items() == [(0, sentinel.fore), (3, sentinel.fore2)]
    assert res.backs.items() == [(0, sentinel.back), (3, sentinel.back2)]
Exemplo n.º 15
0
 def test_insert_then_insert_metaline_bumps(self):
     self.la.insert(1, 'foo')
     self.la.insert_metaline(2, simpleml('bar', 'bar', 'bar'))
     res = self.la.apply(simpleml('baz', None, None))
     assert res.line == "bfooabarz", res.line
Exemplo n.º 16
0
 def test_insert_metaline_then_insert_bumps(self):
     ml_ins = simpleml('foo', 'foo', 'foo')
     self.la.insert_metaline(1, ml_ins)
     self.la.insert(2, 'baz')
     res = self.la.apply(simpleml('bar', 'bar', 'bar'))
     assert res.line == 'bfooabazr', res.line
Exemplo n.º 17
0
def test_Metaline_addition_first_has_trailling_colours():
    ml = simpleml("foo", sentinel.foofore, sentinel.fooback)
    ml.change_fore(0, 4, sentinel.foofore2)
    res = ml + simpleml("bar", sentinel.barfore, sentinel.barback)
    assert res.fores.items() == [(0, sentinel.foofore2),
                                 (3, sentinel.barfore)], res.fores.items()
Exemplo n.º 18
0
def ml(m, c):
    return simpleml(m, c, bg_code(BLACK))
Exemplo n.º 19
0
def test_Metaline_insert_at_0_doesnt_leave_start_uncoloured():
    ml = simpleml('foo', sentinel.fore, sentinel.back)
    ml.insert(0, 'bar')
    assert ml.fores.items() == [(0, sentinel.fore)]
    assert ml.backs.items() == [(0, sentinel.back)]
Exemplo n.º 20
0
def test_simpleml_creates_equivalent_metaline():
    ml = simpleml("foo", sentinel.fore, sentinel.back)
    assert ml == Metaline("foo", RunLengthList([(0, sentinel.fore)]),
                          RunLengthList([(0, sentinel.back)]))
Exemplo n.º 21
0
 def info(self, message, colour=HexFGCode(0xFF, 0xAA, 0x00)):
     metaline = simpleml(message, colour, bg_code(BLACK))
     self.write(metaline)
Exemplo n.º 22
0
def test_insert_metaline_tidies_when_inserted_at_end():
    res = simpleml("foo", sentinel.foofore, sentinel.fooback) + \
          simpleml("bar", sentinel.barfore, sentinel.barback)
    assert res.fores.items() == [(0, sentinel.foofore), (3, sentinel.barfore)]
    assert res.backs.items() == [(0, sentinel.fooback), (3, sentinel.barback)]