Index: Lib/test/test_telnetlib.py =================================================================== --- Lib/test/test_telnetlib.py (revision 74347) +++ Lib/test/test_telnetlib.py (working copy) @@ -305,6 +305,43 @@ sb_data = self.sb_getter() self.sb_seen += sb_data +class SocketSendall(socket.socket): + _raw_sent = b'' + def sendall(self, data): + self._raw_sent += data + +class TelnetSockSendall(telnetlib.Telnet): + def open(self, host, port=0, timeout=socket._GLOBAL_DEFAULT_TIMEOUT): + ''' a near-exact copy of Telnet.open ''' + self.eof = 0 + if not port: + port = tl.TELNET_PORT + self.host = host + self.port = port + self.timeout = timeout + self.sock = SocketSendall() + +class WriteTests(TestCase): + '''The only thing that write does is replace each tl.IAC for + tl.IAC+tl.IAC''' + def _test_write(self, data): + self.telnet.write(data) + after_write = self.telnet.sock._raw_sent + self.assertEqual(data.replace(tl.IAC,tl.IAC+tl.IAC), + after_write) + + def test_write(self): + self.telnet = TelnetSockSendall('some.host.net') + data_sample = [b'data sample without IAC', + b'data sample with' + tl.IAC + b' one IAC', + b'a few' + tl.IAC + tl.IAC + b' iacs' + tl.IAC, + tl.IAC, + b''] + for d in data_sample: + self.telnet.open('some.host.net') + self._test_write(d) + self.telnet.close() + tl = telnetlib class TelnetDebuglevel(tl.Telnet): @@ -410,7 +447,7 @@ return def test_main(verbose=None): - support.run_unittest(GeneralTests, ReadTests, OptionTests) + support.run_unittest(GeneralTests, ReadTests, WriteTests, OptionTests) if __name__ == '__main__': test_main()