def handle(self): self.logger.debug("slim request handle started") self.wfile.write(b'Slim -- V0.3\n') running = True while running: instructionLength = int(self.rfile.read(6)) self.rfile.read(1) instructions = self.rfile.read(instructionLength).decode('utf-8') self.logger.debug("len={} data={}".format(instructionLength, instructions)) if instructions == 'bye': self.logger.debug("'bye' received") running = False else: statements = ListDeserializer.deserialize(instructions) self.executor = ListExecutor() results = self.executor.execute(statements) x = ListSerializer.serialize(results) response = '%06d:%s' % (len(x), x) self.logger.debug("reponse={}".format(response)) self.wfile.write(response.encode('utf-8')) self.logger.debug("server shutdown requested") self.server.done()
class ListExecutorTest(unittest.TestCase): def setUp(self): self.executor = ListExecutor() self.statements = [] self.expectedResults = [] def testFoo(self): self.statements.append(["i1", "import", "xtest"]) self.statements.append(["m1", "make", "testSlim", "TestSlim"]) results = self.executor.execute(self.statements) print results def respondsWith(self, expected): self.expectedResults.extend(expected) result = self.executor.execute(self.statements) expectedMap = resultToMap(self.expectedResults) resultMap = resultToMap(result) self.assertEquals(expectedMap, resultMap) def assertExceptionReturned(self, message, returnTag): results = resultToMap(self.executor.execute(self.statements)) result = results[returnTag] self.assert_(result.find(EXCEPTION_TAG) != -1) self.assert_(result.find(message) != -1)
def setUp(self): self.executor = ListExecutor() self.statements = [] self.expectedResults = [] self.statements.append(["i1", "import", "test"]) self.statements.append(["m1", "make", "testSlim", "TestSlim"]) self.expectedResults.append(["i1", "OK"]) self.expectedResults.append(["m1", "OK"])
def handle(self): self.wfile.write('Slim -- V0.0\n') while True: instructionLength = int(self.rfile.read(6)) self.rfile.read(1) instructions = self.rfile.read(instructionLength) if instructions == 'bye': return log('instructions {%s}' % instructions) statements = ListDeserializer.deserialize(instructions) self.executor = ListExecutor() results = self.executor.execute(statements) x = ListSerializer.serialize(results) log(x) self.wfile.write('%06d:%s' % (len(x), x))
class SlimRequestHandler(socketserver.StreamRequestHandler): def __init__(self, request, client_address, server): self.logger = logging.getLogger('SlimRequestHandler') self.logger.debug('__init__') socketserver.StreamRequestHandler.__init__(self, request, client_address, server) return def handle(self): self.logger.debug("slim request handle started") self.wfile.write(b'Slim -- V0.3\n') running = True while running: instructionLength = int(self.rfile.read(6)) self.rfile.read(1) instructions = self.rfile.read(instructionLength).decode('utf-8') self.logger.debug("len={} data={}".format(instructionLength, instructions)) if instructions == 'bye': self.logger.debug("'bye' received") running = False else: statements = ListDeserializer.deserialize(instructions) self.executor = ListExecutor() results = self.executor.execute(statements) x = ListSerializer.serialize(results) response = '%06d:%s' % (len(x), x) self.logger.debug("reponse={}".format(response)) self.wfile.write(response.encode('utf-8')) self.logger.debug("server shutdown requested") self.server.done()
class SlimServer(Protocol): def __init__(self): log('init') def connectionMade(self): log('connectionMade') self.transport.write("Slim -- V0.0\n"); def dataReceived(self, data): #log('dataReceived ' + data) try: self.file = FileAdapter(data) instructionLength = int(self.file.read(6)) self.file.read(1) instructions = self.file.read(instructionLength) if instructions == 'bye': #self.transport.loseConnection() reactor.stop() return log('instructions {%s}' % instructions) statements = ListDeserializer.deserialize(instructions) self.executor = ListExecutor() results = self.executor.execute(statements) x = ListSerializer.serialize(results) log(x) self.transport.write('%06d:%s' % (len(x), x)) except Exception, e: log(traceback.format_exc())
def setUp(self): self.executor = ListExecutor() self.statements = [] self.expectedResults = [] self.statements.append(["i1", "import", "fitnesse.slim.test"]) self.statements.append(["m1", "make", "testSlim", "TestSlim"]) self.expectedResults.append(["i1", "OK"]) self.expectedResults.append(["m1", "OK"])
class ListExecutorTest(unittest.TestCase): def setUp(self): self.executor = ListExecutor() self.statements = [] self.expectedResults = [] self.statements.append(["i1", "import", "fitnesse.slim.test"]) self.statements.append(["m1", "make", "testSlim", "TestSlim"]) self.expectedResults.append(["i1", "OK"]) self.expectedResults.append(["m1", "OK"]) def respondsWith(self, expected): self.expectedResults.extend(expected) result = self.executor.execute(self.statements) expectedMap = resultToMap(self.expectedResults) resultMap = resultToMap(result) self.assertEquals(expectedMap, resultMap) def testInvalidOperation(self): self.statements.append(["inv1", "invalidOperation"]) self.assertExceptionReturned("message:<<INVALID_STATEMENT: invalidOperation.>>", "inv1") def testMalformedStatement(self): self.statements.append(["id", "call", "notEnoughArguments"]) self.assertRaises(SlimError, self.assertExceptionReturned, "XX", "id") def assertExceptionReturned(self, message, returnTag): results = resultToMap(self.executor.execute(self.statements)) result = results[returnTag] self.assert_(result.find(EXCEPTION_TAG) != -1) self.assert_(result.find(message) != -1) def testNoSuchInstance(self): self.statements.append(["id", "call", "noSuchInstance", "noSuchMethod"]) self.assertExceptionReturned("message:<<NO_INSTANCE noSuchInstance.>>", "id") def testEmptyListReturnsNicely(self): self.executor.execute(self.statements) self.respondsWith([]) ''' public void createWithFullyQualifiedNameWorks() throws Exception { statements.clear(); statements.add(list("m1", "make", "testSlim", "fitnesse.slim.test.TestSlim")); expectedResults.clear(); respondsWith(list(list("m1", "OK"))); } ''' def testOneFunctionCall(self): self.statements.append(["id", "call", "testSlim", "returnString"]) self.respondsWith([["id", "string"]]) def testCanPassArgumentsToConstructor(self): self.statements.append(["m2", "make", "testSlim2", "TestSlim", "3"]) self.statements.append(["c1", "call", "testSlim2", "returnConstructorArg"]) self.statements.append(["c2", "call", "testSlim", "returnConstructorArg"]) self.respondsWith( [ ["m2", "OK"], ["c1", "3"], ["c2", "0"]]) def testMultiFunctionCall(self): self.statements.append(["id1", "call", "testSlim", "addTo", "1", "2"]) self.statements.append(["id2", "call", "testSlim", "addTo", "3", "4"]) self.respondsWith([["id1", "3"], ["id2", "7"]]) def testCallAndAssign(self): self.statements.append(["id1", "callAndAssign", "v", "testSlim", "addTo", "5", "6"]) self.statements.append(["id2", "call", "testSlim", "echoInt", "$v"]) self.respondsWith([["id1", "11"], ["id2", "11"]]) def testCanReplaceMultipleVariablesInAnArgument(self): self.statements.append(["id1", "callAndAssign", "v1", "testSlim", "echoString", "Bob"]) self.statements.append(["id2", "callAndAssign", "v2", "testSlim", "echoString", "Martin"]) self.statements.append(["id3", "call", "testSlim", "echoString", "name: $v1 $v2"]) self.respondsWith([["id1", "Bob"], ["id2", "Martin"], ["id3", "name: Bob Martin"]]) ''' public void passAndReturnList() throws Exception { List<String> l = list("one", "two"); statements.add(list("id", "call", "testSlim", "echoList", l)); respondsWith(list(list("id", l))); } ''' def testPassAndReturnListWithVariable(self): self.statements.append(["id1", "callAndAssign", "v", "testSlim", "addTo", "3", "4"]) self.statements.append(["id2", "call", "testSlim", "echoList", ["$v"]]) self.respondsWith([["id1", "7"], ["id2", ["7"]]]) def testCallToVoidFunctionReturnsVoidValue(self): self.statements.append(["id", "call", "testSlim", "voidFunction"]) #self.respondsWith([["id", VoidConverter.VOID_TAG]]) def testCallToFunctionReturningNull(self): self.statements.append(["id", "call", "testSlim", "nullString"]) self.respondsWith([["id", "None"]])
class ListExecutorTest(unittest.TestCase): def setUp(self): self.executor = ListExecutor() self.statements = [] self.expectedResults = [] self.statements.append(["i1", "import", "test"]) self.statements.append(["m1", "make", "testSlim", "TestSlim"]) self.expectedResults.append(["i1", "OK"]) self.expectedResults.append(["m1", "OK"]) def respondsWith(self, expected): self.expectedResults.extend(expected) result = self.executor.execute(self.statements) expectedMap = resultToMap(self.expectedResults) resultMap = resultToMap(result) self.assertEquals(expectedMap, resultMap) def testInvalidOperation(self): self.statements.append(["inv1", "invalidOperation"]) self.assertExceptionReturned( "message:<<INVALID_STATEMENT: invalidOperation.>>", "inv1") def testMalformedStatement(self): self.statements.append(["id", "call", "notEnoughArguments"]) self.assertRaises(SlimError, self.assertExceptionReturned, "XX", "id") def assertExceptionReturned(self, message, returnTag): results = resultToMap(self.executor.execute(self.statements)) result = results[returnTag] self.assert_(result.find(EXCEPTION_TAG) != -1) self.assert_(result.find(message) != -1) def testNoSuchInstance(self): self.statements.append( ["id", "call", "noSuchInstance", "noSuchMethod"]) self.assertExceptionReturned("message:<<NO_INSTANCE noSuchInstance.>>", "id") def testEmptyListReturnsNicely(self): self.executor.execute(self.statements) self.respondsWith([]) ''' public void createWithFullyQualifiedNameWorks() throws Exception { statements.clear(); statements.add(list("m1", "make", "testSlim", "test.TestSlim")); expectedResults.clear(); respondsWith(list(list("m1", "OK"))); } ''' def testOneFunctionCall(self): self.statements.append(["id", "call", "testSlim", "returnString"]) self.respondsWith([["id", "string"]]) def testCanPassArgumentsToConstructor(self): self.statements.append(["m2", "make", "testSlim2", "TestSlim", "3"]) self.statements.append( ["c1", "call", "testSlim2", "returnConstructorArg"]) self.statements.append( ["c2", "call", "testSlim", "returnConstructorArg"]) self.respondsWith([["m2", "OK"], ["c1", "3"], ["c2", "0"]]) def testMultiFunctionCall(self): self.statements.append(["id1", "call", "testSlim", "addTo", "1", "2"]) self.statements.append(["id2", "call", "testSlim", "addTo", "3", "4"]) self.respondsWith([["id1", "3"], ["id2", "7"]]) def testCallAndAssign(self): self.statements.append( ["id1", "callAndAssign", "v", "testSlim", "addTo", "5", "6"]) self.statements.append(["id2", "call", "testSlim", "echoInt", "$v"]) self.respondsWith([["id1", "11"], ["id2", "11"]]) def testCanReplaceMultipleVariablesInAnArgument(self): self.statements.append( ["id1", "callAndAssign", "v1", "testSlim", "echoString", "Bob"]) self.statements.append( ["id2", "callAndAssign", "v2", "testSlim", "echoString", "Martin"]) self.statements.append( ["id3", "call", "testSlim", "echoString", "name: $v1 $v2"]) self.respondsWith([["id1", "Bob"], ["id2", "Martin"], ["id3", "name: Bob Martin"]]) ''' public void passAndReturnList() throws Exception { List<String> l = list("one", "two"); statements.add(list("id", "call", "testSlim", "echoList", l)); respondsWith(list(list("id", l))); } ''' def testPassAndReturnListWithVariable(self): self.statements.append( ["id1", "callAndAssign", "v", "testSlim", "addTo", "3", "4"]) self.statements.append(["id2", "call", "testSlim", "echoList", ["$v"]]) self.respondsWith([["id1", "7"], ["id2", ["7"]]]) def testCallToVoidFunctionReturnsVoidValue(self): self.statements.append(["id", "call", "testSlim", "voidFunction"]) #self.respondsWith([["id", VoidConverter.VOID_TAG]]) def testCallToFunctionReturningNull(self): self.statements.append(["id", "call", "testSlim", "nullString"]) self.respondsWith([["id", "None"]])
def setUp(self): self.executor = ListExecutor() self.statements = [] self.expectedResults = []