示例#1
0
class Test_metalineReceived:

    def setUp(self):
        self.realm = RootRealm(Mock())
        self.p = Mock()
        self.realm.addProtocol(self.p)
        self.realm.telnet = Mock()
        self.ml = simpleml('foo', sentinel.fores, sentinel.backs)
        self.ml2 = simpleml("bar", sentinel.fores, sentinel.backs)
        self.ml2_written = self.ml2.copy()
        self.ml2_written.insert(0, '\n')

    @property
    def lines_gotten(self):
        return [line for ((line,), kwargs) in 
                            self.p.metalineReceived.call_args_list]

    def test_sends_to_screen_normally(self):
        self.realm.metalineReceived(self.ml)
        assert self.lines_gotten == [self.ml]

    @binding_trigger("foo")
    def trigger_1(self, match, realm):
        realm.write(self.ml2)

    def test_write_writes_afterwards(self):
        self.realm.triggers.append(self.trigger_1)
        self.realm.metalineReceived(self.ml)
        assert self.lines_gotten == [self.ml, self.ml2_written]

    @binding_trigger("foo")
    def trigger_2(self, match, realm):
        realm.display_line = False

    def test_doesnt_display_if_asked_not_to(self):
        self.realm.triggers.append(self.trigger_2)
        self.realm.metalineReceived(self.ml)
        assert self.lines_gotten == []

    @binding_alias("spam")
    def bar_writing_alias(self, match, realm):
        realm.write("BAR BAR BAR")
        realm.send_to_mud = False
    
    @binding_trigger('foo')
    def spam_sending_trigger(self, match, realm):
        realm.send("spam")

    def test_aliases_inside_triggers_write_after_trigger_writes(self):
        self.realm.triggers.append(self.spam_sending_trigger)
        self.realm.aliases.append(self.bar_writing_alias)

        noteline = Metaline("\nBAR BAR BAR",
                            RunLengthList([(0, fg_code(WHITE, False))]),
                            RunLengthList([(0, bg_code(BLACK))]))

        self.realm.metalineReceived(self.ml)

        assert self.lines_gotten == [self.ml, noteline]
示例#2
0
class TestTriggers(unittest.TestCase):
    def setUp(self):
        self.realm=RootRealm(None)
        self.realm.load_module(TestModule, True)
        self.realm.telnet = Mock()
        self.protocol = Mock()
        self.realm.addProtocol(self.protocol)
    
    @property
    def lines_gotten(self):
        return [line for ((line,), kwargs) in 
                    self.protocol.metalineReceived.call_args_list]
    def test_simple_trigger(self):
        self.realm.metalineReceived(simpleml('abc', None, None))
        return_line = self.lines_gotten[1].line
        assert self.lines_gotten[1].line == '\nsuccess'
        
    def test_list_trigger(self):
        self.realm.metalineReceived(simpleml('highjump', None, None))
        return_line = self.lines_gotten[1].line
        assert return_line=='\nsuccess2'
