<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>tests/016-test.py</filename>
    </added>
    <added>
      <filename>tests/017-test.py</filename>
    </added>
    <added>
      <filename>tests/018-test.py</filename>
    </added>
    <added>
      <filename>tests/019-test.py</filename>
    </added>
    <added>
      <filename>tests/020-test.py</filename>
    </added>
    <added>
      <filename>tests/021-test.py</filename>
    </added>
    <added>
      <filename>tests/022-test.py</filename>
    </added>
    <added>
      <filename>tests/023-test.py</filename>
    </added>
    <added>
      <filename>tests/024-test.py</filename>
    </added>
    <added>
      <filename>tests/025-test.py</filename>
    </added>
    <added>
      <filename>tests/026-test.py</filename>
    </added>
    <added>
      <filename>tests/027-test.py</filename>
    </added>
    <added>
      <filename>tests/029-test.py</filename>
    </added>
    <added>
      <filename>tests/030-test.py</filename>
    </added>
    <added>
      <filename>tests/031-test.py</filename>
    </added>
    <added>
      <filename>tests/032-test.py</filename>
    </added>
    <added>
      <filename>tests/033-test.py</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -60,7 +60,6 @@ Function_call(Function* self, PyObject* args, PyObject* kwargs)
         item = PySequence_GetItem(args, idx);
         if(item == NULL)
         {
-            fprintf(stderr, &quot;Failed to get element.\n&quot;);
             free(argv);
             return NULL;
         }
@@ -68,7 +67,6 @@ Function_call(Function* self, PyObject* args, PyObject* kwargs)
         argv[idx] = py2js(self-&gt;obj.cx, item);
         if(argv[idx] == JSVAL_VOID)
         {
-            fprintf(stderr, &quot;Failed to convert value.\n&quot;);
             free(argv);
             return NULL;
         }
