/* Contributed by Nicola Pero - Tue Mar  6 23:05:53 CET 2001 */
#include <objc/objc.h>
#include <objc/objc-api.h>

#include "next_mapping.h"

/* Tests creating a root class and a subclass with an ivar and
   accessor methods; accessor methods implemented in a separate
   category */

@interface RootClass
{
  Class isa;
}
@end

@implementation RootClass
#ifdef __NEXT_RUNTIME__                                   
+ initialize { return self; }
#endif
@end

@interface SubClass : RootClass
{
  int state;
}
@end

@implementation SubClass
@end

@interface SubClass (Additions)
- (void) setState: (int)number;
- (int) state;
@end

@implementation SubClass (Additions)
- (void) setState: (int)number
{
  state = number;
}
- (int) state
{
  return state;
}
@end

#include "class-tests-1.h"
#define TYPE_OF_OBJECT_WITH_ACCESSOR_METHOD SubClass *
#include "class-tests-2.h"

int main (void)
{
  SubClass *object;

  test_class_with_superclass ("SubClass", "RootClass");

  /* The NeXT runtime's category implementation is lazy: categories are not attached 
     to classes until the class is initialized (at +initialize time).  */
#ifdef __NEXT_RUNTIME__
  [SubClass initialize];
#endif

  test_that_class_has_instance_method ("SubClass", @selector (setState:));
  test_that_class_has_instance_method ("SubClass", @selector (state));

  object = class_create_instance (objc_lookup_class ("SubClass"));
  test_accessor_method (object, 0, 1, 1, -3, -3);

  return 0;
}