示例#3
0
class Test_write:

    def setUp(self):
        self.realm = RootRealm(Mock())
        self.realm.telnet = Mock()
        self.p = Mock()
        self.realm.addProtocol(self.p)
        self.noting_line = simpleml("foo", Mock(), Mock())
        
    def writer(self, match, realm):
        print 'writer called!'
        realm.write(self.noting_line)

    @property
    def lines_gotten(self):
        return [line for ((line,), kwargs) in 
                            self.p.metalineReceived.call_args_list]

    def test_from_not_a_string(self):
        self.realm.write(42)
        assert len(self.lines_gotten) == 1
        assert self.lines_gotten[0].line == '42'

    def test_from_string(self):
        self.realm.write('spam')
        assert len(self.lines_gotten) == 1
        assert self.lines_gotten[0].line == 'spam'

    def test_from_metaline(self):
        ml = Metaline('foo', None, None)
        self.realm.write(ml)
        assert self.lines_gotten == [ml]

    def test_no_colourbleed_fg(self):
        self.realm.write("eggs")
        cols = self.lines_gotten[0].fores.items()
        expected = [(0, fg_code(WHITE, False))]
        assert cols == expected, (cols, expected)

    def test_no_colourbleed_bg(self):
        self.realm.write("eggs")
        cols = self.lines_gotten[0].backs.items()
        assert cols ==  [(0, bg_code(BLACK))], cols

    def test_passes_on_wrap_default(self):
        self.realm.write("eggs")
        assert not self.lines_gotten[0].wrap

    def test_soft_line_start_default_is_off(self):
        self.realm.write("barbaz")
        assert not self.lines_gotten[0].soft_line_start

    def test_passes_on_soft_line_start(self):
        self.realm.write('foo', soft_line_start = True)
        assert self.lines_gotten[0].soft_line_start

    noting_trigger = binding_trigger('bar')(writer)
    noting_alias = binding_alias('bar')(writer)

    def test_write_writes_after_during_matching_triggers(self):
        self.realm.triggers.append(self.noting_trigger)
        inline = Metaline('bar', set(), set())
        self.realm.metalineReceived(inline)
        assert self.lines_gotten == [inline, self.noting_line], \
               self.lines_gotten

    def test_write_writes_after_during_alias_matching(self):
        self.realm.aliases.append(self.noting_alias)
        inline = Metaline('bar', RunLengthList([(0, fg_code(WHITE, False))]),
                          RunLengthList([(0, bg_code(BLACK))]),
                          soft_line_start = True)
        self.realm.send('bar')
        print self.lines_gotten
        print
        expected = [inline, self.noting_line]
        print expected
        assert self.lines_gotten == expected

    def tracer(self, match, realm):
        realm.trace("Foo")

    tracing_trigger = binding_trigger("baz")(tracer)
    tracing_alias = binding_alias("baz")(tracer)

    def test_trace_writes_after_during_matching_triggers(self):
        self.realm.tracing = True
        self.realm.triggers.append(self.tracing_trigger)
        inline = Metaline('baz', set(), set())
        self.realm.metalineReceived(inline)
        expected_lines = [simpleml("\nTRACE: %s matched!" % self.tracing_trigger,
                                   fg_code(WHITE, False), bg_code(BLACK)),
                          simpleml("\nTRACE: Foo", fg_code(WHITE, False),
                                   bg_code(BLACK))]
        print self.lines_gotten
        print
        expected = [inline] + expected_lines
        print expected
        assert self.lines_gotten == expected

    def test_trace_writes_after_during_alias_matching(self):
        self.realm.tracing = True
        self.realm.aliases.append(self.tracing_alias)
        inline = Metaline('baz', RunLengthList([(0, fg_code(WHITE, False))]),
                          RunLengthList([(0, bg_code(BLACK))]),
                          soft_line_start = True)
        self.realm.send('baz')
        expected_lines = [simpleml("\nTRACE: %s matched!" % self.tracing_alias,
                                   fg_code(WHITE, False), bg_code(BLACK)),
                          simpleml("\nTRACE: Foo", fg_code(WHITE, False),
                                   bg_code(BLACK))]
        print self.lines_gotten
        print
        expected = [inline] + expected_lines
        print expected
        assert self.lines_gotten == expected