@@ -79,7 +77,6 @@ Function_call(Function* self, PyObject* args, PyObject* kwargs)
     parent = JSVAL_TO_OBJECT(self-&gt;parent);
     if(!JS_CallFunctionValue(cx, parent, func, argc, argv, &amp;rval))
     {
-        fprintf(stderr, &quot;Failed to call function\n&quot;);
         free(argv);
         PyErr_SetString(PyExc_RuntimeError, &quot;Failed to execute JS Function.&quot;);
         return NULL;</diff>
      <filename>spidermonkey/jsfunction.c</filename>
    </modified>
    <modified>
      <diff>@@ -75,7 +75,7 @@ js_get_prop(JSContext* jscx, JSObject* jsobj, jsval key, jsval* val)
     PyObject* pykey = NULL;
     PyObject* pyval = NULL;
     JSBool ret = JS_FALSE;
-    
+   
     pycx = (Context*) JS_GetContextPrivate(jscx);
     if(pycx == NULL) goto cleanup;
     
@@ -85,15 +85,18 @@ js_get_prop(JSContext* jscx, JSObject* jsobj, jsval key, jsval* val)
     pykey = js2py(pycx, key);
     if(pykey == NULL) goto cleanup;
 
-    //pyval = PyObject_GetItem(pyobj, pykey);
+    pyval = PyObject_GetItem(pyobj, pykey);
     if(pyval == NULL) pyval = PyObject_GetAttr(pyobj, pykey);
-    if(pyval == NULL) goto cleanup;
-    
-    *val = py2js(pycx, pyval);
-    if(*val != JSVAL_VOID)
+    if(pyval != NULL)
     {
-        ret = JS_TRUE;
+        *val = py2js(pycx, pyval);
     }
+    else
+    {
+        *val = JSVAL_VOID;
+    }
+    
+    ret = JS_TRUE;
     
 cleanup:
     // No CX decref cause it's not incref'ed
@@ -316,8 +319,6 @@ js_call(JSContext* jscx, JSObject* jsobj, uintN argc, jsval* argv, jsval* rval)
     PyObject* pyobj = NULL;
     PyObject* tpl = NULL;
     PyObject* ret = NULL;
-    JSFunction* jsfunc = NULL;
-    JSObject* wrapper = NULL;
     
     pycx = (Context*) JS_GetContextPrivate(jscx);
     if(pycx == NULL)</diff>
      <filename>spidermonkey/pyobject.c</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,4 @@
 import t
 @t.rt(&quot;creating runtime&quot;)
 def test(rt):
-    t.neq(rt, None)
+    t.ne(rt, None)</diff>
      <filename>tests/001-test.py</filename>
    </modified>
    <modified>
      <diff>@@ -3,4 +3,4 @@ import t
 def test(cx):
     nan = cx.execute(&quot;NaN;&quot;)
     t.eq(type(nan), float)
-    t.neq(nan, nan)
+    t.ne(nan, nan)</diff>
      <filename>tests/011-test.py</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,6 @@
 import t
 @t.cx(&quot;mapping equality&quot;)
 def test(cx):
-    t.eq(cx.execute('var f={&quot;foo&quot;: &quot;bar&quot;}; f;'), {&quot;foo&quot;: &quot;bar&quot;})
+    js = 'var d = {0: 0, &quot;a&quot;: 1, 2: &quot;b&quot;, &quot;c&quot;: &quot;d&quot;, &quot;blah&quot;: 2.5}; d;'
+    py = {0: 0, &quot;a&quot;: 1, 2: &quot;b&quot;, &quot;c&quot;: &quot;d&quot;, &quot;blah&quot;: 2.5}
+    t.eq(cx.execute(js), py)</diff>
      <filename>tests/014-test.py</filename>
    </modified>
    <modified>
      <diff>@@ -1,29 +1,45 @@
 import unittest
 import spidermonkey
 
-class rt(object):
+class test(object):
     def __init__(self, lbl):
         self.lbl = lbl
     def __call__(self, func):
-        def t():
-            rt = spidermonkey.Runtime()
-            func(rt)
-        t.func_name = &quot;test %s&quot; % self.lbl
-        return t
+        def run():
+            func(*self.args())
+        run.func_name = &quot;test %s&quot; % self.lbl
+        return run
+    def args(self, func):
+        raise NotImplementedError()
 
-class cx(object):
-    def __init__(self, lbl):
-        self.lbl = lbl
-    def __call__(self, func):
-        def t():
-            rt = spidermonkey.Runtime()
-            cx = rt.new_context()
-            func(cx)
-        t.func_name = &quot;test %s&quot; % self.lbl
-        return t
+class rt(test):
+    def args(self):
+        return (spidermonkey.Runtime(),)
+
+class cx(test):
+    def args(self):
+        rt = spidermonkey.Runtime()
+        return (rt.new_context(),)
+
+class echo(test):
+    def args(self):
+        rt = spidermonkey.Runtime()
+        cx = rt.new_context()
+        echo = cx.execute(&quot;var echo = function(foo) {return foo;}; echo;&quot;)
+        return (echo,)
 
 def eq(a, b):
     assert a == b, &quot;%r != %r&quot; % (a, b)
 
-def neq(a, b):
+def ne(a, b):
     assert a != b, &quot;%r == %r&quot; % (a, b)
+
+def raises(exctype, func, *args, **kwargs):
+    try:
+        func(*args, **kwargs)
+    except exctype, inst:
+        pass
+    else:
+        raise AssertionError(&quot;Function %s did not raise %s&quot; % (
+            func.func_name, exctype.__name__))
+</diff>
      <filename>tests/t.py</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>old-t/bind_test.py</filename>
    </removed>
    <removed>
      <filename>old-t/context_test.py</filename>
    </removed>
    <removed>
      <filename>old-t/define_function_test.py</filename>
    </removed>
    <removed>
      <filename>old-t/error_test.py</filename>
    </removed>
    <removed>
      <filename>old-t/roundtrip_test.py</filename>
    </removed>
    <removed>
      <filename>old-t/to_python_test.py</filename>
    </removed>
    <removed>
      <filename>old-t/unicode_test.py</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>e5aea5d107a18d51e2d849bd14215d36e7e18ca6</id>
    </parent>
  </parents>
  <author>
    <name>Paul Davis</name>
    <email>davisp@puny.(none)</email>
  </author>
  <url>http://github.com/defunkt/python-spidermonkey/commit/48041223a48c4e2ea44127c36420017a8bca6cf1</url>
  <id>48041223a48c4e2ea44127c36420017a8bca6cf1</id>
  <committed-date>2009-03-04T21:08:48-08:00</committed-date>
  <authored-date>2009-03-04T21:08:48-08:00</authored-date>
  <message>Adding more testing awesomeness! Yay!

Adding translations of old tests. The test numbering scheme is not going to work. Going to need to do subdirectories.</message>
  <tree>f555380f2c52c4e467c456ca7e904e0d58ed6ac4</tree>
  <committer>
    <name>Paul Davis</name>
    <email>davisp@puny.(none)</email>
  </committer>
</commit>
