Mercurial > pymonkey
annotate test_pymonkey.py @ 74:e06376295170
JS exceptions thrown out to Python now include the wrapped original exception. This fixes a TODO.
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Wed, 29 Jul 2009 20:43:46 -0700 |
parents | efa0cfe6fc03 |
children | 4b1149d818e8 |
rev | line source |
---|---|
46
a0f677cfc679
Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents:
45
diff
changeset
|
1 import sys |
0 | 2 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
|
3 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
|
4 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
|
5 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
|
6 |
0 | 7 import pymonkey |
8 | |
9 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
|
10 def _evaljs(self, code): |
9
032cfc448079
Added pymonkey.Runtime and pymonkey.Context as new types.
Atul Varma <varmaa@toolness.com>
parents:
8
diff
changeset
|
11 rt = pymonkey.Runtime() |
032cfc448079
Added pymonkey.Runtime and pymonkey.Context as new types.
Atul Varma <varmaa@toolness.com>
parents:
8
diff
changeset
|
12 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
|
13 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
|
14 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
|
15 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
|
16 |
31
d0a3f358072a
gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents:
29
diff
changeset
|
17 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
|
18 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
|
19 obj = cx.new_object() |
74b7ad049542
Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents:
22
diff
changeset
|
20 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
|
21 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
|
22 cx.define_property(obj, func.__name__, jsfunc) |
31
d0a3f358072a
gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents:
29
diff
changeset
|
23 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
|
24 |
46
a0f677cfc679
Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents:
45
diff
changeset
|
25 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
|
26 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
|
27 try: |
a0f677cfc679
Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents:
45
diff
changeset
|
28 func(*args) |
a0f677cfc679
Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents:
45
diff
changeset
|
29 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
|
30 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
|
31 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
|
32 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
|
33 |
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
|
34 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
|
35 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
|
36 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
|
37 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
|
38 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
|
39 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
|
40 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
|
41 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
|
42 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
|
43 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
|
44 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
|
45 |
64
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
62
diff
changeset
|
46 def testOperationCallbackIsCalled(self): |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
62
diff
changeset
|
47 def opcb(cx): |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
62
diff
changeset
|
48 raise Exception("stop eet!") |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
62
diff
changeset
|
49 |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
62
diff
changeset
|
50 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
|
51 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
|
52 obj = cx.new_object() |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
62
diff
changeset
|
53 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
|
54 |
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
|
55 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
|
56 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
|
57 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
|
58 |
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
|
59 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
|
60 thread.start() |
64
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
62
diff
changeset
|
61 |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
62
diff
changeset
|
62 self.assertRaises( |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
62
diff
changeset
|
63 pymonkey.error, |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
62
diff
changeset
|
64 cx.evaluate_script, |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
62
diff
changeset
|
65 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
|
66 ) |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
62
diff
changeset
|
67 self.assertEqual(self.last_exception.message, |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
62
diff
changeset
|
68 "stop eet!") |
fb7e11dec538
Added context.set_operation_callback() and trigger_operation_callback() methods.
Atul Varma <varmaa@toolness.com>
parents:
62
diff
changeset
|
69 |
57
a2b617731398
pymonkey.undefined now has a 'falsy' value.
Atul Varma <varmaa@toolness.com>
parents:
52
diff
changeset
|
70 def testUndefinedStrIsUndefined(self): |
a2b617731398
pymonkey.undefined now has a 'falsy' value.
Atul Varma <varmaa@toolness.com>
parents:
52
diff
changeset
|
71 self.assertEqual(str(pymonkey.undefined), |
a2b617731398
pymonkey.undefined now has a 'falsy' value.
Atul Varma <varmaa@toolness.com>
parents:
52
diff
changeset
|
72 "pymonkey.undefined") |
a2b617731398
pymonkey.undefined now has a 'falsy' value.
Atul Varma <varmaa@toolness.com>
parents:
52
diff
changeset
|
73 |
59
fb97bed55789
Added a test that fails b/c of a known bug in pymonkey.
Atul Varma <varmaa@toolness.com>
parents:
57
diff
changeset
|
74 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
|
75 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
|
76 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
|
77 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
|
78 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
|
79 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
|
80 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
|
81 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
|
82 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
|
83 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
|
84 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
|
85 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
|
86 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
|
87 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
|
88 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
|
89 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
|
90 |
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
|
91 # 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
|
92 # 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
|
93 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
|
94 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
|
95 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
|
96 |
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
|
97 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
|
98 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
|
99 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
|
100 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
|
101 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
|
102 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
|
103 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
|
104 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
|
105 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
|
106 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
|
107 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
|
108 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
|
109 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
|
110 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
|
111 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
|
112 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
|
113 |
43
5727675b1bcb
JS-wrapped python functions now take a context object as their first parameter.
Atul Varma <varmaa@toolness.com>
parents:
41
diff
changeset
|
114 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
|
115 contexts = [] |
5727675b1bcb
JS-wrapped python functions now take a context object as their first parameter.
Atul Varma <varmaa@toolness.com>
parents:
41
diff
changeset
|
116 |
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
|
117 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
|
118 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
|
119 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
|
120 |
5727675b1bcb
JS-wrapped python functions now take a context object as their first parameter.
Atul Varma <varmaa@toolness.com>
parents:
41
diff
changeset
|
121 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
|
122 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
|
123 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
|
124 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
|
125 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
|
126 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
|
127 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
|
128 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
|
129 |
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
|
130 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
|
131 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
|
132 |
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
|
133 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
|
134 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
|
135 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
|
136 |
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
|
137 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
|
138 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
|
139 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
|
140 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
|
141 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
|
142 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
|
143 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
|
144 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
|
145 |
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
|
146 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
|
147 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
|
148 |
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
|
149 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
|
150 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
|
151 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
|
152 |
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
|
153 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
|
154 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
|
155 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
|
156 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
|
157 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
|
158 |
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
|
159 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
|
160 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
|
161 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
|
162 |
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
|
163 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
|
164 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
|
165 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
|
166 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
|
167 |
31
d0a3f358072a
gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents:
29
diff
changeset
|
168 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
|
169 def hai2u(cx, this, args): |
29
608d086d12e3
Added a new PYM_pyObjectToJsval() function that only supports unicode for the moment. Also, whereever we're assuming that Py_UNICODE is UCS-2, we're surrounding such code with #ifndef Py_UNICODE_WIDE.
Atul Varma <varmaa@toolness.com>
parents:
28
diff
changeset
|
170 return u"o hai" |
31
d0a3f358072a
gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents:
29
diff
changeset
|
171 self.assertEqual(self._evalJsWrappedPyFunc(hai2u, 'hai2u()'), |
d0a3f358072a
gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents:
29
diff
changeset
|
172 u"o hai") |
24
74b7ad049542
Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents:
22
diff
changeset
|
173 |
46
a0f677cfc679
Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents:
45
diff
changeset
|
174 def testJsWrappedPythonFunctionThrowsException(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
|
175 def hai2u(cx, this, args): |
46
a0f677cfc679
Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents:
45
diff
changeset
|
176 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
|
177 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
|
178 self._evalJsWrappedPyFunc, |
a0f677cfc679
Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents:
45
diff
changeset
|
179 hai2u, 'hai2u()') |
a0f677cfc679
Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents:
45
diff
changeset
|
180 self.assertEqual(self.last_exception.message, |
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
|
181 "hello") |
46
a0f677cfc679
Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents:
45
diff
changeset
|
182 |
45
03aec8572461
Python-wrapped JS functions can now return null/None.
Atul Varma <varmaa@toolness.com>
parents:
43
diff
changeset
|
183 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
|
184 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
|
185 pass |
03aec8572461
Python-wrapped JS functions can now return null/None.
Atul Varma <varmaa@toolness.com>
parents:
43
diff
changeset
|
186 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
|
187 None) |
03aec8572461
Python-wrapped JS functions can now return null/None.
Atul Varma <varmaa@toolness.com>
parents:
43
diff
changeset
|
188 |
34
5d3d3b25f23f
JS wrapped Python functions can now return booleans.
Atul Varma <varmaa@toolness.com>
parents:
32
diff
changeset
|
189 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
|
190 def hai2u(cx, this, args): |
34
5d3d3b25f23f
JS wrapped Python functions can now return booleans.
Atul Varma <varmaa@toolness.com>
parents:
32
diff
changeset
|
191 return True |
5d3d3b25f23f
JS wrapped Python functions can now return booleans.
Atul Varma <varmaa@toolness.com>
parents:
32
diff
changeset
|
192 self.assertEqual(self._evalJsWrappedPyFunc(hai2u, 'hai2u()'), |
5d3d3b25f23f
JS wrapped Python functions can now return booleans.
Atul Varma <varmaa@toolness.com>
parents:
32
diff
changeset
|
193 True) |
5d3d3b25f23f
JS wrapped Python functions can now return booleans.
Atul Varma <varmaa@toolness.com>
parents:
32
diff
changeset
|
194 |
5d3d3b25f23f
JS wrapped Python functions can now return booleans.
Atul Varma <varmaa@toolness.com>
parents:
32
diff
changeset
|
195 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
|
196 def hai2u(cx, this, args): |
34
5d3d3b25f23f
JS wrapped Python functions can now return booleans.
Atul Varma <varmaa@toolness.com>
parents:
32
diff
changeset
|
197 return False |
5d3d3b25f23f
JS wrapped Python functions can now return booleans.
Atul Varma <varmaa@toolness.com>
parents:
32
diff
changeset
|
198 self.assertEqual(self._evalJsWrappedPyFunc(hai2u, 'hai2u()'), |
5d3d3b25f23f
JS wrapped Python functions can now return booleans.
Atul Varma <varmaa@toolness.com>
parents:
32
diff
changeset
|
199 False) |
5d3d3b25f23f
JS wrapped Python functions can now return booleans.
Atul Varma <varmaa@toolness.com>
parents:
32
diff
changeset
|
200 |
31
d0a3f358072a
gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents:
29
diff
changeset
|
201 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
|
202 def hai2u(cx, this, args): |
31
d0a3f358072a
gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents:
29
diff
changeset
|
203 return 5 |
d0a3f358072a
gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents:
29
diff
changeset
|
204 self.assertEqual(self._evalJsWrappedPyFunc(hai2u, 'hai2u()'), |
d0a3f358072a
gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents:
29
diff
changeset
|
205 5) |
d0a3f358072a
gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents:
29
diff
changeset
|
206 |
32
abf14cba9ef5
JS wrapped Python functions can now return floats.
Atul Varma <varmaa@toolness.com>
parents:
31
diff
changeset
|
207 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
|
208 def hai2u(cx, this, args): |
32
abf14cba9ef5
JS wrapped Python functions can now return floats.
Atul Varma <varmaa@toolness.com>
parents:
31
diff
changeset
|
209 return 5.1 |
abf14cba9ef5
JS wrapped Python functions can now return floats.
Atul Varma <varmaa@toolness.com>
parents:
31
diff
changeset
|
210 self.assertEqual(self._evalJsWrappedPyFunc(hai2u, 'hai2u()'), |
abf14cba9ef5
JS wrapped Python functions can now return floats.
Atul Varma <varmaa@toolness.com>
parents:
31
diff
changeset
|
211 5.1) |
abf14cba9ef5
JS wrapped Python functions can now return floats.
Atul Varma <varmaa@toolness.com>
parents:
31
diff
changeset
|
212 |
31
d0a3f358072a
gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents:
29
diff
changeset
|
213 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
|
214 def hai2u(cx, this, args): |
31
d0a3f358072a
gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents:
29
diff
changeset
|
215 return -5 |
d0a3f358072a
gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents:
29
diff
changeset
|
216 self.assertEqual(self._evalJsWrappedPyFunc(hai2u, 'hai2u()'), |
d0a3f358072a
gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents:
29
diff
changeset
|
217 -5) |
d0a3f358072a
gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents:
29
diff
changeset
|
218 |
d0a3f358072a
gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents:
29
diff
changeset
|
219 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
|
220 def hai2u(cx, this, args): |
31
d0a3f358072a
gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents:
29
diff
changeset
|
221 return 2147483647 |
d0a3f358072a
gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents:
29
diff
changeset
|
222 self.assertEqual(self._evalJsWrappedPyFunc(hai2u, 'hai2u()'), |
d0a3f358072a
gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents:
29
diff
changeset
|
223 2147483647) |
24
74b7ad049542
Added very primitive support for calling python functions from JS.
Atul Varma <varmaa@toolness.com>
parents:
22
diff
changeset
|
224 |
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
|
225 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
|
226 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
|
227 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
|
228 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
|
229 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
|
230 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
|
231 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
|
232 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
|
233 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
|
234 ) |
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
|
235 |
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
|
236 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
|
237 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
|
238 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
|
239 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
|
240 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
|
241 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
|
242 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
|
243 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
|
244 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
|
245 ) |
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
|
246 |
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
|
247 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
|
248 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
|
249 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
|
250 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
|
251 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
|
252 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
|
253 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
|
254 self.assertTrue(cx.get_property(obj, u"foo") is |
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
|
255 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
|
256 |
73 | 257 def testObjectGetattrThrowsException(self): |
258 cx = pymonkey.Runtime().new_context() | |
259 obj = cx.new_object() | |
260 cx.init_standard_classes(obj) | |
261 result = cx.evaluate_script(obj, '({get foo() { throw "blah"; }})', | |
262 '<string>', 1) | |
263 self.assertRaises(pymonkey.error, | |
264 cx.get_property, | |
265 result, | |
266 u"foo") | |
267 self.assertEqual(self.last_exception.message, u"blah") | |
268 | |
17
0812422ec99e
Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents:
16
diff
changeset
|
269 def testObjectGetattrWorks(self): |
0812422ec99e
Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents:
16
diff
changeset
|
270 cx = pymonkey.Runtime().new_context() |
0812422ec99e
Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents:
16
diff
changeset
|
271 obj = cx.new_object() |
0812422ec99e
Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents:
16
diff
changeset
|
272 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
|
273 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
|
274 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
|
275 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
|
276 pymonkey.undefined) |
0812422ec99e
Added a context.get_property() method.
Atul Varma <varmaa@toolness.com>
parents:
16
diff
changeset
|
277 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
|
278 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
|
279 |
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
|
280 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
|
281 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
|
282 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
|
283 |
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
|
284 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
|
285 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
|
286 |
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
|
287 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
|
288 obj = pymonkey.Runtime().new_context().new_object() |
13 | 289 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
|
290 self.assertFalse(isinstance(obj, pymonkey.Function)) |
13 | 291 |
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
|
292 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
|
293 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
|
294 |
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
|
295 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
|
296 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
|
297 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
|
298 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
|
299 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
|
300 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
|
301 |
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
|
302 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
|
303 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
|
304 |
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
|
305 def testGetRuntimeWorks(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
|
306 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
|
307 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
|
308 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
|
309 |
8
6647870380cc
Added support for undefined.
Atul Varma <varmaa@toolness.com>
parents:
7
diff
changeset
|
310 def testUndefinedCannotBeInstantiated(self): |
6647870380cc
Added support for undefined.
Atul Varma <varmaa@toolness.com>
parents:
7
diff
changeset
|
311 self.assertRaises(TypeError, pymonkey.undefined) |
6647870380cc
Added support for undefined.
Atul Varma <varmaa@toolness.com>
parents:
7
diff
changeset
|
312 |
46
a0f677cfc679
Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents:
45
diff
changeset
|
313 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
|
314 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
|
315 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
|
316 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
|
317 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
|
318 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
|
319 self.assertEqual(self._tostring(cx, |
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
|
320 self.last_exception.message), |
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
|
321 '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
|
322 |
8
6647870380cc
Added support for undefined.
Atul Varma <varmaa@toolness.com>
parents:
7
diff
changeset
|
323 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
|
324 retval = self._evaljs("") |
8
6647870380cc
Added support for undefined.
Atul Varma <varmaa@toolness.com>
parents:
7
diff
changeset
|
325 self.assertTrue(retval is pymonkey.undefined) |
6647870380cc
Added support for undefined.
Atul Varma <varmaa@toolness.com>
parents:
7
diff
changeset
|
326 |
28
bd30f5c02fc3
Added a new test for supplementary multilingual plane unicode.
Atul Varma <varmaa@toolness.com>
parents:
27
diff
changeset
|
327 def testEvaluateReturnsSMPUnicode(self): |
bd30f5c02fc3
Added a new test for supplementary multilingual plane unicode.
Atul Varma <varmaa@toolness.com>
parents:
27
diff
changeset
|
328 # 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
|
329 # multilingual plane (SMP). |
bd30f5c02fc3
Added a new test for supplementary multilingual plane unicode.
Atul Varma <varmaa@toolness.com>
parents:
27
diff
changeset
|
330 retval = self._evaljs("'\uD800\uDC00'") |
bd30f5c02fc3
Added a new test for supplementary multilingual plane unicode.
Atul Varma <varmaa@toolness.com>
parents:
27
diff
changeset
|
331 self.assertEqual(retval, u'\U00010000') |
bd30f5c02fc3
Added a new test for supplementary multilingual plane unicode.
Atul Varma <varmaa@toolness.com>
parents:
27
diff
changeset
|
332 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
|
333 '\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
|
334 |
bd30f5c02fc3
Added a new test for supplementary multilingual plane unicode.
Atul Varma <varmaa@toolness.com>
parents:
27
diff
changeset
|
335 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
|
336 retval = self._evaljs("'o hai\u2026'") |
7
0d0ce6415b66
Added support for unicode strings.
Atul Varma <varmaa@toolness.com>
parents:
5
diff
changeset
|
337 self.assertTrue(type(retval) == unicode) |
0d0ce6415b66
Added support for unicode strings.
Atul Varma <varmaa@toolness.com>
parents:
5
diff
changeset
|
338 self.assertEqual(retval, u'o hai\u2026') |
0d0ce6415b66
Added support for unicode strings.
Atul Varma <varmaa@toolness.com>
parents:
5
diff
changeset
|
339 |
20
abede8af8cf5
PYM_jsvalToPyObject() can now deal with JSObjects.
Atul Varma <varmaa@toolness.com>
parents:
17
diff
changeset
|
340 def testEvaluateReturnsObject(self): |
41
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
341 cx = pymonkey.Runtime().new_context() |
20
abede8af8cf5
PYM_jsvalToPyObject() can now deal with JSObjects.
Atul Varma <varmaa@toolness.com>
parents:
17
diff
changeset
|
342 obj = cx.new_object() |
abede8af8cf5
PYM_jsvalToPyObject() can now deal with JSObjects.
Atul Varma <varmaa@toolness.com>
parents:
17
diff
changeset
|
343 cx.init_standard_classes(obj) |
abede8af8cf5
PYM_jsvalToPyObject() can now deal with JSObjects.
Atul Varma <varmaa@toolness.com>
parents:
17
diff
changeset
|
344 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
|
345 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
|
346 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
|
347 |
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
|
348 def testEvaluateReturnsFunction(self): |
41
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
349 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
|
350 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
|
351 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
|
352 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
|
353 '<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
|
354 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
|
355 |
41
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
356 def testCallFunctionRaisesErrorOnBadFuncArgs(self): |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
357 cx = pymonkey.Runtime().new_context() |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
358 obj = cx.new_object() |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
359 obj = cx.evaluate_script( |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
360 obj, |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
361 '(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
|
362 '<string>', 1 |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
363 ) |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
364 self.assertRaises( |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
365 NotImplementedError, |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
366 cx.call_function, |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
367 obj, obj, (1, self) |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
368 ) |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
369 |
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
|
370 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
|
371 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
|
372 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
|
373 ()) |
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
|
374 |
41
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
375 def testCallFunctionRaisesErrorFromJS(self): |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
376 cx = pymonkey.Runtime().new_context() |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
377 obj = cx.new_object() |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
378 obj = cx.evaluate_script( |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
379 obj, |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
380 '(function boop(a, b) { blarg(); })', |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
381 '<string>', 1 |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
382 ) |
46
a0f677cfc679
Added basic functionality for passing useful exceptions between Python and JS code.
Atul Varma <varmaa@toolness.com>
parents:
45
diff
changeset
|
383 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
|
384 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
|
385 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
|
386 self.assertEqual(self._tostring(cx, |
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
|
387 self.last_exception.message), |
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
|
388 'ReferenceError: blarg is not defined') |
41
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
389 |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
390 def testCallFunctionWorks(self): |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
391 cx = pymonkey.Runtime().new_context() |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
392 obj = cx.new_object() |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
393 thisArg = cx.new_object() |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
394 cx.define_property(thisArg, "c", 3) |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
395 cx.init_standard_classes(obj) |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
396 obj = cx.evaluate_script( |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
397 obj, |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
398 '(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
|
399 '<string>', 1 |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
400 ) |
71ab5e977dd3
Added a context.call_function() method.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
401 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
|
402 |
5 | 403 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
|
404 self.assertTrue(self._evaljs('true') is True) |
5 | 405 |
406 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
|
407 self.assertTrue(self._evaljs('false') is False) |
5 | 408 |
4
2711b636f8e6
Added support for NULL return values.
Atul Varma <varmaa@toolness.com>
parents:
3
diff
changeset
|
409 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
|
410 self.assertTrue(self._evaljs('null') is None) |
4
2711b636f8e6
Added support for NULL return values.
Atul Varma <varmaa@toolness.com>
parents:
3
diff
changeset
|
411 |
3
d6a0819ca6ca
Added return value support for doubles.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
412 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
|
413 self.assertEqual(self._evaljs('1+3'), 4) |
0 | 414 |
31
d0a3f358072a
gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents:
29
diff
changeset
|
415 def testEvaluateReturnsNegativeIntegers(self): |
d0a3f358072a
gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents:
29
diff
changeset
|
416 self.assertEqual(self._evaljs('-5'), -5) |
d0a3f358072a
gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents:
29
diff
changeset
|
417 |
d0a3f358072a
gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents:
29
diff
changeset
|
418 def testEvaluateReturnsBigIntegers(self): |
d0a3f358072a
gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents:
29
diff
changeset
|
419 self.assertEqual(self._evaljs('2147483647*2'), |
d0a3f358072a
gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents:
29
diff
changeset
|
420 2147483647*2) |
d0a3f358072a
gcc now shows all warnings (-Wall).
Atul Varma <varmaa@toolness.com>
parents:
29
diff
changeset
|
421 |
3
d6a0819ca6ca
Added return value support for doubles.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
422 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
|
423 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
|
424 |
0 | 425 if __name__ == '__main__': |
426 unittest.main() |