Index: third_party/twisted_8_1/twisted/conch/test/test_insults.py |
diff --git a/third_party/twisted_8_1/twisted/conch/test/test_insults.py b/third_party/twisted_8_1/twisted/conch/test/test_insults.py |
deleted file mode 100644 |
index eec07e3cf4b25460eecf06e08b5f11836252dea0..0000000000000000000000000000000000000000 |
--- a/third_party/twisted_8_1/twisted/conch/test/test_insults.py |
+++ /dev/null |
@@ -1,382 +0,0 @@ |
-# -*- test-case-name: twisted.conch.test.test_insults -*- |
-# Copyright (c) 2001-2004 Twisted Matrix Laboratories. |
-# See LICENSE for details. |
- |
-from twisted.trial import unittest |
-from twisted.test.proto_helpers import StringTransport |
- |
-from twisted.conch.insults.insults import ServerProtocol, ClientProtocol |
-from twisted.conch.insults.insults import CS_UK, CS_US, CS_DRAWING, CS_ALTERNATE, CS_ALTERNATE_SPECIAL |
-from twisted.conch.insults.insults import G0, G1 |
-from twisted.conch.insults.insults import modes |
- |
-def _getattr(mock, name): |
- return super(Mock, mock).__getattribute__(name) |
- |
-def occurrences(mock): |
- return _getattr(mock, 'occurrences') |
- |
-def methods(mock): |
- return _getattr(mock, 'methods') |
- |
-def _append(mock, obj): |
- occurrences(mock).append(obj) |
- |
-default = object() |
- |
-class Mock(object): |
- callReturnValue = default |
- |
- def __init__(self, methods=None, callReturnValue=default): |
- """ |
- @param methods: Mapping of names to return values |
- @param callReturnValue: object __call__ should return |
- """ |
- self.occurrences = [] |
- if methods is None: |
- methods = {} |
- self.methods = methods |
- if callReturnValue is not default: |
- self.callReturnValue = callReturnValue |
- |
- def __call__(self, *a, **kw): |
- returnValue = _getattr(self, 'callReturnValue') |
- if returnValue is default: |
- returnValue = Mock() |
- # _getattr(self, 'occurrences').append(('__call__', returnValue, a, kw)) |
- _append(self, ('__call__', returnValue, a, kw)) |
- return returnValue |
- |
- def __getattribute__(self, name): |
- methods = _getattr(self, 'methods') |
- if name in methods: |
- attrValue = Mock(callReturnValue=methods[name]) |
- else: |
- attrValue = Mock() |
- # _getattr(self, 'occurrences').append((name, attrValue)) |
- _append(self, (name, attrValue)) |
- return attrValue |
- |
-class MockMixin: |
- def assertCall(self, occurrence, methodName, args=(), kw={}): |
- attr, mock = occurrence |
- self.assertEquals(attr, methodName) |
- self.assertEquals(len(occurrences(mock)), 1) |
- [(call, result, args, kw)] = occurrences(mock) |
- self.assertEquals(call, "__call__") |
- self.assertEquals(args, args) |
- self.assertEquals(kw, kw) |
- return result |
- |
- |
-_byteGroupingTestTemplate = """\ |
-def testByte%(groupName)s(self): |
- transport = StringTransport() |
- proto = Mock() |
- parser = self.protocolFactory(lambda: proto) |
- parser.factory = self |
- parser.makeConnection(transport) |
- |
- bytes = self.TEST_BYTES |
- while bytes: |
- chunk = bytes[:%(bytesPer)d] |
- bytes = bytes[%(bytesPer)d:] |
- parser.dataReceived(chunk) |
- |
- self.verifyResults(transport, proto, parser) |
-""" |
-class ByteGroupingsMixin(MockMixin): |
- protocolFactory = None |
- |
- for word, n in [('Pairs', 2), ('Triples', 3), ('Quads', 4), ('Quints', 5), ('Sexes', 6)]: |
- exec _byteGroupingTestTemplate % {'groupName': word, 'bytesPer': n} |
- del word, n |
- |
- def verifyResults(self, transport, proto, parser): |
- result = self.assertCall(occurrences(proto).pop(0), "makeConnection", (parser,)) |
- self.assertEquals(occurrences(result), []) |
- |
-del _byteGroupingTestTemplate |
- |
-class ServerArrowKeys(ByteGroupingsMixin, unittest.TestCase): |
- protocolFactory = ServerProtocol |
- |
- # All the arrow keys once |
- TEST_BYTES = '\x1b[A\x1b[B\x1b[C\x1b[D' |
- |
- def verifyResults(self, transport, proto, parser): |
- ByteGroupingsMixin.verifyResults(self, transport, proto, parser) |
- |
- for arrow in (parser.UP_ARROW, parser.DOWN_ARROW, |
- parser.RIGHT_ARROW, parser.LEFT_ARROW): |
- result = self.assertCall(occurrences(proto).pop(0), "keystrokeReceived", (arrow, None)) |
- self.assertEquals(occurrences(result), []) |
- self.failIf(occurrences(proto)) |
- |
- |
-class PrintableCharacters(ByteGroupingsMixin, unittest.TestCase): |
- protocolFactory = ServerProtocol |
- |
- # Some letters and digits, first on their own, then capitalized, |
- # then modified with alt |
- |
- TEST_BYTES = 'abc123ABC!@#\x1ba\x1bb\x1bc\x1b1\x1b2\x1b3' |
- |
- def verifyResults(self, transport, proto, parser): |
- ByteGroupingsMixin.verifyResults(self, transport, proto, parser) |
- |
- for char in 'abc123ABC!@#': |
- result = self.assertCall(occurrences(proto).pop(0), "keystrokeReceived", (char, None)) |
- self.assertEquals(occurrences(result), []) |
- |
- for char in 'abc123': |
- result = self.assertCall(occurrences(proto).pop(0), "keystrokeReceived", (char, parser.ALT)) |
- self.assertEquals(occurrences(result), []) |
- |
- occs = occurrences(proto) |
- self.failIf(occs, "%r should have been []" % (occs,)) |
- |
-class ServerFunctionKeys(ByteGroupingsMixin, unittest.TestCase): |
- """Test for parsing and dispatching function keys (F1 - F12) |
- """ |
- protocolFactory = ServerProtocol |
- |
- byteList = [] |
- for bytes in ('OP', 'OQ', 'OR', 'OS', # F1 - F4 |
- '15~', '17~', '18~', '19~', # F5 - F8 |
- '20~', '21~', '23~', '24~'): # F9 - F12 |
- byteList.append('\x1b[' + bytes) |
- TEST_BYTES = ''.join(byteList) |
- del byteList, bytes |
- |
- def verifyResults(self, transport, proto, parser): |
- ByteGroupingsMixin.verifyResults(self, transport, proto, parser) |
- for funcNum in range(1, 13): |
- funcArg = getattr(parser, 'F%d' % (funcNum,)) |
- result = self.assertCall(occurrences(proto).pop(0), "keystrokeReceived", (funcArg, None)) |
- self.assertEquals(occurrences(result), []) |
- self.failIf(occurrences(proto)) |
- |
-class ClientCursorMovement(ByteGroupingsMixin, unittest.TestCase): |
- protocolFactory = ClientProtocol |
- |
- d2 = "\x1b[2B" |
- r4 = "\x1b[4C" |
- u1 = "\x1b[A" |
- l2 = "\x1b[2D" |
- # Move the cursor down two, right four, up one, left two, up one, left two |
- TEST_BYTES = d2 + r4 + u1 + l2 + u1 + l2 |
- del d2, r4, u1, l2 |
- |
- def verifyResults(self, transport, proto, parser): |
- ByteGroupingsMixin.verifyResults(self, transport, proto, parser) |
- |
- for (method, count) in [('Down', 2), ('Forward', 4), ('Up', 1), |
- ('Backward', 2), ('Up', 1), ('Backward', 2)]: |
- result = self.assertCall(occurrences(proto).pop(0), "cursor" + method, (count,)) |
- self.assertEquals(occurrences(result), []) |
- self.failIf(occurrences(proto)) |
- |
-class ClientControlSequences(unittest.TestCase, MockMixin): |
- def setUp(self): |
- self.transport = StringTransport() |
- self.proto = Mock() |
- self.parser = ClientProtocol(lambda: self.proto) |
- self.parser.factory = self |
- self.parser.makeConnection(self.transport) |
- result = self.assertCall(occurrences(self.proto).pop(0), "makeConnection", (self.parser,)) |
- self.failIf(occurrences(result)) |
- |
- def testSimpleCardinals(self): |
- self.parser.dataReceived( |
- ''.join([''.join(['\x1b[' + str(n) + ch for n in ('', 2, 20, 200)]) for ch in 'BACD'])) |
- occs = occurrences(self.proto) |
- |
- for meth in ("Down", "Up", "Forward", "Backward"): |
- for count in (1, 2, 20, 200): |
- result = self.assertCall(occs.pop(0), "cursor" + meth, (count,)) |
- self.failIf(occurrences(result)) |
- self.failIf(occs) |
- |
- def testScrollRegion(self): |
- self.parser.dataReceived('\x1b[5;22r\x1b[r') |
- occs = occurrences(self.proto) |
- |
- result = self.assertCall(occs.pop(0), "setScrollRegion", (5, 22)) |
- self.failIf(occurrences(result)) |
- |
- result = self.assertCall(occs.pop(0), "setScrollRegion", (None, None)) |
- self.failIf(occurrences(result)) |
- self.failIf(occs) |
- |
- def testHeightAndWidth(self): |
- self.parser.dataReceived("\x1b#3\x1b#4\x1b#5\x1b#6") |
- occs = occurrences(self.proto) |
- |
- result = self.assertCall(occs.pop(0), "doubleHeightLine", (True,)) |
- self.failIf(occurrences(result)) |
- |
- result = self.assertCall(occs.pop(0), "doubleHeightLine", (False,)) |
- self.failIf(occurrences(result)) |
- |
- result = self.assertCall(occs.pop(0), "singleWidthLine") |
- self.failIf(occurrences(result)) |
- |
- result = self.assertCall(occs.pop(0), "doubleWidthLine") |
- self.failIf(occurrences(result)) |
- self.failIf(occs) |
- |
- def testCharacterSet(self): |
- self.parser.dataReceived( |
- ''.join([''.join(['\x1b' + g + n for n in 'AB012']) for g in '()'])) |
- occs = occurrences(self.proto) |
- |
- for which in (G0, G1): |
- for charset in (CS_UK, CS_US, CS_DRAWING, CS_ALTERNATE, CS_ALTERNATE_SPECIAL): |
- result = self.assertCall(occs.pop(0), "selectCharacterSet", (charset, which)) |
- self.failIf(occurrences(result)) |
- self.failIf(occs) |
- |
- def testShifting(self): |
- self.parser.dataReceived("\x15\x14") |
- occs = occurrences(self.proto) |
- |
- result = self.assertCall(occs.pop(0), "shiftIn") |
- self.failIf(occurrences(result)) |
- |
- result = self.assertCall(occs.pop(0), "shiftOut") |
- self.failIf(occurrences(result)) |
- self.failIf(occs) |
- |
- def testSingleShifts(self): |
- self.parser.dataReceived("\x1bN\x1bO") |
- occs = occurrences(self.proto) |
- |
- result = self.assertCall(occs.pop(0), "singleShift2") |
- self.failIf(occurrences(result)) |
- |
- result = self.assertCall(occs.pop(0), "singleShift3") |
- self.failIf(occurrences(result)) |
- self.failIf(occs) |
- |
- def testKeypadMode(self): |
- self.parser.dataReceived("\x1b=\x1b>") |
- occs = occurrences(self.proto) |
- |
- result = self.assertCall(occs.pop(0), "applicationKeypadMode") |
- self.failIf(occurrences(result)) |
- |
- result = self.assertCall(occs.pop(0), "numericKeypadMode") |
- self.failIf(occurrences(result)) |
- self.failIf(occs) |
- |
- def testCursor(self): |
- self.parser.dataReceived("\x1b7\x1b8") |
- occs = occurrences(self.proto) |
- |
- result = self.assertCall(occs.pop(0), "saveCursor") |
- self.failIf(occurrences(result)) |
- |
- result = self.assertCall(occs.pop(0), "restoreCursor") |
- self.failIf(occurrences(result)) |
- self.failIf(occs) |
- |
- def testReset(self): |
- self.parser.dataReceived("\x1bc") |
- occs = occurrences(self.proto) |
- |
- result = self.assertCall(occs.pop(0), "reset") |
- self.failIf(occurrences(result)) |
- self.failIf(occs) |
- |
- def testIndex(self): |
- self.parser.dataReceived("\x1bD\x1bM\x1bE") |
- occs = occurrences(self.proto) |
- |
- result = self.assertCall(occs.pop(0), "index") |
- self.failIf(occurrences(result)) |
- |
- result = self.assertCall(occs.pop(0), "reverseIndex") |
- self.failIf(occurrences(result)) |
- |
- result = self.assertCall(occs.pop(0), "nextLine") |
- self.failIf(occurrences(result)) |
- self.failIf(occs) |
- |
- def testModes(self): |
- self.parser.dataReceived( |
- "\x1b[" + ';'.join(map(str, [modes.KAM, modes.IRM, modes.LNM])) + "h") |
- self.parser.dataReceived( |
- "\x1b[" + ';'.join(map(str, [modes.KAM, modes.IRM, modes.LNM])) + "l") |
- occs = occurrences(self.proto) |
- |
- result = self.assertCall(occs.pop(0), "setModes", ([modes.KAM, modes.IRM, modes.LNM],)) |
- self.failIf(occurrences(result)) |
- |
- result = self.assertCall(occs.pop(0), "resetModes", ([modes.KAM, modes.IRM, modes.LNM],)) |
- self.failIf(occurrences(result)) |
- self.failIf(occs) |
- |
- def testErasure(self): |
- self.parser.dataReceived( |
- "\x1b[K\x1b[1K\x1b[2K\x1b[J\x1b[1J\x1b[2J\x1b[3P") |
- occs = occurrences(self.proto) |
- |
- for meth in ("eraseToLineEnd", "eraseToLineBeginning", "eraseLine", |
- "eraseToDisplayEnd", "eraseToDisplayBeginning", |
- "eraseDisplay"): |
- result = self.assertCall(occs.pop(0), meth) |
- self.failIf(occurrences(result)) |
- |
- result = self.assertCall(occs.pop(0), "deleteCharacter", (3,)) |
- self.failIf(occurrences(result)) |
- self.failIf(occs) |
- |
- def testLineDeletion(self): |
- self.parser.dataReceived("\x1b[M\x1b[3M") |
- occs = occurrences(self.proto) |
- |
- for arg in (1, 3): |
- result = self.assertCall(occs.pop(0), "deleteLine", (arg,)) |
- self.failIf(occurrences(result)) |
- self.failIf(occs) |
- |
- def testLineInsertion(self): |
- self.parser.dataReceived("\x1b[L\x1b[3L") |
- occs = occurrences(self.proto) |
- |
- for arg in (1, 3): |
- result = self.assertCall(occs.pop(0), "insertLine", (arg,)) |
- self.failIf(occurrences(result)) |
- self.failIf(occs) |
- |
- def testCursorPosition(self): |
- methods(self.proto)['reportCursorPosition'] = (6, 7) |
- self.parser.dataReceived("\x1b[6n") |
- self.assertEquals(self.transport.value(), "\x1b[7;8R") |
- occs = occurrences(self.proto) |
- |
- result = self.assertCall(occs.pop(0), "reportCursorPosition") |
- # This isn't really an interesting assert, since it only tests that |
- # our mock setup is working right, but I'll include it anyway. |
- self.assertEquals(result, (6, 7)) |
- |
- |
- |
-class ServerProtocolOutputTests(unittest.TestCase): |
- """ |
- Tests for the bytes L{ServerProtocol} writes to its transport when its |
- methods are called. |
- """ |
- def test_nextLine(self): |
- """ |
- L{ServerProtocol.nextLine} writes C{"\r\n"} to its transport. |
- """ |
- # Why doesn't it write ESC E? Because ESC E is poorly supported. For |
- # example, gnome-terminal (many different versions) fails to scroll if |
- # it receives ESC E and the cursor is already on the last row. |
- protocol = ServerProtocol() |
- transport = StringTransport() |
- protocol.makeConnection(transport) |
- protocol.nextLine() |
- self.assertEqual(transport.value(), "\r\n") |