annotate tests/test_pymonkey.py @ 141:96dc1beefc00

Regenerated docs.
author Atul Varma <varmaa@toolness.com>
date Mon, 24 Aug 2009 21:54:20 -0700
parents ce8099238c01
children a2c1db5ece2b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
127
4179d1e1a75c Added a test for context cyclic gc support and fixed a bug revealed by it.
Atul Varma <varmaa@toolness.com>
parents: 126
diff changeset
1 import gc
46
a0f677cfc679 Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents: 45
diff changeset
2 import sys
0
21aa6e3abb49 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
3 import unittest
59
fb97bed55789 Added a test that fails b/c of a known bug in pymonkey.
Atul Varma <varmaa@toolness.com>
parents: 57
diff changeset
4 import weakref
66
b49180c39d0a Pymonkey now handles the GIL properly so that Python code can run while JS code does.
Atul Varma <varmaa@toolness.com>
parents: 64
diff changeset
5 import time
b49180c39d0a Pymonkey now handles the GIL properly so that Python code can run while JS code does.
Atul Varma <varmaa@toolness.com>
parents: 64
diff changeset
6 import threading
46
a0f677cfc679 Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents: 45
diff changeset
7
0
21aa6e3abb49 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
8 import pymonkey
21aa6e3abb49 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
9
21aa6e3abb49 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
10 class PymonkeyTests(unittest.TestCase):
16
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
11 def _evaljs(self, code):
9
032cfc448079 Added pymonkey.Runtime and pymonkey.Context as new types.
Atul Varma <varmaa@toolness.com>
parents: 8
diff changeset
12 rt = pymonkey.Runtime()
032cfc448079 Added pymonkey.Runtime and pymonkey.Context as new types.
Atul Varma <varmaa@toolness.com>
parents: 8
diff changeset
13 cx = rt.new_context()
16
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
14 obj = cx.new_object()
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
15 cx.init_standard_classes(obj)
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
16 return cx.evaluate_script(obj, code, '<string>', 1)
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
17
137
f83a1603c417 Added a syntax error test.
Atul Varma <varmaa@toolness.com>
parents: 136
diff changeset
18 def _execjs(self, code):
f83a1603c417 Added a syntax error test.
Atul Varma <varmaa@toolness.com>
parents: 136
diff changeset
19 rt = pymonkey.Runtime()
f83a1603c417 Added a syntax error test.
Atul Varma <varmaa@toolness.com>
parents: 136
diff changeset
20 cx = rt.new_context()
f83a1603c417 Added a syntax error test.
Atul Varma <varmaa@toolness.com>
parents: 136
diff changeset
21 obj = cx.new_object()
f83a1603c417 Added a syntax error test.
Atul Varma <varmaa@toolness.com>
parents: 136
diff changeset
22 cx.init_standard_classes(obj)
140
ce8099238c01 As per a discussion with jorendorff, it looks like we can pass NULL to compile_script(), since we're not using object principals (and instead just using an object capability model for now).
Atul Varma <varmaa@toolness.com>
parents: 138
diff changeset
23 script = cx.compile_script(code, '<string>', 1)
137
f83a1603c417 Added a syntax error test.
Atul Varma <varmaa@toolness.com>
parents: 136
diff changeset
24 return cx.execute_script(obj, script)
f83a1603c417 Added a syntax error test.
Atul Varma <varmaa@toolness.com>
parents: 136
diff changeset
25
31
d0a3f358072a gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents: 29
diff changeset
26 def _evalJsWrappedPyFunc(self, func, code):
24
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 22
diff changeset
27 cx = pymonkey.Runtime().new_context()
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 22
diff changeset
28 obj = cx.new_object()
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 22
diff changeset
29 cx.init_standard_classes(obj)
37
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
30 jsfunc = cx.new_function(func, func.__name__)
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
31 cx.define_property(obj, func.__name__, jsfunc)
31
d0a3f358072a gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents: 29
diff changeset
32 return cx.evaluate_script(obj, code, '<string>', 1)
24
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 22
diff changeset
33
46
a0f677cfc679 Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents: 45
diff changeset
34 def assertRaises(self, exctype, func, *args):
a0f677cfc679 Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents: 45
diff changeset
35 was_raised = False
a0f677cfc679 Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents: 45
diff changeset
36 try:
a0f677cfc679 Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents: 45
diff changeset
37 func(*args)
a0f677cfc679 Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents: 45
diff changeset
38 except exctype, e:
a0f677cfc679 Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents: 45
diff changeset
39 self.last_exception = e
a0f677cfc679 Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents: 45
diff changeset
40 was_raised = True
a0f677cfc679 Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents: 45
diff changeset
41 self.assertTrue(was_raised)
a0f677cfc679 Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents: 45
diff changeset
42
137
f83a1603c417 Added a syntax error test.
Atul Varma <varmaa@toolness.com>
parents: 136
diff changeset
43 def testSyntaxErrorsAreRaised(self):
f83a1603c417 Added a syntax error test.
Atul Varma <varmaa@toolness.com>
parents: 136
diff changeset
44 for run in [self._evaljs, self._execjs]:
f83a1603c417 Added a syntax error test.
Atul Varma <varmaa@toolness.com>
parents: 136
diff changeset
45 self.assertRaises(pymonkey.error, run, '5f')
f83a1603c417 Added a syntax error test.
Atul Varma <varmaa@toolness.com>
parents: 136
diff changeset
46 self.assertEqual(
f83a1603c417 Added a syntax error test.
Atul Varma <varmaa@toolness.com>
parents: 136
diff changeset
47 self.last_exception.args[1],
f83a1603c417 Added a syntax error test.
Atul Varma <varmaa@toolness.com>
parents: 136
diff changeset
48 u'SyntaxError: missing ; before statement'
f83a1603c417 Added a syntax error test.
Atul Varma <varmaa@toolness.com>
parents: 136
diff changeset
49 )
f83a1603c417 Added a syntax error test.
Atul Varma <varmaa@toolness.com>
parents: 136
diff changeset
50
138
1a982ee56458 A script's bytecode is now exposed as a buffer object.
Atul Varma <varmaa@toolness.com>
parents: 137
diff changeset
51 def testScriptIsExposedAsBuffer(self):
1a982ee56458 A script's bytecode is now exposed as a buffer object.
Atul Varma <varmaa@toolness.com>
parents: 137
diff changeset
52 rt = pymonkey.Runtime()
1a982ee56458 A script's bytecode is now exposed as a buffer object.
Atul Varma <varmaa@toolness.com>
parents: 137
diff changeset
53 cx = rt.new_context()
1a982ee56458 A script's bytecode is now exposed as a buffer object.
Atul Varma <varmaa@toolness.com>
parents: 137
diff changeset
54 obj = cx.new_object()
140
ce8099238c01 As per a discussion with jorendorff, it looks like we can pass NULL to compile_script(), since we're not using object principals (and instead just using an object capability model for now).
Atul Varma <varmaa@toolness.com>
parents: 138
diff changeset
55 script = cx.compile_script('foo', '<string>', 1)
138
1a982ee56458 A script's bytecode is now exposed as a buffer object.
Atul Varma <varmaa@toolness.com>
parents: 137
diff changeset
56 self.assertTrue(len(buffer(script)) > 0)
1a982ee56458 A script's bytecode is now exposed as a buffer object.
Atul Varma <varmaa@toolness.com>
parents: 137
diff changeset
57
136
b4e216d06e83 Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents: 133
diff changeset
58 def testCompileScriptWorks(self):
137
f83a1603c417 Added a syntax error test.
Atul Varma <varmaa@toolness.com>
parents: 136
diff changeset
59 self.assertEqual(self._execjs('5 + 1'), 6)
136
b4e216d06e83 Added pymonkey.Script, which wraps a JSScript object, and context.compile_script()/execute_script().
Atul Varma <varmaa@toolness.com>
parents: 133
diff changeset
60
120
856ca7a139e4 Pymonkey errors raised as a result of JS exceptions now contain both the string representation and the original Python-wrapped JS object that was thrown (i.e., the exception).
Atul Varma <varmaa@toolness.com>
parents: 117
diff changeset
61 def testErrorsRaisedIncludeStrings(self):
856ca7a139e4 Pymonkey errors raised as a result of JS exceptions now contain both the string representation and the original Python-wrapped JS object that was thrown (i.e., the exception).
Atul Varma <varmaa@toolness.com>
parents: 117
diff changeset
62 self.assertRaises(pymonkey.error, self._evaljs, 'boop()')
856ca7a139e4 Pymonkey errors raised as a result of JS exceptions now contain both the string representation and the original Python-wrapped JS object that was thrown (i.e., the exception).
Atul Varma <varmaa@toolness.com>
parents: 117
diff changeset
63 self.assertEqual(self.last_exception.args[1],
856ca7a139e4 Pymonkey errors raised as a result of JS exceptions now contain both the string representation and the original Python-wrapped JS object that was thrown (i.e., the exception).
Atul Varma <varmaa@toolness.com>
parents: 117
diff changeset
64 u'ReferenceError: boop is not defined')
856ca7a139e4 Pymonkey errors raised as a result of JS exceptions now contain both the string representation and the original Python-wrapped JS object that was thrown (i.e., the exception).
Atul Varma <varmaa@toolness.com>
parents: 117
diff changeset
65
87
345d4c0e3dd3 Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents: 86
diff changeset
66 def testThreadSafetyExceptionIsRaised(self):
345d4c0e3dd3 Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents: 86
diff changeset
67 stuff = {}
345d4c0e3dd3 Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents: 86
diff changeset
68 def make_runtime():
345d4c0e3dd3 Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents: 86
diff changeset
69 stuff['rt'] = pymonkey.Runtime()
345d4c0e3dd3 Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents: 86
diff changeset
70 thread = threading.Thread(target = make_runtime)
345d4c0e3dd3 Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents: 86
diff changeset
71 thread.start()
345d4c0e3dd3 Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents: 86
diff changeset
72 thread.join()
345d4c0e3dd3 Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents: 86
diff changeset
73 self.assertRaises(pymonkey.error,
345d4c0e3dd3 Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents: 86
diff changeset
74 stuff['rt'].new_context)
99
e4f7cc6beafe Changed exception.message to exception.args[0], to satisfy a deprecation warning in Python 2.6.
Atul Varma <varmaa@toolness.com>
parents: 95
diff changeset
75 self.assertEqual(self.last_exception.args[0],
87
345d4c0e3dd3 Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents: 86
diff changeset
76 'Function called from wrong thread')
345d4c0e3dd3 Thread safety exceptions are now properly raised by all relevant pymonkey functions.
Atul Varma <varmaa@toolness.com>
parents: 86
diff changeset
77
81
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 77
diff changeset
78 def testClearObjectPrivateWorks(self):
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 77
diff changeset
79 class Foo(object):
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 77
diff changeset
80 pass
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 77
diff changeset
81 pyobj = Foo()
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 77
diff changeset
82 cx = pymonkey.Runtime().new_context()
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 77
diff changeset
83 obj = cx.new_object(pyobj)
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 77
diff changeset
84 pyobj = weakref.ref(pyobj)
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 77
diff changeset
85 self.assertEqual(pyobj(), cx.get_object_private(obj))
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 77
diff changeset
86 cx.clear_object_private(obj)
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 77
diff changeset
87 self.assertEqual(cx.get_object_private(obj), None)
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 77
diff changeset
88 self.assertEqual(pyobj(), None)
99138265d4b9 Added a context.clear_object_private() function.
Atul Varma <varmaa@toolness.com>
parents: 77
diff changeset
89
71
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 66
diff changeset
90 def testGetObjectPrivateWorks(self):
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 66
diff changeset
91 class Foo(object):
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 66
diff changeset
92 pass
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 66
diff changeset
93 pyobj = Foo()
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 66
diff changeset
94 cx = pymonkey.Runtime().new_context()
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 66
diff changeset
95 obj = cx.new_object(pyobj)
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 66
diff changeset
96 pyobj = weakref.ref(pyobj)
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 66
diff changeset
97 self.assertEqual(pyobj(), cx.get_object_private(obj))
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 66
diff changeset
98 del obj
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 66
diff changeset
99 del cx
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 66
diff changeset
100 self.assertEqual(pyobj(), None)
9b3f4e53e365 Added context.get_object_private() and an optional private object parameter to context.new_object().
Atul Varma <varmaa@toolness.com>
parents: 66
diff changeset
101
127
4179d1e1a75c Added a test for context cyclic gc support and fixed a bug revealed by it.
Atul Varma <varmaa@toolness.com>
parents: 126
diff changeset
102 def testContextSupportsCyclicGc(self):
4179d1e1a75c Added a test for context cyclic gc support and fixed a bug revealed by it.
Atul Varma <varmaa@toolness.com>
parents: 126
diff changeset
103 def makecx():
4179d1e1a75c Added a test for context cyclic gc support and fixed a bug revealed by it.
Atul Varma <varmaa@toolness.com>
parents: 126
diff changeset
104 cx = pymonkey.Runtime().new_context()
4179d1e1a75c Added a test for context cyclic gc support and fixed a bug revealed by it.
Atul Varma <varmaa@toolness.com>
parents: 126
diff changeset
105
4179d1e1a75c Added a test for context cyclic gc support and fixed a bug revealed by it.
Atul Varma <varmaa@toolness.com>
parents: 126
diff changeset
106 def opcb(othercx):
4179d1e1a75c Added a test for context cyclic gc support and fixed a bug revealed by it.
Atul Varma <varmaa@toolness.com>
parents: 126
diff changeset
107 return cx
4179d1e1a75c Added a test for context cyclic gc support and fixed a bug revealed by it.
Atul Varma <varmaa@toolness.com>
parents: 126
diff changeset
108
4179d1e1a75c Added a test for context cyclic gc support and fixed a bug revealed by it.
Atul Varma <varmaa@toolness.com>
parents: 126
diff changeset
109 cx.set_operation_callback(opcb)
4179d1e1a75c Added a test for context cyclic gc support and fixed a bug revealed by it.
Atul Varma <varmaa@toolness.com>
parents: 126
diff changeset
110 return cx
4179d1e1a75c Added a test for context cyclic gc support and fixed a bug revealed by it.
Atul Varma <varmaa@toolness.com>
parents: 126
diff changeset
111
4179d1e1a75c Added a test for context cyclic gc support and fixed a bug revealed by it.
Atul Varma <varmaa@toolness.com>
parents: 126
diff changeset
112 gc.disable()
4179d1e1a75c Added a test for context cyclic gc support and fixed a bug revealed by it.
Atul Varma <varmaa@toolness.com>
parents: 126
diff changeset
113 cx = makecx()
4179d1e1a75c Added a test for context cyclic gc support and fixed a bug revealed by it.
Atul Varma <varmaa@toolness.com>
parents: 126
diff changeset
114 wcx = weakref.ref(cx)
4179d1e1a75c Added a test for context cyclic gc support and fixed a bug revealed by it.
Atul Varma <varmaa@toolness.com>
parents: 126
diff changeset
115 self.assertEqual(wcx(), cx)
4179d1e1a75c Added a test for context cyclic gc support and fixed a bug revealed by it.
Atul Varma <varmaa@toolness.com>
parents: 126
diff changeset
116 del cx
4179d1e1a75c Added a test for context cyclic gc support and fixed a bug revealed by it.
Atul Varma <varmaa@toolness.com>
parents: 126
diff changeset
117 self.assertTrue(wcx())
4179d1e1a75c Added a test for context cyclic gc support and fixed a bug revealed by it.
Atul Varma <varmaa@toolness.com>
parents: 126
diff changeset
118 gc.enable()
4179d1e1a75c Added a test for context cyclic gc support and fixed a bug revealed by it.
Atul Varma <varmaa@toolness.com>
parents: 126
diff changeset
119 gc.collect()
4179d1e1a75c Added a test for context cyclic gc support and fixed a bug revealed by it.
Atul Varma <varmaa@toolness.com>
parents: 126
diff changeset
120 self.assertEqual(wcx(), None)
4179d1e1a75c Added a test for context cyclic gc support and fixed a bug revealed by it.
Atul Varma <varmaa@toolness.com>
parents: 126
diff changeset
121
64
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
122 def testOperationCallbackIsCalled(self):
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
123 def opcb(cx):
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
124 raise Exception("stop eet!")
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
125
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
126 cx = pymonkey.Runtime().new_context()
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
127 cx.set_operation_callback(opcb)
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
128 obj = cx.new_object()
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
129 cx.init_standard_classes(obj)
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
130
66
b49180c39d0a Pymonkey now handles the GIL properly so that Python code can run while JS code does.
Atul Varma <varmaa@toolness.com>
parents: 64
diff changeset
131 def watchdog():
b49180c39d0a Pymonkey now handles the GIL properly so that Python code can run while JS code does.
Atul Varma <varmaa@toolness.com>
parents: 64
diff changeset
132 time.sleep(0.1)
b49180c39d0a Pymonkey now handles the GIL properly so that Python code can run while JS code does.
Atul Varma <varmaa@toolness.com>
parents: 64
diff changeset
133 cx.trigger_operation_callback()
b49180c39d0a Pymonkey now handles the GIL properly so that Python code can run while JS code does.
Atul Varma <varmaa@toolness.com>
parents: 64
diff changeset
134
b49180c39d0a Pymonkey now handles the GIL properly so that Python code can run while JS code does.
Atul Varma <varmaa@toolness.com>
parents: 64
diff changeset
135 thread = threading.Thread(target = watchdog)
b49180c39d0a Pymonkey now handles the GIL properly so that Python code can run while JS code does.
Atul Varma <varmaa@toolness.com>
parents: 64
diff changeset
136 thread.start()
64
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
137
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
138 self.assertRaises(
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
139 pymonkey.error,
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
140 cx.evaluate_script,
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
141 obj, 'while (1) {}', '<string>', 1
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
142 )
fb7e11dec538 Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents: 62
diff changeset
143
57
a2b617731398 pymonkey.undefined now has a 'falsy' value.
Atul Varma <varmaa@toolness.com>
parents: 52
diff changeset
144 def testUndefinedStrIsUndefined(self):
a2b617731398 pymonkey.undefined now has a 'falsy' value.
Atul Varma <varmaa@toolness.com>
parents: 52
diff changeset
145 self.assertEqual(str(pymonkey.undefined),
a2b617731398 pymonkey.undefined now has a 'falsy' value.
Atul Varma <varmaa@toolness.com>
parents: 52
diff changeset
146 "pymonkey.undefined")
a2b617731398 pymonkey.undefined now has a 'falsy' value.
Atul Varma <varmaa@toolness.com>
parents: 52
diff changeset
147
84
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
148 def testJsWrappedPythonFuncHasPrivate(self):
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
149 def foo(cx, this, args):
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
150 pass
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
151
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
152 cx = pymonkey.Runtime().new_context()
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
153 jsfunc = cx.new_function(foo, foo.__name__)
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
154 self.assertEqual(cx.get_object_private(jsfunc), foo)
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
155
59
fb97bed55789 Added a test that fails b/c of a known bug in pymonkey.
Atul Varma <varmaa@toolness.com>
parents: 57
diff changeset
156 def testJsWrappedPythonFuncIsNotGCd(self):
fb97bed55789 Added a test that fails b/c of a known bug in pymonkey.
Atul Varma <varmaa@toolness.com>
parents: 57
diff changeset
157 def define(cx, obj):
fb97bed55789 Added a test that fails b/c of a known bug in pymonkey.
Atul Varma <varmaa@toolness.com>
parents: 57
diff changeset
158 def func(cx, this, args):
fb97bed55789 Added a test that fails b/c of a known bug in pymonkey.
Atul Varma <varmaa@toolness.com>
parents: 57
diff changeset
159 return u'func was called'
fb97bed55789 Added a test that fails b/c of a known bug in pymonkey.
Atul Varma <varmaa@toolness.com>
parents: 57
diff changeset
160 jsfunc = cx.new_function(func, func.__name__)
fb97bed55789 Added a test that fails b/c of a known bug in pymonkey.
Atul Varma <varmaa@toolness.com>
parents: 57
diff changeset
161 cx.define_property(obj, func.__name__, jsfunc)
fb97bed55789 Added a test that fails b/c of a known bug in pymonkey.
Atul Varma <varmaa@toolness.com>
parents: 57
diff changeset
162 return weakref.ref(func)
61
1506350991d4 JS Wrapped python functions are now only GC'd by python once they've first been GC'd by JS.
Atul Varma <varmaa@toolness.com>
parents: 59
diff changeset
163 rt = pymonkey.Runtime()
1506350991d4 JS Wrapped python functions are now only GC'd by python once they've first been GC'd by JS.
Atul Varma <varmaa@toolness.com>
parents: 59
diff changeset
164 cx = rt.new_context()
59
fb97bed55789 Added a test that fails b/c of a known bug in pymonkey.
Atul Varma <varmaa@toolness.com>
parents: 57
diff changeset
165 obj = cx.new_object()
fb97bed55789 Added a test that fails b/c of a known bug in pymonkey.
Atul Varma <varmaa@toolness.com>
parents: 57
diff changeset
166 cx.init_standard_classes(obj)
fb97bed55789 Added a test that fails b/c of a known bug in pymonkey.
Atul Varma <varmaa@toolness.com>
parents: 57
diff changeset
167 ref = define(cx, obj)
61
1506350991d4 JS Wrapped python functions are now only GC'd by python once they've first been GC'd by JS.
Atul Varma <varmaa@toolness.com>
parents: 59
diff changeset
168 cx.gc()
59
fb97bed55789 Added a test that fails b/c of a known bug in pymonkey.
Atul Varma <varmaa@toolness.com>
parents: 57
diff changeset
169 self.assertNotEqual(ref(), None)
fb97bed55789 Added a test that fails b/c of a known bug in pymonkey.
Atul Varma <varmaa@toolness.com>
parents: 57
diff changeset
170 result = cx.evaluate_script(obj, 'func()', '<string>', 1)
fb97bed55789 Added a test that fails b/c of a known bug in pymonkey.
Atul Varma <varmaa@toolness.com>
parents: 57
diff changeset
171 self.assertEqual(result, u'func was called')
fb97bed55789 Added a test that fails b/c of a known bug in pymonkey.
Atul Varma <varmaa@toolness.com>
parents: 57
diff changeset
172
61
1506350991d4 JS Wrapped python functions are now only GC'd by python once they've first been GC'd by JS.
Atul Varma <varmaa@toolness.com>
parents: 59
diff changeset
173 # Now ensure that the wrapped function is GC'd when it's
1506350991d4 JS Wrapped python functions are now only GC'd by python once they've first been GC'd by JS.
Atul Varma <varmaa@toolness.com>
parents: 59
diff changeset
174 # no longer reachable from JS space.
1506350991d4 JS Wrapped python functions are now only GC'd by python once they've first been GC'd by JS.
Atul Varma <varmaa@toolness.com>
parents: 59
diff changeset
175 cx.define_property(obj, 'func', 0)
1506350991d4 JS Wrapped python functions are now only GC'd by python once they've first been GC'd by JS.
Atul Varma <varmaa@toolness.com>
parents: 59
diff changeset
176 cx.gc()
1506350991d4 JS Wrapped python functions are now only GC'd by python once they've first been GC'd by JS.
Atul Varma <varmaa@toolness.com>
parents: 59
diff changeset
177 self.assertEqual(ref(), None)
1506350991d4 JS Wrapped python functions are now only GC'd by python once they've first been GC'd by JS.
Atul Varma <varmaa@toolness.com>
parents: 59
diff changeset
178
84
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
179 def testCircularJsWrappedPythonFuncIsGCdIfPrivateCleared(self):
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
180 def define(cx, obj):
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
181 rt = cx.get_runtime()
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
182 def func(cx, this, args):
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
183 # Oh noes, a circular reference is born!
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
184 rt
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
185 jsfunc = cx.new_function(func, func.__name__)
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
186 cx.define_property(obj, func.__name__, jsfunc)
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
187 return (jsfunc, weakref.ref(func))
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
188 rt = pymonkey.Runtime()
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
189 cx = rt.new_context()
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
190 obj = cx.new_object()
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
191 cx.init_standard_classes(obj)
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
192 jsfunc, ref = define(cx, obj)
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
193
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
194 # This will break the circular reference.
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
195 cx.clear_object_private(jsfunc)
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
196
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
197 del jsfunc
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
198 del rt
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
199 del cx
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
200 del obj
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
201 self.assertEqual(ref(), None)
10205d88f6ff JS-wrapped Python functions can now be passed to context.get_object_private() and context.clear_object_private(), which allows cycles to be manually broken from Python. Far from ideal, but easier than writing a cycle collector for now.
Atul Varma <varmaa@toolness.com>
parents: 81
diff changeset
202
62
2b5696b91b01 Fixed a bug whereby some objects wouldn't be finalized when a runtime was destroyed.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
203 def testJsWrappedPythonFuncIsGCdAtRuntimeDestruction(self):
2b5696b91b01 Fixed a bug whereby some objects wouldn't be finalized when a runtime was destroyed.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
204 def define(cx, obj):
2b5696b91b01 Fixed a bug whereby some objects wouldn't be finalized when a runtime was destroyed.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
205 def func(cx, this, args):
2b5696b91b01 Fixed a bug whereby some objects wouldn't be finalized when a runtime was destroyed.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
206 return u'func was called'
2b5696b91b01 Fixed a bug whereby some objects wouldn't be finalized when a runtime was destroyed.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
207 jsfunc = cx.new_function(func, func.__name__)
2b5696b91b01 Fixed a bug whereby some objects wouldn't be finalized when a runtime was destroyed.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
208 cx.define_property(obj, func.__name__, jsfunc)
2b5696b91b01 Fixed a bug whereby some objects wouldn't be finalized when a runtime was destroyed.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
209 return weakref.ref(func)
2b5696b91b01 Fixed a bug whereby some objects wouldn't be finalized when a runtime was destroyed.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
210 rt = pymonkey.Runtime()
2b5696b91b01 Fixed a bug whereby some objects wouldn't be finalized when a runtime was destroyed.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
211 cx = rt.new_context()
2b5696b91b01 Fixed a bug whereby some objects wouldn't be finalized when a runtime was destroyed.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
212 obj = cx.new_object()
2b5696b91b01 Fixed a bug whereby some objects wouldn't be finalized when a runtime was destroyed.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
213 cx.init_standard_classes(obj)
2b5696b91b01 Fixed a bug whereby some objects wouldn't be finalized when a runtime was destroyed.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
214 ref = define(cx, obj)
2b5696b91b01 Fixed a bug whereby some objects wouldn't be finalized when a runtime was destroyed.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
215 del rt
2b5696b91b01 Fixed a bug whereby some objects wouldn't be finalized when a runtime was destroyed.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
216 del cx
2b5696b91b01 Fixed a bug whereby some objects wouldn't be finalized when a runtime was destroyed.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
217 del obj
2b5696b91b01 Fixed a bug whereby some objects wouldn't be finalized when a runtime was destroyed.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
218 self.assertEqual(ref(), None)
2b5696b91b01 Fixed a bug whereby some objects wouldn't be finalized when a runtime was destroyed.
Atul Varma <varmaa@toolness.com>
parents: 61
diff changeset
219
86
16a3e99e9b77 JS-wrapped Python functions that have had their Python functions cleared by context.clear_object_private() now throw appropriate JS exceptions when called.
Atul Varma <varmaa@toolness.com>
parents: 84
diff changeset
220 def testJsWrappedPythonFuncThrowsExcIfPrivateCleared(self):
16a3e99e9b77 JS-wrapped Python functions that have had their Python functions cleared by context.clear_object_private() now throw appropriate JS exceptions when called.
Atul Varma <varmaa@toolness.com>
parents: 84
diff changeset
221 def func(cx, this, args):
16a3e99e9b77 JS-wrapped Python functions that have had their Python functions cleared by context.clear_object_private() now throw appropriate JS exceptions when called.
Atul Varma <varmaa@toolness.com>
parents: 84
diff changeset
222 return True
16a3e99e9b77 JS-wrapped Python functions that have had their Python functions cleared by context.clear_object_private() now throw appropriate JS exceptions when called.
Atul Varma <varmaa@toolness.com>
parents: 84
diff changeset
223
16a3e99e9b77 JS-wrapped Python functions that have had their Python functions cleared by context.clear_object_private() now throw appropriate JS exceptions when called.
Atul Varma <varmaa@toolness.com>
parents: 84
diff changeset
224 code = "func()"
16a3e99e9b77 JS-wrapped Python functions that have had their Python functions cleared by context.clear_object_private() now throw appropriate JS exceptions when called.
Atul Varma <varmaa@toolness.com>
parents: 84
diff changeset
225 cx = pymonkey.Runtime().new_context()
16a3e99e9b77 JS-wrapped Python functions that have had their Python functions cleared by context.clear_object_private() now throw appropriate JS exceptions when called.
Atul Varma <varmaa@toolness.com>
parents: 84
diff changeset
226 obj = cx.new_object()
16a3e99e9b77 JS-wrapped Python functions that have had their Python functions cleared by context.clear_object_private() now throw appropriate JS exceptions when called.
Atul Varma <varmaa@toolness.com>
parents: 84
diff changeset
227 cx.init_standard_classes(obj)
16a3e99e9b77 JS-wrapped Python functions that have had their Python functions cleared by context.clear_object_private() now throw appropriate JS exceptions when called.
Atul Varma <varmaa@toolness.com>
parents: 84
diff changeset
228 jsfunc = cx.new_function(func, func.__name__)
16a3e99e9b77 JS-wrapped Python functions that have had their Python functions cleared by context.clear_object_private() now throw appropriate JS exceptions when called.
Atul Varma <varmaa@toolness.com>
parents: 84
diff changeset
229 cx.define_property(obj, func.__name__, jsfunc)
16a3e99e9b77 JS-wrapped Python functions that have had their Python functions cleared by context.clear_object_private() now throw appropriate JS exceptions when called.
Atul Varma <varmaa@toolness.com>
parents: 84
diff changeset
230 cx.clear_object_private(jsfunc)
16a3e99e9b77 JS-wrapped Python functions that have had their Python functions cleared by context.clear_object_private() now throw appropriate JS exceptions when called.
Atul Varma <varmaa@toolness.com>
parents: 84
diff changeset
231 self.assertRaises(pymonkey.error,
16a3e99e9b77 JS-wrapped Python functions that have had their Python functions cleared by context.clear_object_private() now throw appropriate JS exceptions when called.
Atul Varma <varmaa@toolness.com>
parents: 84
diff changeset
232 cx.evaluate_script,
16a3e99e9b77 JS-wrapped Python functions that have had their Python functions cleared by context.clear_object_private() now throw appropriate JS exceptions when called.
Atul Varma <varmaa@toolness.com>
parents: 84
diff changeset
233 obj, code, '<string>', 1)
16a3e99e9b77 JS-wrapped Python functions that have had their Python functions cleared by context.clear_object_private() now throw appropriate JS exceptions when called.
Atul Varma <varmaa@toolness.com>
parents: 84
diff changeset
234 self.assertEqual(
99
e4f7cc6beafe Changed exception.message to exception.args[0], to satisfy a deprecation warning in Python 2.6.
Atul Varma <varmaa@toolness.com>
parents: 95
diff changeset
235 self._tostring(cx, self.last_exception.args[0]),
86
16a3e99e9b77 JS-wrapped Python functions that have had their Python functions cleared by context.clear_object_private() now throw appropriate JS exceptions when called.
Atul Varma <varmaa@toolness.com>
parents: 84
diff changeset
236 "Error: Wrapped Python function no longer exists"
16a3e99e9b77 JS-wrapped Python functions that have had their Python functions cleared by context.clear_object_private() now throw appropriate JS exceptions when called.
Atul Varma <varmaa@toolness.com>
parents: 84
diff changeset
237 )
16a3e99e9b77 JS-wrapped Python functions that have had their Python functions cleared by context.clear_object_private() now throw appropriate JS exceptions when called.
Atul Varma <varmaa@toolness.com>
parents: 84
diff changeset
238
43
5727675b1bcb JS-wrapped python functions now take a context object as their first parameter.
Atul Varma <varmaa@toolness.com>
parents: 41
diff changeset
239 def testJsWrappedPythonFuncPassesContext(self):
5727675b1bcb JS-wrapped python functions now take a context object as their first parameter.
Atul Varma <varmaa@toolness.com>
parents: 41
diff changeset
240 contexts = []
5727675b1bcb JS-wrapped python functions now take a context object as their first parameter.
Atul Varma <varmaa@toolness.com>
parents: 41
diff changeset
241
52
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
242 def func(cx, this, args):
43
5727675b1bcb JS-wrapped python functions now take a context object as their first parameter.
Atul Varma <varmaa@toolness.com>
parents: 41
diff changeset
243 contexts.append(cx)
5727675b1bcb JS-wrapped python functions now take a context object as their first parameter.
Atul Varma <varmaa@toolness.com>
parents: 41
diff changeset
244 return True
5727675b1bcb JS-wrapped python functions now take a context object as their first parameter.
Atul Varma <varmaa@toolness.com>
parents: 41
diff changeset
245
5727675b1bcb JS-wrapped python functions now take a context object as their first parameter.
Atul Varma <varmaa@toolness.com>
parents: 41
diff changeset
246 code = "func()"
5727675b1bcb JS-wrapped python functions now take a context object as their first parameter.
Atul Varma <varmaa@toolness.com>
parents: 41
diff changeset
247 cx = pymonkey.Runtime().new_context()
5727675b1bcb JS-wrapped python functions now take a context object as their first parameter.
Atul Varma <varmaa@toolness.com>
parents: 41
diff changeset
248 obj = cx.new_object()
5727675b1bcb JS-wrapped python functions now take a context object as their first parameter.
Atul Varma <varmaa@toolness.com>
parents: 41
diff changeset
249 cx.init_standard_classes(obj)
5727675b1bcb JS-wrapped python functions now take a context object as their first parameter.
Atul Varma <varmaa@toolness.com>
parents: 41
diff changeset
250 jsfunc = cx.new_function(func, func.__name__)
5727675b1bcb JS-wrapped python functions now take a context object as their first parameter.
Atul Varma <varmaa@toolness.com>
parents: 41
diff changeset
251 cx.define_property(obj, func.__name__, jsfunc)
5727675b1bcb JS-wrapped python functions now take a context object as their first parameter.
Atul Varma <varmaa@toolness.com>
parents: 41
diff changeset
252 cx.evaluate_script(obj, code, '<string>', 1)
5727675b1bcb JS-wrapped python functions now take a context object as their first parameter.
Atul Varma <varmaa@toolness.com>
parents: 41
diff changeset
253 self.assertEqual(contexts[0], cx)
5727675b1bcb JS-wrapped python functions now take a context object as their first parameter.
Atul Varma <varmaa@toolness.com>
parents: 41
diff changeset
254
52
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
255 def testJsWrappedPythonFuncPassesThisArg(self):
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
256 thisObjs = []
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
257
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
258 def func(cx, this, args):
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
259 thisObjs.append(this)
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
260 return True
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
261
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
262 code = "func()"
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
263 cx = pymonkey.Runtime().new_context()
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
264 obj = cx.new_object()
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
265 cx.init_standard_classes(obj)
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
266 jsfunc = cx.new_function(func, func.__name__)
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
267 cx.define_property(obj, func.__name__, jsfunc)
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
268 cx.evaluate_script(obj, code, '<string>', 1)
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
269 self.assertEqual(thisObjs[0], obj)
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
270
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
271 def testJsWrappedPythonFuncPassesFuncArgs(self):
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
272 funcArgs = []
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
273
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
274 def func(cx, this, args):
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
275 funcArgs.append(args)
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
276 return True
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
277
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
278 cx = pymonkey.Runtime().new_context()
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
279 obj = cx.new_object()
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
280 cx.init_standard_classes(obj)
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
281 jsfunc = cx.new_function(func, func.__name__)
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
282 cx.define_property(obj, func.__name__, jsfunc)
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
283
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
284 cx.evaluate_script(obj, "func()", '<string>', 1)
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
285 self.assertEqual(len(funcArgs[0]), 0)
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
286 self.assertTrue(isinstance(funcArgs[0], tuple))
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
287
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
288 cx.evaluate_script(obj, "func(1, 'foo')", '<string>', 1)
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
289 self.assertEqual(len(funcArgs[1]), 2)
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
290 self.assertEqual(funcArgs[1][0], 1)
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
291 self.assertEqual(funcArgs[1][1], u'foo')
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
292
92
d2891ca1b89c Added tests involving unicode with embedded NUL characters.
Atul Varma <varmaa@toolness.com>
parents: 89
diff changeset
293 def testJsWrappedPythonFunctionReturnsUnicodeWithEmbeddedNULs(self):
d2891ca1b89c Added tests involving unicode with embedded NUL characters.
Atul Varma <varmaa@toolness.com>
parents: 89
diff changeset
294 def hai2u(cx, this, args):
d2891ca1b89c Added tests involving unicode with embedded NUL characters.
Atul Varma <varmaa@toolness.com>
parents: 89
diff changeset
295 return args[0] + u"o hai"
d2891ca1b89c Added tests involving unicode with embedded NUL characters.
Atul Varma <varmaa@toolness.com>
parents: 89
diff changeset
296 self.assertEqual(self._evalJsWrappedPyFunc(hai2u,
d2891ca1b89c Added tests involving unicode with embedded NUL characters.
Atul Varma <varmaa@toolness.com>
parents: 89
diff changeset
297 'hai2u("blah\x00 ")'),
d2891ca1b89c Added tests involving unicode with embedded NUL characters.
Atul Varma <varmaa@toolness.com>
parents: 89
diff changeset
298 u"blah\x00 o hai")
d2891ca1b89c Added tests involving unicode with embedded NUL characters.
Atul Varma <varmaa@toolness.com>
parents: 89
diff changeset
299
95
0701aee1b0cd JS-wrapped python functions can now return normal strings (not just unicode).
Atul Varma <varmaa@toolness.com>
parents: 94
diff changeset
300 def testJsWrappedPythonFunctionReturnsString(self):
0701aee1b0cd JS-wrapped python functions can now return normal strings (not just unicode).
Atul Varma <varmaa@toolness.com>
parents: 94
diff changeset
301 def hai2u(cx, this, args):
0701aee1b0cd JS-wrapped python functions can now return normal strings (not just unicode).
Atul Varma <varmaa@toolness.com>
parents: 94
diff changeset
302 return "o hai"
0701aee1b0cd JS-wrapped python functions can now return normal strings (not just unicode).
Atul Varma <varmaa@toolness.com>
parents: 94
diff changeset
303 self.assertEqual(self._evalJsWrappedPyFunc(hai2u, 'hai2u()'),
0701aee1b0cd JS-wrapped python functions can now return normal strings (not just unicode).
Atul Varma <varmaa@toolness.com>
parents: 94
diff changeset
304 "o hai")
0701aee1b0cd JS-wrapped python functions can now return normal strings (not just unicode).
Atul Varma <varmaa@toolness.com>
parents: 94
diff changeset
305
31
d0a3f358072a gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents: 29
diff changeset
306 def testJsWrappedPythonFunctionReturnsUnicode(self):
52
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
307 def hai2u(cx, this, args):
95
0701aee1b0cd JS-wrapped python functions can now return normal strings (not just unicode).
Atul Varma <varmaa@toolness.com>
parents: 94
diff changeset
308 return u"o hai\u2026"
31
d0a3f358072a gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents: 29
diff changeset
309 self.assertEqual(self._evalJsWrappedPyFunc(hai2u, 'hai2u()'),
95
0701aee1b0cd JS-wrapped python functions can now return normal strings (not just unicode).
Atul Varma <varmaa@toolness.com>
parents: 94
diff changeset
310 u"o hai\u2026")
24
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 22
diff changeset
311
75
4b1149d818e8 Exceptions work a bit more securely now.
Atul Varma <varmaa@toolness.com>
parents: 74
diff changeset
312 def testJsWrappedPythonFunctionThrowsJsException(self):
52
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
313 def hai2u(cx, this, args):
75
4b1149d818e8 Exceptions work a bit more securely now.
Atul Varma <varmaa@toolness.com>
parents: 74
diff changeset
314 raise pymonkey.error(u"blarg")
4b1149d818e8 Exceptions work a bit more securely now.
Atul Varma <varmaa@toolness.com>
parents: 74
diff changeset
315 self.assertRaises(pymonkey.error,
4b1149d818e8 Exceptions work a bit more securely now.
Atul Varma <varmaa@toolness.com>
parents: 74
diff changeset
316 self._evalJsWrappedPyFunc,
4b1149d818e8 Exceptions work a bit more securely now.
Atul Varma <varmaa@toolness.com>
parents: 74
diff changeset
317 hai2u, 'hai2u()')
99
e4f7cc6beafe Changed exception.message to exception.args[0], to satisfy a deprecation warning in Python 2.6.
Atul Varma <varmaa@toolness.com>
parents: 95
diff changeset
318 self.assertEqual(self.last_exception.args[0], u"blarg")
75
4b1149d818e8 Exceptions work a bit more securely now.
Atul Varma <varmaa@toolness.com>
parents: 74
diff changeset
319
4b1149d818e8 Exceptions work a bit more securely now.
Atul Varma <varmaa@toolness.com>
parents: 74
diff changeset
320 def testJsWrappedPythonFunctionThrowsPyException(self):
4b1149d818e8 Exceptions work a bit more securely now.
Atul Varma <varmaa@toolness.com>
parents: 74
diff changeset
321 thecx = []
4b1149d818e8 Exceptions work a bit more securely now.
Atul Varma <varmaa@toolness.com>
parents: 74
diff changeset
322 def hai2u(cx, this, args):
4b1149d818e8 Exceptions work a bit more securely now.
Atul Varma <varmaa@toolness.com>
parents: 74
diff changeset
323 thecx.append(cx)
46
a0f677cfc679 Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents: 45
diff changeset
324 raise Exception("hello")
a0f677cfc679 Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents: 45
diff changeset
325 self.assertRaises(pymonkey.error,
a0f677cfc679 Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents: 45
diff changeset
326 self._evalJsWrappedPyFunc,
a0f677cfc679 Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents: 45
diff changeset
327 hai2u, 'hai2u()')
99
e4f7cc6beafe Changed exception.message to exception.args[0], to satisfy a deprecation warning in Python 2.6.
Atul Varma <varmaa@toolness.com>
parents: 95
diff changeset
328 exc = thecx[0].get_object_private(self.last_exception.args[0])
e4f7cc6beafe Changed exception.message to exception.args[0], to satisfy a deprecation warning in Python 2.6.
Atul Varma <varmaa@toolness.com>
parents: 95
diff changeset
329 self.assertEqual(exc.args[0], "hello")
46
a0f677cfc679 Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents: 45
diff changeset
330
45
03aec8572461 Python-wrapped JS functions can now return null/None.
Atul Varma <varmaa@toolness.com>
parents: 43
diff changeset
331 def testJsWrappedPythonFunctionReturnsNone(self):
52
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
332 def hai2u(cx, this, args):
45
03aec8572461 Python-wrapped JS functions can now return null/None.
Atul Varma <varmaa@toolness.com>
parents: 43
diff changeset
333 pass
03aec8572461 Python-wrapped JS functions can now return null/None.
Atul Varma <varmaa@toolness.com>
parents: 43
diff changeset
334 self.assertEqual(self._evalJsWrappedPyFunc(hai2u, 'hai2u()'),
03aec8572461 Python-wrapped JS functions can now return null/None.
Atul Varma <varmaa@toolness.com>
parents: 43
diff changeset
335 None)
03aec8572461 Python-wrapped JS functions can now return null/None.
Atul Varma <varmaa@toolness.com>
parents: 43
diff changeset
336
34
5d3d3b25f23f JS wrapped Python functions can now return booleans.
Atul Varma <varmaa@toolness.com>
parents: 32
diff changeset
337 def testJsWrappedPythonFunctionReturnsTrue(self):
52
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
338 def hai2u(cx, this, args):
34
5d3d3b25f23f JS wrapped Python functions can now return booleans.
Atul Varma <varmaa@toolness.com>
parents: 32
diff changeset
339 return True
5d3d3b25f23f JS wrapped Python functions can now return booleans.
Atul Varma <varmaa@toolness.com>
parents: 32
diff changeset
340 self.assertEqual(self._evalJsWrappedPyFunc(hai2u, 'hai2u()'),
5d3d3b25f23f JS wrapped Python functions can now return booleans.
Atul Varma <varmaa@toolness.com>
parents: 32
diff changeset
341 True)
5d3d3b25f23f JS wrapped Python functions can now return booleans.
Atul Varma <varmaa@toolness.com>
parents: 32
diff changeset
342
5d3d3b25f23f JS wrapped Python functions can now return booleans.
Atul Varma <varmaa@toolness.com>
parents: 32
diff changeset
343 def testJsWrappedPythonFunctionReturnsFalse(self):
52
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
344 def hai2u(cx, this, args):
34
5d3d3b25f23f JS wrapped Python functions can now return booleans.
Atul Varma <varmaa@toolness.com>
parents: 32
diff changeset
345 return False
5d3d3b25f23f JS wrapped Python functions can now return booleans.
Atul Varma <varmaa@toolness.com>
parents: 32
diff changeset
346 self.assertEqual(self._evalJsWrappedPyFunc(hai2u, 'hai2u()'),
5d3d3b25f23f JS wrapped Python functions can now return booleans.
Atul Varma <varmaa@toolness.com>
parents: 32
diff changeset
347 False)
5d3d3b25f23f JS wrapped Python functions can now return booleans.
Atul Varma <varmaa@toolness.com>
parents: 32
diff changeset
348
31
d0a3f358072a gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents: 29
diff changeset
349 def testJsWrappedPythonFunctionReturnsSmallInt(self):
52
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
350 def hai2u(cx, this, args):
31
d0a3f358072a gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents: 29
diff changeset
351 return 5
d0a3f358072a gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents: 29
diff changeset
352 self.assertEqual(self._evalJsWrappedPyFunc(hai2u, 'hai2u()'),
d0a3f358072a gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents: 29
diff changeset
353 5)
d0a3f358072a gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents: 29
diff changeset
354
32
abf14cba9ef5 JS wrapped Python functions can now return floats.
Atul Varma <varmaa@toolness.com>
parents: 31
diff changeset
355 def testJsWrappedPythonFunctionReturnsFloat(self):
52
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
356 def hai2u(cx, this, args):
32
abf14cba9ef5 JS wrapped Python functions can now return floats.
Atul Varma <varmaa@toolness.com>
parents: 31
diff changeset
357 return 5.1
abf14cba9ef5 JS wrapped Python functions can now return floats.
Atul Varma <varmaa@toolness.com>
parents: 31
diff changeset
358 self.assertEqual(self._evalJsWrappedPyFunc(hai2u, 'hai2u()'),
abf14cba9ef5 JS wrapped Python functions can now return floats.
Atul Varma <varmaa@toolness.com>
parents: 31
diff changeset
359 5.1)
abf14cba9ef5 JS wrapped Python functions can now return floats.
Atul Varma <varmaa@toolness.com>
parents: 31
diff changeset
360
31
d0a3f358072a gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents: 29
diff changeset
361 def testJsWrappedPythonFunctionReturnsNegativeInt(self):
52
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
362 def hai2u(cx, this, args):
31
d0a3f358072a gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents: 29
diff changeset
363 return -5
d0a3f358072a gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents: 29
diff changeset
364 self.assertEqual(self._evalJsWrappedPyFunc(hai2u, 'hai2u()'),
d0a3f358072a gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents: 29
diff changeset
365 -5)
d0a3f358072a gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents: 29
diff changeset
366
d0a3f358072a gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents: 29
diff changeset
367 def testJsWrappedPythonFunctionReturnsBigInt(self):
52
427b01954b22 The 'this' argument for a js-wrapped python function, as well as the function's arguments, are now passed to the python function.
Atul Varma <varmaa@toolness.com>
parents: 47
diff changeset
368 def hai2u(cx, this, args):
31
d0a3f358072a gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents: 29
diff changeset
369 return 2147483647
d0a3f358072a gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents: 29
diff changeset
370 self.assertEqual(self._evalJsWrappedPyFunc(hai2u, 'hai2u()'),
d0a3f358072a gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents: 29
diff changeset
371 2147483647)
24
74b7ad049542 Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents: 22
diff changeset
372
133
a9c0db56e06b Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents: 129
diff changeset
373 def testHasPropertyWorks(self):
a9c0db56e06b Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents: 129
diff changeset
374 cx = pymonkey.Runtime().new_context()
a9c0db56e06b Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents: 129
diff changeset
375 obj = cx.new_object()
a9c0db56e06b Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents: 129
diff changeset
376 cx.init_standard_classes(obj)
a9c0db56e06b Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents: 129
diff changeset
377 foo = cx.new_object()
a9c0db56e06b Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents: 129
diff changeset
378 cx.define_property(obj, u"foo\u2026", foo)
a9c0db56e06b Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents: 129
diff changeset
379 self.assertTrue(cx.has_property(obj, u"foo\u2026"))
a9c0db56e06b Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents: 129
diff changeset
380 self.assertFalse(cx.has_property(obj, "bar"))
a9c0db56e06b Added a context.has_property() function.
Atul Varma <varmaa@toolness.com>
parents: 129
diff changeset
381
104
00c1351b3e82 Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents: 99
diff changeset
382 def testDefinePropertyWorksWithUnicodePropertyNames(self):
00c1351b3e82 Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents: 99
diff changeset
383 cx = pymonkey.Runtime().new_context()
00c1351b3e82 Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents: 99
diff changeset
384 obj = cx.new_object()
00c1351b3e82 Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents: 99
diff changeset
385 cx.init_standard_classes(obj)
00c1351b3e82 Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents: 99
diff changeset
386 foo = cx.new_object()
00c1351b3e82 Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents: 99
diff changeset
387 cx.define_property(obj, u"foo\u2026", foo)
00c1351b3e82 Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents: 99
diff changeset
388 self.assertEqual(
00c1351b3e82 Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents: 99
diff changeset
389 cx.get_property(obj, u"foo\u2026"),
00c1351b3e82 Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents: 99
diff changeset
390 foo
00c1351b3e82 Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents: 99
diff changeset
391 )
00c1351b3e82 Added support for unicode property names in context.define_property().
Atul Varma <varmaa@toolness.com>
parents: 99
diff changeset
392
37
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
393 def testDefinePropertyWorksWithObject(self):
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
394 cx = pymonkey.Runtime().new_context()
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
395 obj = cx.new_object()
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
396 cx.init_standard_classes(obj)
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
397 foo = cx.new_object()
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
398 cx.define_property(obj, "foo", foo)
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
399 self.assertEqual(
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
400 cx.evaluate_script(obj, 'foo', '<string>', 1),
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
401 foo
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
402 )
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
403
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
404 def testDefinePropertyWorksWithString(self):
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
405 cx = pymonkey.Runtime().new_context()
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
406 obj = cx.new_object()
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
407 cx.init_standard_classes(obj)
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
408 foo = cx.new_object()
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
409 cx.define_property(obj, "foo", u"hello")
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
410 self.assertEqual(
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
411 cx.evaluate_script(obj, 'foo', '<string>', 1),
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
412 u"hello"
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
413 )
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
414
22
988a8998c75f JS objects reflected into Python are now identity-preserving, though the implementation for this is pretty bad right now.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
415 def testObjectIsIdentityPreserving(self):
988a8998c75f JS objects reflected into Python are now identity-preserving, though the implementation for this is pretty bad right now.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
416 cx = pymonkey.Runtime().new_context()
988a8998c75f JS objects reflected into Python are now identity-preserving, though the implementation for this is pretty bad right now.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
417 obj = cx.new_object()
988a8998c75f JS objects reflected into Python are now identity-preserving, though the implementation for this is pretty bad right now.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
418 cx.init_standard_classes(obj)
47
3f4982759e55 Converting JS exceptions into Python exceptions is now doable, albeit not yet implemented, thanks to the discovery of JSOPTION_DONT_REPORT_UNCAUGHT. Also, JS warnings are now converted into Python warnings.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
419 cx.evaluate_script(obj, 'var foo = {bar: 1}', '<string>', 1)
27
21045074139f Based on my new understanding of JSString */jschar * thanks to folks on #jsapi, I've removed the requirement that SpiderMonkey be in UTF-8 mode to translate strings between Python and SpiderMonkey.
Atul Varma <varmaa@toolness.com>
parents: 24
diff changeset
420 self.assertTrue(isinstance(cx.get_property(obj, u"foo"),
22
988a8998c75f JS objects reflected into Python are now identity-preserving, though the implementation for this is pretty bad right now.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
421 pymonkey.Object))
27
21045074139f Based on my new understanding of JSString */jschar * thanks to folks on #jsapi, I've removed the requirement that SpiderMonkey be in UTF-8 mode to translate strings between Python and SpiderMonkey.
Atul Varma <varmaa@toolness.com>
parents: 24
diff changeset
422 self.assertTrue(cx.get_property(obj, u"foo") is
94
c66d7da09c95 Tweaked a test to also ensure that context.get_property() can take unicode or strings.
Atul Varma <varmaa@toolness.com>
parents: 92
diff changeset
423 cx.get_property(obj, "foo"))
22
988a8998c75f JS objects reflected into Python are now identity-preserving, though the implementation for this is pretty bad right now.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
424
73
efa0cfe6fc03 Resolved two TODOs.
Atul Varma <varmaa@toolness.com>
parents: 71
diff changeset
425 def testObjectGetattrThrowsException(self):
efa0cfe6fc03 Resolved two TODOs.
Atul Varma <varmaa@toolness.com>
parents: 71
diff changeset
426 cx = pymonkey.Runtime().new_context()
efa0cfe6fc03 Resolved two TODOs.
Atul Varma <varmaa@toolness.com>
parents: 71
diff changeset
427 obj = cx.new_object()
efa0cfe6fc03 Resolved two TODOs.
Atul Varma <varmaa@toolness.com>
parents: 71
diff changeset
428 cx.init_standard_classes(obj)
efa0cfe6fc03 Resolved two TODOs.
Atul Varma <varmaa@toolness.com>
parents: 71
diff changeset
429 result = cx.evaluate_script(obj, '({get foo() { throw "blah"; }})',
efa0cfe6fc03 Resolved two TODOs.
Atul Varma <varmaa@toolness.com>
parents: 71
diff changeset
430 '<string>', 1)
efa0cfe6fc03 Resolved two TODOs.
Atul Varma <varmaa@toolness.com>
parents: 71
diff changeset
431 self.assertRaises(pymonkey.error,
efa0cfe6fc03 Resolved two TODOs.
Atul Varma <varmaa@toolness.com>
parents: 71
diff changeset
432 cx.get_property,
efa0cfe6fc03 Resolved two TODOs.
Atul Varma <varmaa@toolness.com>
parents: 71
diff changeset
433 result,
efa0cfe6fc03 Resolved two TODOs.
Atul Varma <varmaa@toolness.com>
parents: 71
diff changeset
434 u"foo")
99
e4f7cc6beafe Changed exception.message to exception.args[0], to satisfy a deprecation warning in Python 2.6.
Atul Varma <varmaa@toolness.com>
parents: 95
diff changeset
435 self.assertEqual(self.last_exception.args[0], u"blah")
73
efa0cfe6fc03 Resolved two TODOs.
Atul Varma <varmaa@toolness.com>
parents: 71
diff changeset
436
76
4cb89d48b068 Added test for infinite recursion.
Atul Varma <varmaa@toolness.com>
parents: 75
diff changeset
437 def testInfiniteRecursionRaisesError(self):
4cb89d48b068 Added test for infinite recursion.
Atul Varma <varmaa@toolness.com>
parents: 75
diff changeset
438 cx = pymonkey.Runtime().new_context()
4cb89d48b068 Added test for infinite recursion.
Atul Varma <varmaa@toolness.com>
parents: 75
diff changeset
439 obj = cx.new_object()
4cb89d48b068 Added test for infinite recursion.
Atul Varma <varmaa@toolness.com>
parents: 75
diff changeset
440 cx.init_standard_classes(obj)
4cb89d48b068 Added test for infinite recursion.
Atul Varma <varmaa@toolness.com>
parents: 75
diff changeset
441 self.assertRaises(
4cb89d48b068 Added test for infinite recursion.
Atul Varma <varmaa@toolness.com>
parents: 75
diff changeset
442 pymonkey.error,
4cb89d48b068 Added test for infinite recursion.
Atul Varma <varmaa@toolness.com>
parents: 75
diff changeset
443 cx.evaluate_script,
4cb89d48b068 Added test for infinite recursion.
Atul Varma <varmaa@toolness.com>
parents: 75
diff changeset
444 obj, '(function foo() { foo(); })();', '<string>', 1
4cb89d48b068 Added test for infinite recursion.
Atul Varma <varmaa@toolness.com>
parents: 75
diff changeset
445 )
4cb89d48b068 Added test for infinite recursion.
Atul Varma <varmaa@toolness.com>
parents: 75
diff changeset
446 self.assertEqual(
99
e4f7cc6beafe Changed exception.message to exception.args[0], to satisfy a deprecation warning in Python 2.6.
Atul Varma <varmaa@toolness.com>
parents: 95
diff changeset
447 self._tostring(cx, self.last_exception.args[0]),
76
4cb89d48b068 Added test for infinite recursion.
Atul Varma <varmaa@toolness.com>
parents: 75
diff changeset
448 "InternalError: too much recursion"
4cb89d48b068 Added test for infinite recursion.
Atul Varma <varmaa@toolness.com>
parents: 75
diff changeset
449 )
4cb89d48b068 Added test for infinite recursion.
Atul Varma <varmaa@toolness.com>
parents: 75
diff changeset
450
17
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
451 def testObjectGetattrWorks(self):
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
452 cx = pymonkey.Runtime().new_context()
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
453 obj = cx.new_object()
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
454 cx.init_standard_classes(obj)
47
3f4982759e55 Converting JS exceptions into Python exceptions is now doable, albeit not yet implemented, thanks to the discovery of JSOPTION_DONT_REPORT_UNCAUGHT. Also, JS warnings are now converted into Python warnings.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
455 cx.evaluate_script(obj, 'var boop = 5', '<string>', 1)
17
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
456 cx.evaluate_script(obj, 'this["blarg\u2026"] = 5', '<string>', 1)
27
21045074139f Based on my new understanding of JSString */jschar * thanks to folks on #jsapi, I've removed the requirement that SpiderMonkey be in UTF-8 mode to translate strings between Python and SpiderMonkey.
Atul Varma <varmaa@toolness.com>
parents: 24
diff changeset
457 self.assertEqual(cx.get_property(obj, u"beans"),
17
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
458 pymonkey.undefined)
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
459 self.assertEqual(cx.get_property(obj, u"blarg\u2026"), 5)
27
21045074139f Based on my new understanding of JSString */jschar * thanks to folks on #jsapi, I've removed the requirement that SpiderMonkey be in UTF-8 mode to translate strings between Python and SpiderMonkey.
Atul Varma <varmaa@toolness.com>
parents: 24
diff changeset
460 self.assertEqual(cx.get_property(obj, u"boop"), 5)
17
0812422ec99e Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents: 16
diff changeset
461
16
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
462 def testContextIsInstance(self):
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
463 cx = pymonkey.Runtime().new_context()
9
032cfc448079 Added pymonkey.Runtime and pymonkey.Context as new types.
Atul Varma <varmaa@toolness.com>
parents: 8
diff changeset
464 self.assertTrue(isinstance(cx, pymonkey.Context))
032cfc448079 Added pymonkey.Runtime and pymonkey.Context as new types.
Atul Varma <varmaa@toolness.com>
parents: 8
diff changeset
465
16
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
466 def testContextTypeCannotBeInstantiated(self):
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
467 self.assertRaises(TypeError, pymonkey.Context)
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
468
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
469 def testObjectIsInstance(self):
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
470 obj = pymonkey.Runtime().new_context().new_object()
13
ca17531e8c81 Added an object class.
Atul Varma <varmaa@toolness.com>
parents: 9
diff changeset
471 self.assertTrue(isinstance(obj, pymonkey.Object))
37
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
472 self.assertFalse(isinstance(obj, pymonkey.Function))
13
ca17531e8c81 Added an object class.
Atul Varma <varmaa@toolness.com>
parents: 9
diff changeset
473
16
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
474 def testObjectTypeCannotBeInstantiated(self):
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
475 self.assertRaises(TypeError, pymonkey.Object)
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
476
37
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
477 def testFunctionIsInstance(self):
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
478 def boop():
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
479 pass
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
480 obj = pymonkey.Runtime().new_context().new_function(boop, "boop")
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
481 self.assertTrue(isinstance(obj, pymonkey.Object))
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
482 self.assertTrue(isinstance(obj, pymonkey.Function))
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
483
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
484 def testFunctionTypeCannotBeInstantiated(self):
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
485 self.assertRaises(TypeError, pymonkey.Function)
d4efcbb06964 Added a new PYM_JSFunction type, PYM_JSContext.define_property(), and PYM_JSContext.new_function(). Also fixed a memory leak.
Atul Varma <varmaa@toolness.com>
parents: 34
diff changeset
486
77
755af0a94c94 Added a pymonkey.Object.get_runtime() method.
Atul Varma <varmaa@toolness.com>
parents: 76
diff changeset
487 def testObjectGetRuntimeWorks(self):
755af0a94c94 Added a pymonkey.Object.get_runtime() method.
Atul Varma <varmaa@toolness.com>
parents: 76
diff changeset
488 rt = pymonkey.Runtime()
755af0a94c94 Added a pymonkey.Object.get_runtime() method.
Atul Varma <varmaa@toolness.com>
parents: 76
diff changeset
489 obj = rt.new_context().new_object()
755af0a94c94 Added a pymonkey.Object.get_runtime() method.
Atul Varma <varmaa@toolness.com>
parents: 76
diff changeset
490 self.assertEqual(obj.get_runtime(), rt)
755af0a94c94 Added a pymonkey.Object.get_runtime() method.
Atul Varma <varmaa@toolness.com>
parents: 76
diff changeset
491
755af0a94c94 Added a pymonkey.Object.get_runtime() method.
Atul Varma <varmaa@toolness.com>
parents: 76
diff changeset
492 def testContextGetRuntimeWorks(self):
16
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
493 rt = pymonkey.Runtime()
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
494 cx = rt.new_context()
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
495 self.assertEqual(cx.get_runtime(), rt)
14
9edcdb4ab12d added an init_standard_classes() method to context objects.
Atul Varma <varmaa@toolness.com>
parents: 13
diff changeset
496
129
7b7a23615873 Added weakref support for runtimes.
Atul Varma <varmaa@toolness.com>
parents: 127
diff changeset
497 def testRuntimesAreWeakReferencable(self):
7b7a23615873 Added weakref support for runtimes.
Atul Varma <varmaa@toolness.com>
parents: 127
diff changeset
498 rt = pymonkey.Runtime()
7b7a23615873 Added weakref support for runtimes.
Atul Varma <varmaa@toolness.com>
parents: 127
diff changeset
499 wrt = weakref.ref(rt)
7b7a23615873 Added weakref support for runtimes.
Atul Varma <varmaa@toolness.com>
parents: 127
diff changeset
500 self.assertEqual(rt, wrt())
7b7a23615873 Added weakref support for runtimes.
Atul Varma <varmaa@toolness.com>
parents: 127
diff changeset
501 del rt
7b7a23615873 Added weakref support for runtimes.
Atul Varma <varmaa@toolness.com>
parents: 127
diff changeset
502 self.assertEqual(wrt(), None)
7b7a23615873 Added weakref support for runtimes.
Atul Varma <varmaa@toolness.com>
parents: 127
diff changeset
503
126
8371983fee63 Added support for weakrefs to contexts.
Atul Varma <varmaa@toolness.com>
parents: 123
diff changeset
504 def testContextsAreWeakReferencable(self):
8371983fee63 Added support for weakrefs to contexts.
Atul Varma <varmaa@toolness.com>
parents: 123
diff changeset
505 rt = pymonkey.Runtime()
8371983fee63 Added support for weakrefs to contexts.
Atul Varma <varmaa@toolness.com>
parents: 123
diff changeset
506 cx = rt.new_context()
8371983fee63 Added support for weakrefs to contexts.
Atul Varma <varmaa@toolness.com>
parents: 123
diff changeset
507 wcx = weakref.ref(cx)
8371983fee63 Added support for weakrefs to contexts.
Atul Varma <varmaa@toolness.com>
parents: 123
diff changeset
508 self.assertEqual(cx, wcx())
8371983fee63 Added support for weakrefs to contexts.
Atul Varma <varmaa@toolness.com>
parents: 123
diff changeset
509 del cx
8371983fee63 Added support for weakrefs to contexts.
Atul Varma <varmaa@toolness.com>
parents: 123
diff changeset
510 self.assertEqual(wcx(), None)
8371983fee63 Added support for weakrefs to contexts.
Atul Varma <varmaa@toolness.com>
parents: 123
diff changeset
511
8
6647870380cc Added support for undefined.
Atul Varma <varmaa@toolness.com>
parents: 7
diff changeset
512 def testUndefinedCannotBeInstantiated(self):
6647870380cc Added support for undefined.
Atul Varma <varmaa@toolness.com>
parents: 7
diff changeset
513 self.assertRaises(TypeError, pymonkey.undefined)
6647870380cc Added support for undefined.
Atul Varma <varmaa@toolness.com>
parents: 7
diff changeset
514
46
a0f677cfc679 Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents: 45
diff changeset
515 def testEvaluateThrowsException(self):
74
e06376295170 JS exceptions thrown out to Python now include the wrapped original exception. This fixes a TODO.
Atul Varma <varmaa@toolness.com>
parents: 73
diff changeset
516 cx = pymonkey.Runtime().new_context()
e06376295170 JS exceptions thrown out to Python now include the wrapped original exception. This fixes a TODO.
Atul Varma <varmaa@toolness.com>
parents: 73
diff changeset
517 obj = cx.new_object()
46
a0f677cfc679 Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents: 45
diff changeset
518 self.assertRaises(pymonkey.error,
74
e06376295170 JS exceptions thrown out to Python now include the wrapped original exception. This fixes a TODO.
Atul Varma <varmaa@toolness.com>
parents: 73
diff changeset
519 cx.evaluate_script,
e06376295170 JS exceptions thrown out to Python now include the wrapped original exception. This fixes a TODO.
Atul Varma <varmaa@toolness.com>
parents: 73
diff changeset
520 obj, 'hai2u()', '<string>', 1)
e06376295170 JS exceptions thrown out to Python now include the wrapped original exception. This fixes a TODO.
Atul Varma <varmaa@toolness.com>
parents: 73
diff changeset
521 self.assertEqual(self._tostring(cx,
99
e4f7cc6beafe Changed exception.message to exception.args[0], to satisfy a deprecation warning in Python 2.6.
Atul Varma <varmaa@toolness.com>
parents: 95
diff changeset
522 self.last_exception.args[0]),
47
3f4982759e55 Converting JS exceptions into Python exceptions is now doable, albeit not yet implemented, thanks to the discovery of JSOPTION_DONT_REPORT_UNCAUGHT. Also, JS warnings are now converted into Python warnings.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
523 'ReferenceError: hai2u is not defined')
46
a0f677cfc679 Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents: 45
diff changeset
524
123
08a012e96f62 Added another test and fixed a bug it revealed.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
525 def testThrowingObjWithBadToStringWorks(self):
08a012e96f62 Added another test and fixed a bug it revealed.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
526 self.assertRaises(
08a012e96f62 Added another test and fixed a bug it revealed.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
527 pymonkey.error,
08a012e96f62 Added another test and fixed a bug it revealed.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
528 self._evaljs,
08a012e96f62 Added another test and fixed a bug it revealed.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
529 "throw {toString: function() { throw 'dujg' }}"
08a012e96f62 Added another test and fixed a bug it revealed.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
530 )
08a012e96f62 Added another test and fixed a bug it revealed.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
531 self.assertEqual(
08a012e96f62 Added another test and fixed a bug it revealed.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
532 self.last_exception.args[1],
08a012e96f62 Added another test and fixed a bug it revealed.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
533 "<string conversion failed>"
08a012e96f62 Added another test and fixed a bug it revealed.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
534 )
08a012e96f62 Added another test and fixed a bug it revealed.
Atul Varma <varmaa@toolness.com>
parents: 122
diff changeset
535
122
5eda03c8e756 context.evaluate_script() can now take unicode code strings.
Atul Varma <varmaa@toolness.com>
parents: 120
diff changeset
536 def testEvaluateTakesUnicodeCode(self):
5eda03c8e756 context.evaluate_script() can now take unicode code strings.
Atul Varma <varmaa@toolness.com>
parents: 120
diff changeset
537 self.assertEqual(self._evaljs(u"'foo\u2026'"),
5eda03c8e756 context.evaluate_script() can now take unicode code strings.
Atul Varma <varmaa@toolness.com>
parents: 120
diff changeset
538 u"foo\u2026")
5eda03c8e756 context.evaluate_script() can now take unicode code strings.
Atul Varma <varmaa@toolness.com>
parents: 120
diff changeset
539
8
6647870380cc Added support for undefined.
Atul Varma <varmaa@toolness.com>
parents: 7
diff changeset
540 def testEvaluateReturnsUndefined(self):
16
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
541 retval = self._evaljs("")
8
6647870380cc Added support for undefined.
Atul Varma <varmaa@toolness.com>
parents: 7
diff changeset
542 self.assertTrue(retval is pymonkey.undefined)
6647870380cc Added support for undefined.
Atul Varma <varmaa@toolness.com>
parents: 7
diff changeset
543
92
d2891ca1b89c Added tests involving unicode with embedded NUL characters.
Atul Varma <varmaa@toolness.com>
parents: 89
diff changeset
544 def testEvaludateReturnsUnicodeWithEmbeddedNULs(self):
d2891ca1b89c Added tests involving unicode with embedded NUL characters.
Atul Varma <varmaa@toolness.com>
parents: 89
diff changeset
545 retval = self._evaljs("'\x00hi'")
d2891ca1b89c Added tests involving unicode with embedded NUL characters.
Atul Varma <varmaa@toolness.com>
parents: 89
diff changeset
546 self.assertEqual(retval, u'\x00hi')
d2891ca1b89c Added tests involving unicode with embedded NUL characters.
Atul Varma <varmaa@toolness.com>
parents: 89
diff changeset
547
28
bd30f5c02fc3 Added a new test for supplementary multilingual plane unicode.
Atul Varma <varmaa@toolness.com>
parents: 27
diff changeset
548 def testEvaluateReturnsSMPUnicode(self):
bd30f5c02fc3 Added a new test for supplementary multilingual plane unicode.
Atul Varma <varmaa@toolness.com>
parents: 27
diff changeset
549 # This is 'LINEAR B SYLLABLE B008 A', in the supplementary
bd30f5c02fc3 Added a new test for supplementary multilingual plane unicode.
Atul Varma <varmaa@toolness.com>
parents: 27
diff changeset
550 # multilingual plane (SMP).
bd30f5c02fc3 Added a new test for supplementary multilingual plane unicode.
Atul Varma <varmaa@toolness.com>
parents: 27
diff changeset
551 retval = self._evaljs("'\uD800\uDC00'")
bd30f5c02fc3 Added a new test for supplementary multilingual plane unicode.
Atul Varma <varmaa@toolness.com>
parents: 27
diff changeset
552 self.assertEqual(retval, u'\U00010000')
bd30f5c02fc3 Added a new test for supplementary multilingual plane unicode.
Atul Varma <varmaa@toolness.com>
parents: 27
diff changeset
553 self.assertEqual(retval.encode('utf-16'),
bd30f5c02fc3 Added a new test for supplementary multilingual plane unicode.
Atul Varma <varmaa@toolness.com>
parents: 27
diff changeset
554 '\xff\xfe\x00\xd8\x00\xdc')
bd30f5c02fc3 Added a new test for supplementary multilingual plane unicode.
Atul Varma <varmaa@toolness.com>
parents: 27
diff changeset
555
bd30f5c02fc3 Added a new test for supplementary multilingual plane unicode.
Atul Varma <varmaa@toolness.com>
parents: 27
diff changeset
556 def testEvaluateReturnsBMPUnicode(self):
16
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
557 retval = self._evaljs("'o hai\u2026'")
7
0d0ce6415b66 Added support for unicode strings.
Atul Varma <varmaa@toolness.com>
parents: 5
diff changeset
558 self.assertTrue(type(retval) == unicode)
0d0ce6415b66 Added support for unicode strings.
Atul Varma <varmaa@toolness.com>
parents: 5
diff changeset
559 self.assertEqual(retval, u'o hai\u2026')
0d0ce6415b66 Added support for unicode strings.
Atul Varma <varmaa@toolness.com>
parents: 5
diff changeset
560
20
abede8af8cf5 PYM_jsvalToPyObject() can now deal with JSObjects.
Atul Varma <varmaa@toolness.com>
parents: 17
diff changeset
561 def testEvaluateReturnsObject(self):
41
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
562 cx = pymonkey.Runtime().new_context()
20
abede8af8cf5 PYM_jsvalToPyObject() can now deal with JSObjects.
Atul Varma <varmaa@toolness.com>
parents: 17
diff changeset
563 obj = cx.new_object()
abede8af8cf5 PYM_jsvalToPyObject() can now deal with JSObjects.
Atul Varma <varmaa@toolness.com>
parents: 17
diff changeset
564 cx.init_standard_classes(obj)
abede8af8cf5 PYM_jsvalToPyObject() can now deal with JSObjects.
Atul Varma <varmaa@toolness.com>
parents: 17
diff changeset
565 obj = cx.evaluate_script(obj, '({boop: 1})', '<string>', 1)
abede8af8cf5 PYM_jsvalToPyObject() can now deal with JSObjects.
Atul Varma <varmaa@toolness.com>
parents: 17
diff changeset
566 self.assertTrue(isinstance(obj, pymonkey.Object))
27
21045074139f Based on my new understanding of JSString */jschar * thanks to folks on #jsapi, I've removed the requirement that SpiderMonkey be in UTF-8 mode to translate strings between Python and SpiderMonkey.
Atul Varma <varmaa@toolness.com>
parents: 24
diff changeset
567 self.assertEqual(cx.get_property(obj, u"boop"), 1)
20
abede8af8cf5 PYM_jsvalToPyObject() can now deal with JSObjects.
Atul Varma <varmaa@toolness.com>
parents: 17
diff changeset
568
40
8a7abd0bb48d Renamed PYM_newJSFunction() to PYM_newJSFunctionFromCallable(). PYM_newJSObject() now returns objects of type PYM_JSFunctionType as needed.
Atul Varma <varmaa@toolness.com>
parents: 37
diff changeset
569 def testEvaluateReturnsFunction(self):
41
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
570 cx = pymonkey.Runtime().new_context()
40
8a7abd0bb48d Renamed PYM_newJSFunction() to PYM_newJSFunctionFromCallable(). PYM_newJSObject() now returns objects of type PYM_JSFunctionType as needed.
Atul Varma <varmaa@toolness.com>
parents: 37
diff changeset
571 obj = cx.new_object()
8a7abd0bb48d Renamed PYM_newJSFunction() to PYM_newJSFunctionFromCallable(). PYM_newJSObject() now returns objects of type PYM_JSFunctionType as needed.
Atul Varma <varmaa@toolness.com>
parents: 37
diff changeset
572 cx.init_standard_classes(obj)
8a7abd0bb48d Renamed PYM_newJSFunction() to PYM_newJSFunctionFromCallable(). PYM_newJSObject() now returns objects of type PYM_JSFunctionType as needed.
Atul Varma <varmaa@toolness.com>
parents: 37
diff changeset
573 obj = cx.evaluate_script(obj, '(function boop() { return 1; })',
8a7abd0bb48d Renamed PYM_newJSFunction() to PYM_newJSFunctionFromCallable(). PYM_newJSObject() now returns objects of type PYM_JSFunctionType as needed.
Atul Varma <varmaa@toolness.com>
parents: 37
diff changeset
574 '<string>', 1)
8a7abd0bb48d Renamed PYM_newJSFunction() to PYM_newJSFunctionFromCallable(). PYM_newJSObject() now returns objects of type PYM_JSFunctionType as needed.
Atul Varma <varmaa@toolness.com>
parents: 37
diff changeset
575 self.assertTrue(isinstance(obj, pymonkey.Function))
8a7abd0bb48d Renamed PYM_newJSFunction() to PYM_newJSFunctionFromCallable(). PYM_newJSObject() now returns objects of type PYM_JSFunctionType as needed.
Atul Varma <varmaa@toolness.com>
parents: 37
diff changeset
576
88
0b2970e8cd67 Added a test.
Atul Varma <varmaa@toolness.com>
parents: 87
diff changeset
577 def testJsExceptionStateIsClearedAfterExceptionIsCaught(self):
0b2970e8cd67 Added a test.
Atul Varma <varmaa@toolness.com>
parents: 87
diff changeset
578 cx = pymonkey.Runtime().new_context()
0b2970e8cd67 Added a test.
Atul Varma <varmaa@toolness.com>
parents: 87
diff changeset
579 obj = cx.new_object()
0b2970e8cd67 Added a test.
Atul Varma <varmaa@toolness.com>
parents: 87
diff changeset
580 self.assertRaises(pymonkey.error,
0b2970e8cd67 Added a test.
Atul Varma <varmaa@toolness.com>
parents: 87
diff changeset
581 cx.evaluate_script,
0b2970e8cd67 Added a test.
Atul Varma <varmaa@toolness.com>
parents: 87
diff changeset
582 obj, 'blah()', '<string>', 1)
0b2970e8cd67 Added a test.
Atul Varma <varmaa@toolness.com>
parents: 87
diff changeset
583 self.assertEqual(cx.evaluate_script(obj, '5+3', '<string>', 1),
0b2970e8cd67 Added a test.
Atul Varma <varmaa@toolness.com>
parents: 87
diff changeset
584 8)
0b2970e8cd67 Added a test.
Atul Varma <varmaa@toolness.com>
parents: 87
diff changeset
585
41
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
586 def testCallFunctionRaisesErrorOnBadFuncArgs(self):
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
587 cx = pymonkey.Runtime().new_context()
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
588 obj = cx.new_object()
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
589 obj = cx.evaluate_script(
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
590 obj,
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
591 '(function boop(a, b) { return a+b+this.c; })',
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
592 '<string>', 1
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
593 )
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
594 self.assertRaises(
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
595 NotImplementedError,
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
596 cx.call_function,
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
597 obj, obj, (1, self)
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
598 )
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
599
74
e06376295170 JS exceptions thrown out to Python now include the wrapped original exception. This fixes a TODO.
Atul Varma <varmaa@toolness.com>
parents: 73
diff changeset
600 def _tostring(self, cx, obj):
e06376295170 JS exceptions thrown out to Python now include the wrapped original exception. This fixes a TODO.
Atul Varma <varmaa@toolness.com>
parents: 73
diff changeset
601 return cx.call_function(obj,
e06376295170 JS exceptions thrown out to Python now include the wrapped original exception. This fixes a TODO.
Atul Varma <varmaa@toolness.com>
parents: 73
diff changeset
602 cx.get_property(obj, u"toString"),
e06376295170 JS exceptions thrown out to Python now include the wrapped original exception. This fixes a TODO.
Atul Varma <varmaa@toolness.com>
parents: 73
diff changeset
603 ())
e06376295170 JS exceptions thrown out to Python now include the wrapped original exception. This fixes a TODO.
Atul Varma <varmaa@toolness.com>
parents: 73
diff changeset
604
41
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
605 def testCallFunctionRaisesErrorFromJS(self):
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
606 cx = pymonkey.Runtime().new_context()
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
607 obj = cx.new_object()
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
608 obj = cx.evaluate_script(
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
609 obj,
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
610 '(function boop(a, b) { blarg(); })',
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
611 '<string>', 1
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
612 )
46
a0f677cfc679 Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents: 45
diff changeset
613 self.assertRaises(pymonkey.error,
a0f677cfc679 Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents: 45
diff changeset
614 cx.call_function,
a0f677cfc679 Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents: 45
diff changeset
615 obj, obj, (1,))
74
e06376295170 JS exceptions thrown out to Python now include the wrapped original exception. This fixes a TODO.
Atul Varma <varmaa@toolness.com>
parents: 73
diff changeset
616 self.assertEqual(self._tostring(cx,
99
e4f7cc6beafe Changed exception.message to exception.args[0], to satisfy a deprecation warning in Python 2.6.
Atul Varma <varmaa@toolness.com>
parents: 95
diff changeset
617 self.last_exception.args[0]),
47
3f4982759e55 Converting JS exceptions into Python exceptions is now doable, albeit not yet implemented, thanks to the discovery of JSOPTION_DONT_REPORT_UNCAUGHT. Also, JS warnings are now converted into Python warnings.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
618 'ReferenceError: blarg is not defined')
41
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
619
89
e77bc7c799e8 JS runtime mismatches are now checked for and enforced so they won't cause segfaults.
Atul Varma <varmaa@toolness.com>
parents: 88
diff changeset
620 def testInitStandardClassesRaisesExcOnRuntimeMismatch(self):
e77bc7c799e8 JS runtime mismatches are now checked for and enforced so they won't cause segfaults.
Atul Varma <varmaa@toolness.com>
parents: 88
diff changeset
621 cx2 = pymonkey.Runtime().new_context()
e77bc7c799e8 JS runtime mismatches are now checked for and enforced so they won't cause segfaults.
Atul Varma <varmaa@toolness.com>
parents: 88
diff changeset
622 cx = pymonkey.Runtime().new_context()
e77bc7c799e8 JS runtime mismatches are now checked for and enforced so they won't cause segfaults.
Atul Varma <varmaa@toolness.com>
parents: 88
diff changeset
623 obj = cx.new_object()
e77bc7c799e8 JS runtime mismatches are now checked for and enforced so they won't cause segfaults.
Atul Varma <varmaa@toolness.com>
parents: 88
diff changeset
624 self.assertRaises(ValueError,
e77bc7c799e8 JS runtime mismatches are now checked for and enforced so they won't cause segfaults.
Atul Varma <varmaa@toolness.com>
parents: 88
diff changeset
625 cx2.init_standard_classes,
e77bc7c799e8 JS runtime mismatches are now checked for and enforced so they won't cause segfaults.
Atul Varma <varmaa@toolness.com>
parents: 88
diff changeset
626 obj)
99
e4f7cc6beafe Changed exception.message to exception.args[0], to satisfy a deprecation warning in Python 2.6.
Atul Varma <varmaa@toolness.com>
parents: 95
diff changeset
627 self.assertEqual(self.last_exception.args[0],
89
e77bc7c799e8 JS runtime mismatches are now checked for and enforced so they won't cause segfaults.
Atul Varma <varmaa@toolness.com>
parents: 88
diff changeset
628 'JS runtime mismatch')
e77bc7c799e8 JS runtime mismatches are now checked for and enforced so they won't cause segfaults.
Atul Varma <varmaa@toolness.com>
parents: 88
diff changeset
629
41
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
630 def testCallFunctionWorks(self):
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
631 cx = pymonkey.Runtime().new_context()
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
632 obj = cx.new_object()
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
633 thisArg = cx.new_object()
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
634 cx.define_property(thisArg, "c", 3)
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
635 cx.init_standard_classes(obj)
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
636 obj = cx.evaluate_script(
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
637 obj,
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
638 '(function boop(a, b) { return a+b+this.c; })',
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
639 '<string>', 1
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
640 )
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
641 self.assertEqual(cx.call_function(thisArg, obj, (1,2)), 6)
71ab5e977dd3 Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents: 40
diff changeset
642
5
aae78eac86d6 Added support for booleans.
Atul Varma <varmaa@toolness.com>
parents: 4
diff changeset
643 def testEvaluateReturnsTrue(self):
16
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
644 self.assertTrue(self._evaljs('true') is True)
5
aae78eac86d6 Added support for booleans.
Atul Varma <varmaa@toolness.com>
parents: 4
diff changeset
645
aae78eac86d6 Added support for booleans.
Atul Varma <varmaa@toolness.com>
parents: 4
diff changeset
646 def testEvaluateReturnsFalse(self):
16
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
647 self.assertTrue(self._evaljs('false') is False)
5
aae78eac86d6 Added support for booleans.
Atul Varma <varmaa@toolness.com>
parents: 4
diff changeset
648
4
2711b636f8e6 Added support for NULL return values.
Atul Varma <varmaa@toolness.com>
parents: 3
diff changeset
649 def testEvaluateReturnsNone(self):
16
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
650 self.assertTrue(self._evaljs('null') is None)
4
2711b636f8e6 Added support for NULL return values.
Atul Varma <varmaa@toolness.com>
parents: 3
diff changeset
651
3
d6a0819ca6ca Added return value support for doubles.
Atul Varma <varmaa@toolness.com>
parents: 2
diff changeset
652 def testEvaluateReturnsIntegers(self):
16
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
653 self.assertEqual(self._evaljs('1+3'), 4)
0
21aa6e3abb49 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
654
31
d0a3f358072a gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents: 29
diff changeset
655 def testEvaluateReturnsNegativeIntegers(self):
d0a3f358072a gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents: 29
diff changeset
656 self.assertEqual(self._evaljs('-5'), -5)
d0a3f358072a gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents: 29
diff changeset
657
d0a3f358072a gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents: 29
diff changeset
658 def testEvaluateReturnsBigIntegers(self):
d0a3f358072a gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents: 29
diff changeset
659 self.assertEqual(self._evaljs('2147483647*2'),
d0a3f358072a gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents: 29
diff changeset
660 2147483647*2)
d0a3f358072a gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents: 29
diff changeset
661
3
d6a0819ca6ca Added return value support for doubles.
Atul Varma <varmaa@toolness.com>
parents: 2
diff changeset
662 def testEvaluateReturnsFloats(self):
16
532b7ddca616 Created a new context.evaluate_script() function, replacing pymonkey.evaluate(). Separated out one of the big unit tests into several.
Atul Varma <varmaa@toolness.com>
parents: 14
diff changeset
663 self.assertEqual(self._evaljs('1.1+3'), 4.1)
3
d6a0819ca6ca Added return value support for doubles.
Atul Varma <varmaa@toolness.com>
parents: 2
diff changeset
664
0
21aa6e3abb49 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
665 if __name__ == '__main__':
21aa6e3abb49 Origination.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
666 unittest.main()