Exemplo n.º 1
0
class Test_write_wrapping:
    
    def setUp(self):
        self.realm = RootRealm(Mock())
        self.p = Mock()
        self.realm.addProtocol(self.p)

    def test_line_insertion_with_hard_line_end_no_sls(self):
        self.realm._last_line_end = 'hard'
        self.realm.write(simpleml("foo", sentinel.fore,
                                  sentinel.back))
        rcvd = [ml for ((ml,), _) in self.p.metalineReceived.call_args_list]
        assert rcvd == [simpleml("\nfoo", sentinel.fore, sentinel.back)]

    def test_line_insertion_with_hard_line_end_sls(self):
        self.realm._last_line_end = 'hard'
        ml = simpleml("foo", sentinel.fore, sentinel.back)
        ml.soft_line_start = True
        expected = ml.copy()
        expected.insert(0, '\n')
        self.realm.write(ml)
        rcvd = [ml for ((ml,), _) in self.p.metalineReceived.call_args_list]
        assert rcvd == [expected]

    def test_line_insertion_sle_no_sls(self):
        self.realm._last_line_end = 'soft'
        self.realm.write(simpleml("foo", sentinel.fore,
                                  sentinel.back))
        rcvd = [ml for ((ml,), _) in self.p.metalineReceived.call_args_list]
        assert rcvd == [simpleml("\nfoo", sentinel.fore, sentinel.back)]
        
    def test_line_no_insertion_sle_sls(self):
        self.realm._last_line_end = 'soft'
        ml = simpleml("foo", sentinel.fore, sentinel.back)
        ml.soft_line_start = True
        expected = ml.copy()
        self.realm.write(ml)
        rcvd = [ml for ((ml,), _) in self.p.metalineReceived.call_args_list]
        assert rcvd == [expected]

    def test_respects_no_line_end(self):
        self.realm._last_line_end = None
        ml = simpleml("foo", sentinel.fore, sentinel.back)
        expected = ml
        self.realm.write(ml)
        rcvd = [ml for ((ml,), _) in self.p.metalineReceived.call_args_list]
        assert rcvd == [expected], rcvd

    def test_last_line_end_setting(self):
        ml = simpleml("foo", sentinel.fore, sentinel.back)
        ml.line_end = sentinel.line_end
        self.realm.write(ml)
        assert self.realm._last_line_end == sentinel.line_end

    def test_last_line_end_is_defaultly_None(self):
        assert self.realm._last_line_end is None

    def test_with_wrap(self):
        ml = simpleml("bar", sentinel.fore1, sentinel.fore2)
        ml.wrapped = Mock()
        ml.wrapped.return_value = ml2 = simpleml("foo", sentinel.fore,
                                                 sentinel.back)
        self.realm.write(ml)
        assert ml.wrapped.called
        rcvd = [ml for ((ml,), _) in self.p.metalineReceived.call_args_list]
        assert rcvd == [ml2]
Exemplo n.º 2
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