summaryrefslogtreecommitdiff
path: root/python/helpers/pydev/tests_python/test_additional_thread_info.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/helpers/pydev/tests_python/test_additional_thread_info.py')
-rw-r--r--python/helpers/pydev/tests_python/test_additional_thread_info.py111
1 files changed, 111 insertions, 0 deletions
diff --git a/python/helpers/pydev/tests_python/test_additional_thread_info.py b/python/helpers/pydev/tests_python/test_additional_thread_info.py
new file mode 100644
index 000000000000..6ae260d6a658
--- /dev/null
+++ b/python/helpers/pydev/tests_python/test_additional_thread_info.py
@@ -0,0 +1,111 @@
+import sys
+import os
+sys.path.insert(0, os.path.split(os.path.split(__file__)[0])[0])
+
+from pydevd_constants import Null
+import unittest
+
+#=======================================================================================================================
+# TestCase
+#=======================================================================================================================
+class TestCase(unittest.TestCase):
+ '''
+ Used for profiling the PyDBAdditionalThreadInfoWithoutCurrentFramesSupport version
+ '''
+
+ def testMetNoFramesSupport(self):
+ from pydevd_additional_thread_info import PyDBAdditionalThreadInfoWithoutCurrentFramesSupport
+ info = PyDBAdditionalThreadInfoWithoutCurrentFramesSupport()
+
+ mainDebugger = Null()
+ filename = ''
+ base = ''
+ additionalInfo = Null()
+ t = Null()
+ frame = Null()
+
+ times = 10
+ for i in range(times):
+ info.CreateDbFrame((mainDebugger, filename, additionalInfo, t, frame))
+
+ #we haven't kept any reference, so, they must have been garbage-collected already!
+ self.assertEqual(0, len(info.IterFrames()))
+
+ kept_frames = []
+ for i in range(times):
+ kept_frames.append(info.CreateDbFrame((mainDebugger, filename, additionalInfo, t, frame)))
+
+ for i in range(times):
+ self.assertEqual(times, len(info.IterFrames()))
+
+
+ def testStartNewThread(self):
+ import pydevd
+ import thread
+ original = thread.start_new_thread
+ thread.start_new_thread = pydevd.pydev_start_new_thread
+ try:
+ found = {}
+ def function(a, b, *args, **kwargs):
+ found['a'] = a
+ found['b'] = b
+ found['args'] = args
+ found['kwargs'] = kwargs
+ thread.start_new_thread(function, (1,2,3,4), {'d':1, 'e':2})
+ import time
+ for _i in xrange(20):
+ if len(found) == 4:
+ break
+ time.sleep(.1)
+ else:
+ raise AssertionError('Could not get to condition before 2 seconds')
+
+ self.assertEqual({'a': 1, 'b': 2, 'args': (3, 4), 'kwargs': {'e': 2, 'd': 1}}, found)
+ finally:
+ thread.start_new_thread = original
+
+
+ def testStartNewThread2(self):
+ import pydevd
+ import thread
+
+ original = thread.start_new_thread
+ thread.start_new_thread = pydevd.pydev_start_new_thread
+ try:
+ found = {}
+
+ class F(object):
+ start_new_thread = thread.start_new_thread
+
+ def start_it(self):
+ try:
+ self.start_new_thread(self.function, (1,2,3,4), {'d':1, 'e':2})
+ except:
+ import traceback;traceback.print_exc()
+
+ def function(self, a, b, *args, **kwargs):
+ found['a'] = a
+ found['b'] = b
+ found['args'] = args
+ found['kwargs'] = kwargs
+
+ f = F()
+ f.start_it()
+ import time
+ for _i in xrange(20):
+ if len(found) == 4:
+ break
+ time.sleep(.1)
+ else:
+ raise AssertionError('Could not get to condition before 2 seconds')
+
+ self.assertEqual({'a': 1, 'b': 2, 'args': (3, 4), 'kwargs': {'e': 2, 'd': 1}}, found)
+ finally:
+ thread.start_new_thread = original
+
+
+#=======================================================================================================================
+# main
+#=======================================================================================================================
+if __name__ == '__main__':
+ unittest.main()