Exemplo n.º 1
0
class TestBasicRetrieval(unittest.TestCase):
    
    def setUp(self):
        self.texpect = TExpect()
        self.texpect._buf = 'Welcome to Windows. Press Ctrl-Alt-Delete to begin'
    
    def test_sequential_read(self):
        self.accumulator = ''
        def __cb(res):
            self.accumulator += res
            return res
        d = self.texpect.read_until('Windows')
        d.addCallback(__cb)
        d.addCallback(lambda res: self.texpect.read_until('Delete'))
        d.addCallback(__cb)
        d.addCallback(lambda x: self.assertEqual(self.accumulator,
            'Welcome to Windows. Press Ctrl-Alt-Delete'))
        return d
    
    def test_write(self):
        self.texpect.transport = StringTransport()
        d = self.texpect.read_until('Alt-')
        d.addCallback(self.texpect.write)
        d.addCallback(lambda x: self.assertEqual(self.texpect.transport.value(),
                                'Welcome to Windows. Press Ctrl-Alt-'))
        return d
Exemplo n.º 2
0
class TestSequence(unittest.TestCase):
    
    def setUp(self):
        self.texpect = TExpect()
        self.texpect.transport = StringTransport()
        self.texpect._buf = 'Welcome to Windows. Press Ctrl-Alt-Delete to begin'
    
    def test_double_read_1(self):
        """
        If the argument of the first request was in the buffer, the errback
        on the second one would've never been called
        (see L{test_wrong_sequence_no_failure}). As the documentation states,
        in such cases the behaviour is undefined
        
        """
        d1 = self.texpect.read_until('toz')
        d2 = self.texpect.read_until('Press')
        return self.failUnlessFailure(d2, OutOfSequenceError)
    
    def test_double_read_2(self):
        d1 = self.texpect.read_until('foobar')
        d2 = self.texpect.expect(['to'])
        return self.failUnlessFailure(d2, OutOfSequenceError)

    def test_wrong_sequence_no_failure(self):
        d1 = self.texpect.read_until('to')
        d2 = self.texpect.read_until('Press')
        
    def test_wrong_sequence_delayed(self):
        """
        Unlike L{test_wrong_sequence_no_failure}, this (rightfully) fails, because by the time
        data arrives, the erroneous second call to L{read_until} was already made
        
        """
        self.texpect._buf = ''
        dc = reactor.callLater(1, self.texpect.applicationDataReceived, 
                          'Welcome to Windows. Press Ctrl-Alt-Delete to begin')
        d1 = self.texpect.read_until('to')
        d2 = self.texpect.read_until('Press')
        self.addCleanup(dc.cancel)
        return self.failUnlessFailure(d2, OutOfSequenceError)
    
    def test_write_after_read(self):
        d1 = self.texpect.read_until('not-in-buffer')
        d2 = self.texpect.write('something')
        return self.failUnlessFailure(d2, OutOfSequenceError)
    
    def test_correct_sequence(self):
        d1 = self.texpect.read_until('to')
        d1.addCallback(lambda res: self.texpect.read_until('Press'))