diff options
author | Tor Norbye <tnorbye@google.com> | 2014-08-20 17:28:18 -0700 |
---|---|---|
committer | Tor Norbye <tnorbye@google.com> | 2014-08-20 17:28:18 -0700 |
commit | d76e3920c56d37c942092b7dca20fcaded81c0a5 (patch) | |
tree | 80a55c7b59c38377216daaada4e8bc47b69ceb9a /python/helpers/pydev/tests_python/test_save_locals.py | |
parent | 3b37877a2561bf9fbe072253a18688807d523505 (diff) | |
parent | 1aa2e09bdbd413eacb677e9fa4b50630530d0656 (diff) | |
download | idea-d76e3920c56d37c942092b7dca20fcaded81c0a5.tar.gz |
Merge remote-tracking branch 'aosp/upstream-master' into merge
Conflicts:
.idea/modules.xml
platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdatesXmlLoader.java
Change-Id: Id899dae9a1e1c79272f8a70e14a7dcef4f760d7f
Diffstat (limited to 'python/helpers/pydev/tests_python/test_save_locals.py')
-rw-r--r-- | python/helpers/pydev/tests_python/test_save_locals.py | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/python/helpers/pydev/tests_python/test_save_locals.py b/python/helpers/pydev/tests_python/test_save_locals.py new file mode 100644 index 000000000000..fe65d4d438d1 --- /dev/null +++ b/python/helpers/pydev/tests_python/test_save_locals.py @@ -0,0 +1,99 @@ +import inspect +import sys +import unittest + +from pydevd_save_locals import save_locals + + +def use_save_locals(name, value): + """ + Attempt to set the local of the given name to value, using locals_to_fast. + """ + frame = inspect.currentframe().f_back + locals_dict = frame.f_locals + locals_dict[name] = value + + save_locals(frame) + + +def test_method(fn): + """ + A harness for testing methods that attempt to modify the values of locals on the stack. + """ + x = 1 + + # The method 'fn' should attempt to set x = 2 in the current frame. + fn('x', 2) + + return x + + + +class TestSetLocals(unittest.TestCase): + """ + Test setting locals in one function from another function using several approaches. + """ + + + def test_set_locals_using_save_locals(self): + x = test_method(use_save_locals) + self.assertEqual(x, 2) # Expected to succeed + + + def test_frame_simple_change(self): + frame = sys._getframe() + a = 20 + frame.f_locals['a'] = 50 + save_locals(frame) + self.assertEquals(50, a) + + + def test_frame_co_freevars(self): + + outer_var = 20 + + def func(): + frame = sys._getframe() + frame.f_locals['outer_var'] = 50 + save_locals(frame) + self.assertEquals(50, outer_var) + + func() + + def test_frame_co_cellvars(self): + + def check_co_vars(a): + frame = sys._getframe() + def function2(): + print a + + assert 'a' in frame.f_code.co_cellvars + frame = sys._getframe() + frame.f_locals['a'] = 50 + save_locals(frame) + self.assertEquals(50, a) + + check_co_vars(1) + + + def test_frame_change_in_inner_frame(self): + def change(f): + self.assert_(f is not sys._getframe()) + f.f_locals['a']= 50 + save_locals(f) + + + frame = sys._getframe() + a = 20 + change(frame) + self.assertEquals(50, a) + + +if __name__ == '__main__': + suite = unittest.TestSuite() +# suite.addTest(TestSetLocals('test_set_locals_using_dict')) +# #suite.addTest(Test('testCase10a')) +# unittest.TextTestRunner(verbosity=3).run(suite) + + suite = unittest.makeSuite(TestSetLocals) + unittest.TextTestRunner(verbosity=3).run(suite) |