Commits

Bob Ippolito committed 75c5e4b

demonstrate bug-958093: pointer support interferes with initialization

Comments (0)

Files changed (3)

Lib/objc/test/test_outputinitializer.py

+import unittest
+import objc
+from objc.test.testoutputinitializer import PyObjC_TestOutputInitializer
+objc.setSignatureForSelector("PyObjC_TestOutputInitializer", "initWithBooleanOutput:", "@@:o^c");
+
+class TestOutputInitializer(unittest.TestCase):
+    def testOutputInitializer(self):
+        robj, rtrue = PyObjC_TestOutputInitializer.alloc().initWithBooleanOutput_()
+        self.assertEquals(rtrue, objc.YES)
+        self.assertEquals(robj.isInitialized(), objc.YES)
+
+if __name__ == '__main__':
+    unittest.main()

Lib/objc/test/testoutputinitializer.m

+/*
+ * XXX: PyObjC_TestOutputInitializer is a class that can't be created
+ *      from Python but ends up in some fun places like NSAttributedString
+ */
+
+#include <Python.h>
+#include <pyobjc-api.h>
+
+#import <Foundation/Foundation.h>
+
+#ifndef GNU_RUNTIME
+#include <objc/objc-runtime.h>
+#endif
+
+@interface PyObjC_TestOutputInitializer: NSObject
+{
+    int _priv;
+}
+
+-initWithBooleanOutput:(BOOL *)outBool;
+-(BOOL)isInitialized;
+@end
+
+@implementation PyObjC_TestOutputInitializer
+-initWithBooleanOutput:(BOOL *)outBool
+{
+    self = [self init];
+    *outBool = YES;
+    _priv = YES;
+    return self;
+}
+
+-isInitialized
+{
+    return _priv;
+}
+@end
+
+/* Python glue */
+void inittestoutputinitializer(void);
+static PyMethodDef no_methods[] = {
+	{ 0, 0, 0, 0 }
+};
+
+void inittestoutputinitializer(void)
+{
+	PyObject* m;
+
+	m = Py_InitModule4("testoutputinitializer", no_methods, 
+		NULL, NULL, PYTHON_API_VERSION);
+	if (!m) return;
+
+	if (PyObjC_ImportAPI(m) < 0) return;
+
+	PyModule_AddObject(m, "PyObjC_TestOutputInitializer", 
+		PyObjCClass_New([PyObjC_TestOutputInitializer class]));
+}
               ["Lib/objc/test/testclassandinst.m"],
               extra_compile_args=["-IModules/objc" ] + CFLAGS,
               extra_link_args=OBJC_LDFLAGS),
+    Extension("objc.test.testoutputinitializer",
+              ["Lib/objc/test/testoutputinitializer.m"],
+              extra_compile_args=["-IModules/objc" ] + CFLAGS,
+              extra_link_args=OBJC_LDFLAGS),
     ]
 
 if sys.version == '2.2' or sys.version.startswith('2.2.'):
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.