mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-22 16:33:29 +00:00
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:
parent
4ff31d5199
commit
a74654dda8
1 changed files with 123 additions and 0 deletions
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue