1/*
2 * This module is used in the unittests for object initialize.
3 */
4#include "Python.h"
5#include "pyobjc-api.h"
6
7#import <Foundation/Foundation.h>
8
9static int numUninitialized = 0;
10
11@interface OC_TestInitialize : NSObject
12{
13	int       isInitialized;
14}
15-init;
16-retain;
17-(void)release;
18-autorelease;
19-(int)isInitialized;
20+(int)numUninitialized;
21-(id)dummy;
22+(id)makeInstance;
23
24/* completely unrelated ... */
25-(oneway void)onewayVoidMethod;
26
27@end
28
29@implementation OC_TestInitialize
30
31-init
32{
33	self = [super init];
34	if (!self) return self;
35
36	isInitialized = 1;
37	return self;
38}
39
40-retain
41{
42	if (!isInitialized) {
43		numUninitialized ++;
44	}
45	return [super retain];
46}
47
48-(void)release
49{
50	if (!isInitialized) {
51		numUninitialized ++;
52	}
53	[super release];
54}
55
56-(id)autorelease
57{
58	if (!isInitialized) {
59		numUninitialized ++;
60	}
61	return [super autorelease];
62}
63
64-(int)isInitialized
65{
66	return isInitialized;
67}
68
69+(int)numUninitialized
70{
71	return numUninitialized;
72}
73
74-(id)dummy
75{
76	return @"hello";
77}
78
79+(id)makeInstance
80{
81	return [[[self alloc] init] autorelease];
82}
83
84-(oneway void)onewayVoidMethod
85{
86	isInitialized=-1;
87}
88
89@end
90
91
92static PyMethodDef initialize_methods[] = {
93	{ 0, 0, 0, 0 }
94};
95
96void initinitialize(void);
97void initinitialize(void)
98{
99	PyObject* m;
100
101	m = Py_InitModule4("initialize", initialize_methods,
102			NULL, NULL, PYTHON_API_VERSION);
103
104	PyObjC_ImportAPI(m);
105	PyModule_AddObject(m, "OC_TestInitialize",
106		PyObjCClass_New([OC_TestInitialize class]));
107}
108