Add test case from Scott Christley.

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@902 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Andrew McCallum 1996-02-13 01:57:17 +00:00
parent 4ff31d5199
commit a74654dda8

View file

@ -1,5 +1,7 @@
/* A demonstration of writing and reading with NSArchiver */
#if 0
#include <Foundation/NSArchiver.h>
#include <Foundation/NSString.h>
#include <Foundation/NSAutoreleasePool.h>
@ -32,7 +34,16 @@ int main()
[set release];
/* Read it back in from the file */
#if 1
{
id d = [[NSData alloc] initWithContentsOfFile:@"./nsarchiver.dat"];
id a = [NSUnarchiver alloc];
a = [a initForReadingWithData:d];
set = [a decodeObject];
}
#else
set = [NSUnarchiver unarchiveObjectWithFile: @"./nsarchiver.dat"];
#endif
/* Display what we read, to make sure it matches what we wrote */
printf("\nReading:\n");
@ -47,3 +58,115 @@ int main()
exit(0);
}
#else
#include <objects/objects.h>
#include <Foundation/NSArchiver.h>
#include <Foundation/NSAutoreleasePool.h>
@interface TestClass : NSObject
{
id next_responder;
}
- (void)setNextResponder: anObject;
- nextResponder;
@end
@implementation TestClass
- (void)setNextResponder: anObject
{
next_responder = anObject;
}
- nextResponder
{
return next_responder;
}
// NSCoding protocol
- (void)encodeWithCoder:aCoder
{
[super encodeWithCoder:aCoder];
[aCoder encodeObjectReference:next_responder withName:@"Next Responder"];
}
- initWithCoder:aDecoder
{
id d;
[super initWithCoder:aDecoder];
[aDecoder decodeObjectAt:&next_responder withName:&d];
return self;
}
@end
////////////////////////////////////////
int main()
{
id arp;
id r1, r2;
arp = [[NSAutoreleasePool alloc] init];
// Create a simple loop
r1 = [[TestClass alloc] init];
r2 = [[TestClass alloc] init];
[r1 setNextResponder: r2];
[r2 setNextResponder: r1];
printf("Writing\n");
printf("%d\n", [r1 hash]);
printf("%d\n", [r2 hash]);
printf("%d\n", [[r1 nextResponder] hash]);
printf("%d\n", [[r2 nextResponder] hash]);
/* Write it to a file */
{
id d = [[NSMutableData alloc] init];
id a = [[Coder alloc] initForWritingWithMutableData: d];
[a startEncodingInterconnectedObjects];
[a encodeObject: r1 withName:@"one"];
[a encodeObject: r2 withName:@"another"];
[a finishEncodingInterconnectedObjects];
[d writeToFile: @"./nsarchiver.dat" atomically:NO];
[d release];
[a release];
}
/* Release the object that was coded */
[r1 release];
[r2 release];
/* Read it back in from the file */
printf("\nReading:\n");
{
id d;
id a = [Coder newReadingFromFile:@"./nsarchiver.dat"];
[a startDecodingInterconnectedObjects];
[a decodeObjectAt: &r1 withName:&d];
[a decodeObjectAt: &r2 withName:&d];
[a finishDecodingInterconnectedObjects];
}
/* Display what we read, to make sure it matches what we wrote */
{
printf("%d\n", [r1 hash]);
printf("%d\n", [r2 hash]);
printf("%d\n", [[r1 nextResponder] hash]);
printf("%d\n", [[r2 nextResponder] hash]);
}
/* Do the autorelease. */
[arp release];
exit(0);
}
#endif