示例#4
0
class Test_trace:

    def setUp(self):
        self.factory = TelnetClientFactory(None, None, sentinel.ModuleName)
        self.realm = RootRealm(self.factory)
        self.realm.telnet = Mock()

    def test_trace_on_sets_tracing_to_True(self):
        self.realm.trace = Mock()
        self.realm.trace_on()
        assert self.realm.tracing

    def test_tracing_is_off_by_default(self):
        assert not self.realm.tracing

    def test_trace_off_sets_tracing_to_False(self):
        self.realm.tracing = True
        self.realm.trace = Mock()
        self.realm.trace_off()
        assert not self.realm.tracing

    def test_trace_on_writes_a_message(self):
        self.realm.trace = Mock()
        self.realm.trace_on()
        assert self.realm.trace.call_args_list == [(('Tracing enabled!',),
                                                    {})]

    def test_trace_on_writes_nothing_if_already_tracing(self):
        self.realm.tracing = True
        self.realm.trace = Mock()
        self.realm.trace_on()
        assert not self.realm.trace.called

    def test_trace_off_writes_a_message(self):
        self.realm.tracing = True
        self.realm.trace = Mock()
        self.realm.trace_off()
        assert self.realm.trace.call_args_list == [(('Tracing disabled!',),
                                                    {})]

    def test_trace_off_writes_nothing_if_not_already_tracing(self):
        self.realm.trace = Mock()
        self.realm.trace_off()
        assert not self.realm.trace.called

    def test_trace_delegates_to_write_if_tracing(self):
        self.realm.tracing = True
        self.realm.write = Mock()
        self.realm.trace("FOO BAR BAZ")
        print self.realm.write.call_args_list
        assert self.realm.write.call_args_list == [(("TRACE: FOO BAR BAZ",),
                                                    {})]

    def test_trace_writes_nothing_if_not_tracing(self):
        self.realm.write = Mock()
        self.realm.trace("FOO BAR BAZ")
        assert not self.realm.write.called

    @binding_trigger("Foo")
    def trace_twiddling_trigger(self, match, realm):
        realm.display_line = False
        self.realm.tracing = True
        realm.trace('Foo')
        self.realm.tracing = False
        realm.trace("Bar")

    def test_trace_remembers_tracing_when_attempted(self):
        self.realm.write = Mock()
        self.realm.triggers.append(self.trace_twiddling_trigger)
        self.realm.metalineReceived(simpleml("Foo", None, None))
        print self.realm.write.call_args_list
        assert self.realm.write.call_args_list == [(("TRACE: Foo", False),
                                                    {})]

    def test_trace_thunk_delegates_to_write_if_tracing(self):
        self.realm.tracing = True
        self.realm.write = Mock()
        self.realm.trace_thunk(lambda: "FOO BAR BAZ")
        print self.realm.write.call_args_list
        assert self.realm.write.call_args_list == [(("TRACE: FOO BAR BAZ",),
                                                    {})]

    def test_trace_thunk_writes_nothing_if_not_tracing(self):
        self.realm.write = Mock()
        self.realm.trace_thunk(lambda: "FOO BAR BAZ")
        assert not self.realm.write.called

    @binding_trigger("Foo")
    def trace_thunk_twiddling_trigger(self, match, realm):
        realm.display_line = False
        self.realm.tracing = True
        realm.trace_thunk(lambda: 'Foo')
        self.realm.tracing = False
        realm.trace_thunk(lambda: "Bar")

    def test_trace_thunk_remembers_tracing_when_attempted(self):
        self.realm.write = Mock()
        self.realm.triggers.append(self.trace_thunk_twiddling_trigger)
        self.realm.metalineReceived(simpleml("Foo", None, None))
        print self.realm.write.call_args_list
        assert self.realm.write.call_args_list == [(("TRACE: Foo", False),
                                                    {})]
示例#5
0
class TestRuneguardTriggers(unittest.TestCase):
    @property
    def lines_gotten(self):
        return [line for ((line,), kwargs) in 
                    self.protocol.metalineReceived.call_args_list]
    @property
    def telnet_lines_gotten(self):
        return [line for ((line,),kwargs) in
                    self.realm.telnet.sendLine.call_args_list]
        
    def setUp(self):
        self.realm=RootRealm(None)
        self.realm.factory=TestFactory()
        self.realm.module_settings_dir='/home/dmitry/muds/settings'
        
        import sys
        sys.path.append('/home/dmitry/dev/modules')
        
        from runeguard import Runeguard
        #sr = ShieldRez(self.realm)
        self.realm.load_module(Runeguard)
        self.realm.telnet = TestPrinter()
        self.protocol = TestPrinter()
        self.realm.addProtocol(self.protocol)
        self.realm.state['target']='Iniar'
    
    def test_rune_fired(self):
        self.realm.state['target']='Emily'
        self.realm.metalineReceived(simpleml("You concentrate on the sowulu rune on an ink-stained snowy marble tablet, and its searing image suddenly flares on Emily's skin.",None,None))
        self.realm.receive_gui_line('rv')
        self.realm.metalineReceived(simpleml("You concentrate on the pithakhan rune on an ink-stained snowy marble tablet, and its searing image suddenly flares on Emily's skin.",None,None))
        self.realm.receive_gui_line('rv')
        self.realm.metalineReceived(simpleml("The residual effects of the sowulu rune around Emily fade.",None,None))
        self.realm.receive_gui_line('rv')
        
    def test_rebounding_on(self):
        self.realm.state['last_command_type']='attack'
        self.realm.metalineReceived(simpleml('You suddenly perceive the vague outline of an aura of rebounding around Iniar.',None,None))
        self.realm.state['last_command_type']='raze'
        self.realm.metalineReceived(simpleml('A shimmering translucent shield forms around Iniar.',None,None))
        self.realm.metalineReceived(simpleml('The shimmering translucent shield around Iniar fades away.',None,None))
        self.realm.metalineReceived(simpleml('Iniar\'s aura of weapons rebounding disappears.',None,None))
        
        #print([l.line for l in self.lines_gotten])
        #print([l for l in self.telnet_lines_gotten])