186 self.writestream = None |
186 self.writestream = None |
187 self.errorstream = None |
187 self.errorstream = None |
188 self.pollingDisabled = False |
188 self.pollingDisabled = False |
189 |
189 |
190 self.callTraceEnabled = None |
190 self.callTraceEnabled = None |
|
191 |
|
192 self.disassembly = None |
191 |
193 |
192 self.variant = 'You should not see this' |
194 self.variant = 'You should not see this' |
193 |
195 |
194 self.compile_command = codeop.CommandCompiler() |
196 self.compile_command = codeop.CommandCompiler() |
195 |
197 |
345 stack = self.currentThread.getStack() |
347 stack = self.currentThread.getStack() |
346 self.sendJsonCommand("ResponseStack", { |
348 self.sendJsonCommand("ResponseStack", { |
347 "stack": stack, |
349 "stack": stack, |
348 }) |
350 }) |
349 |
351 |
|
352 elif method == "RequestDisassembly": |
|
353 if self.disassembly is not None: |
|
354 self.sendJsonCommand("ResponseDisassembly", self.disassembly) |
|
355 else: |
|
356 self.sendJsonCommand("ResponseDisassembly", {}) |
|
357 |
350 elif method == "RequestCapabilities": |
358 elif method == "RequestCapabilities": |
351 clientType = "Python3" |
359 clientType = "Python3" |
352 self.sendJsonCommand("ResponseCapabilities", { |
360 self.sendJsonCommand("ResponseCapabilities", { |
353 "capabilities": self.__clientCapabilities(), |
361 "capabilities": self.__clientCapabilities(), |
354 "clientType": clientType |
362 "clientType": clientType |
387 os.environ[key] = value |
395 os.environ[key] = value |
388 |
396 |
389 elif method == "RequestLoad": |
397 elif method == "RequestLoad": |
390 self._fncache = {} |
398 self._fncache = {} |
391 self.dircache = [] |
399 self.dircache = [] |
|
400 self.disassembly = None |
392 sys.argv = [] |
401 sys.argv = [] |
393 self.__setCoding(params["filename"]) |
402 self.__setCoding(params["filename"]) |
394 sys.argv.append(params["filename"]) |
403 sys.argv.append(params["filename"]) |
395 sys.argv.extend(params["argv"]) |
404 sys.argv.extend(params["argv"]) |
396 sys.path = self.__getSysPath(os.path.dirname(sys.argv[0])) |
405 sys.path = self.__getSysPath(os.path.dirname(sys.argv[0])) |
427 if code: |
436 if code: |
428 sys.setprofile(self.callTraceEnabled) |
437 sys.setprofile(self.callTraceEnabled) |
429 self.mainThread.run(code, self.debugMod.__dict__, debug=True) |
438 self.mainThread.run(code, self.debugMod.__dict__, debug=True) |
430 |
439 |
431 elif method == "RequestRun": |
440 elif method == "RequestRun": |
|
441 self.disassembly = None |
432 sys.argv = [] |
442 sys.argv = [] |
433 self.__setCoding(params["filename"]) |
443 self.__setCoding(params["filename"]) |
434 sys.argv.append(params["filename"]) |
444 sys.argv.append(params["filename"]) |
435 sys.argv.extend(params["argv"]) |
445 sys.argv.extend(params["argv"]) |
436 sys.path = self.__getSysPath(os.path.dirname(sys.argv[0])) |
446 sys.path = self.__getSysPath(os.path.dirname(sys.argv[0])) |
462 if code: |
472 if code: |
463 self.mainThread.run(code, self.debugMod.__dict__, debug=False) |
473 self.mainThread.run(code, self.debugMod.__dict__, debug=False) |
464 |
474 |
465 elif method == "RequestCoverage": |
475 elif method == "RequestCoverage": |
466 from coverage import Coverage |
476 from coverage import Coverage |
|
477 self.disassembly = None |
467 sys.argv = [] |
478 sys.argv = [] |
468 self.__setCoding(params["filename"]) |
479 self.__setCoding(params["filename"]) |
469 sys.argv.append(params["filename"]) |
480 sys.argv.append(params["filename"]) |
470 sys.argv.extend(params["argv"]) |
481 sys.argv.extend(params["argv"]) |
471 sys.path = self.__getSysPath(os.path.dirname(sys.argv[0])) |
482 sys.path = self.__getSysPath(os.path.dirname(sys.argv[0])) |
498 self.cover.save() |
509 self.cover.save() |
499 |
510 |
500 elif method == "RequestProfile": |
511 elif method == "RequestProfile": |
501 sys.setprofile(None) |
512 sys.setprofile(None) |
502 import PyProfile |
513 import PyProfile |
|
514 self.disassembly = None |
503 sys.argv = [] |
515 sys.argv = [] |
504 self.__setCoding(params["filename"]) |
516 self.__setCoding(params["filename"]) |
505 sys.argv.append(params["filename"]) |
517 sys.argv.append(params["filename"]) |
506 sys.argv.extend(params["argv"]) |
518 sys.argv.extend(params["argv"]) |
507 sys.path = self.__getSysPath(os.path.dirname(sys.argv[0])) |
519 sys.path = self.__getSysPath(os.path.dirname(sys.argv[0])) |
868 "message": "", |
880 "message": "", |
869 }) |
881 }) |
870 |
882 |
871 elif method == "RequestUTRun": |
883 elif method == "RequestUTRun": |
872 from DCTestResult import DCTestResult |
884 from DCTestResult import DCTestResult |
|
885 self.disassembly = None |
873 self.testResult = DCTestResult(self, params["failfast"]) |
886 self.testResult = DCTestResult(self, params["failfast"]) |
874 if self.cover: |
887 if self.cover: |
875 self.cover.start() |
888 self.cover.start() |
876 self.debugging = params["debug"] |
889 self.debugging = params["debug"] |
877 if params["debug"]: |
890 if params["debug"]: |
928 test.__module__.replace(".", os.sep) + ".py") |
941 test.__module__.replace(".", os.sep) + ".py") |
929 testCases.append( |
942 testCases.append( |
930 (test.id(), test.shortDescription(), filename) |
943 (test.id(), test.shortDescription(), filename) |
931 ) |
944 ) |
932 return testCases |
945 return testCases |
|
946 |
|
947 def setDisassembly(self, disassembly): |
|
948 """ |
|
949 Public method to store a disassembly of the code object raising an |
|
950 exception. |
|
951 |
|
952 @param disassembly dictionary containing the disassembly information |
|
953 @type dict |
|
954 """ |
|
955 self.disassembly = disassembly |
933 |
956 |
934 def sendJsonCommand(self, method, params): |
957 def sendJsonCommand(self, method, params): |
935 """ |
958 """ |
936 Public method to send a single command or response to the IDE. |
959 Public method to send a single command or response to the IDE. |
937 |
960 |