From 6f6bfc667bd7bc890fc397c49cee309822f13491 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 12 Aug 2011 19:27:02 -0400 Subject: [PATCH] Inverted CPCharacterSet characterSetWithCharactersInString now archive properly. --- Foundation/CPCharacterSet.j | 28 +++++++++++++++++++++++---- Tests/Foundation/CPCharacterSetTest.j | 10 ++++++++++ 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/Foundation/CPCharacterSet.j b/Foundation/CPCharacterSet.j index 2b3431abe..458c77ded 100644 --- a/Foundation/CPCharacterSet.j +++ b/Foundation/CPCharacterSet.j @@ -174,6 +174,27 @@ var _builtInCharacterSets = {}; @end +var CPCharacterSetInvertedKey = @"CPCharacterSetInvertedKey"; + +@implementation CPCharacterSet (CPCoding) + +- (id)initWithCoder:(CPCoder)aCoder +{ + if (self = [super init]) + { + _inverted = [aCoder decodeBoolForKey:CPCharacterSetInvertedKey]; + } + + return self; +} + +- (void)encodeWithCoder:(CPCoder)aCoder +{ + [aCoder encodeBool:_inverted forKey:CPCharacterSetInvertedKey]; +} + +@end + // A character set that stores a list of ranges of // acceptable characters. @implementation _CPRangeCharacterSet : CPCharacterSet @@ -369,9 +390,7 @@ var _CPStringContentCharacterSetStringKey = @"_CPStringContentCharacterSetString - (id)initWithCoder:(CPCoder)aCoder { - // TODO Replace with self = [super initWithCoder:] when super supports it, to get - // "inverted" flag. - if (self) + if (self = [super initWithCoder:aCoder]) { _string = [aCoder decodeObjectForKey:_CPStringContentCharacterSetStringKey] } @@ -381,7 +400,8 @@ var _CPStringContentCharacterSetStringKey = @"_CPStringContentCharacterSetString - (void)encodeWithCoder:(CPCoder)aCoder { - // TODO When supported, call super encodeWithCoder:. + [super encodeWithCoder:aCoder]; + [aCoder encodeObject:_string forKey:_CPStringContentCharacterSetStringKey]; } diff --git a/Tests/Foundation/CPCharacterSetTest.j b/Tests/Foundation/CPCharacterSetTest.j index 1784c5cbd..27eaf91a6 100644 --- a/Tests/Foundation/CPCharacterSetTest.j +++ b/Tests/Foundation/CPCharacterSetTest.j @@ -24,6 +24,16 @@ [self assertTrue:[unarchived characterIsMember:'b']]; [self assertTrue:[unarchived characterIsMember:'c']]; [self assertFalse:[unarchived characterIsMember:'d']]; + + var invertedSet = [charSet invertedSet]; + + archived = [CPKeyedArchiver archivedDataWithRootObject:invertedSet]; + unarchived = [CPKeyedUnarchiver unarchiveObjectWithData:archived]; + + [self assertFalse:[unarchived characterIsMember:'a'] message:"in unarchived inverted set 'a' is not a member"]; + [self assertFalse:[unarchived characterIsMember:'b'] message:"in unarchived inverted set 'b' is not a member"]; + [self assertFalse:[unarchived characterIsMember:'c'] message:"in unarchived inverted set 'c' is not a member"]; + [self assertTrue:[unarchived characterIsMember:'d'] message:"in unarchived inverted set 'd' is a member"]; } @end \ No newline at end of file