224 lines
6.2 KiB
Objective-C
224 lines
6.2 KiB
Objective-C
//
|
|
// NSUserDefaultsTests.m
|
|
// Roxas
|
|
//
|
|
// Created by Riley Testut on 2/23/16.
|
|
// Copyright © 2016 Riley Testut. All rights reserved.
|
|
//
|
|
|
|
#import "RSTHelperFile.h"
|
|
|
|
@import XCTest;
|
|
|
|
// Dummy NSUserDefaults
|
|
|
|
@interface NSUserDefaults (TestProperties)
|
|
|
|
// Primitives
|
|
@property (assign, nonatomic) BOOL boolProperty;
|
|
@property (assign, nonatomic) float floatProperty;
|
|
@property (assign, nonatomic) double doubleProperty;
|
|
@property (assign, nonatomic) NSInteger integerProperty;
|
|
|
|
// Objects
|
|
@property (copy, nonatomic) NSURL *URLProperty;
|
|
@property (strong, nonatomic) id objectProperty;
|
|
|
|
// Invalid
|
|
@property (assign, nonatomic) short shortProperty;
|
|
|
|
// Custom Accessors
|
|
@property (copy, nonatomic, getter=getMyCustomProperty, setter=setMyCustomProperty:) NSString *customAccessorsProperty;
|
|
|
|
@property (copy, nonatomic) NSString *nonDynamicProperty;
|
|
|
|
@end
|
|
|
|
@implementation NSUserDefaults (TestProperties)
|
|
|
|
@dynamic boolProperty;
|
|
@dynamic floatProperty;
|
|
@dynamic doubleProperty;
|
|
@dynamic integerProperty;
|
|
@dynamic URLProperty;
|
|
@dynamic objectProperty;
|
|
@dynamic shortProperty;
|
|
@dynamic customAccessorsProperty;
|
|
|
|
- (void)setNonDynamicProperty:(NSString *)nonDynamicProperty
|
|
{
|
|
}
|
|
|
|
- (NSString *)nonDynamicProperty
|
|
{
|
|
return nil;
|
|
}
|
|
|
|
@end
|
|
|
|
|
|
|
|
@interface RSTUserDefaults : NSUserDefaults
|
|
|
|
// Non-Dynamic Property
|
|
@property (copy, nonatomic) NSString *subclassProperty;
|
|
|
|
@end
|
|
|
|
@implementation RSTUserDefaults
|
|
|
|
@synthesize subclassProperty;
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
@interface NSUserDefaultsTests : XCTestCase
|
|
|
|
@property (strong, nonatomic) NSUserDefaults *userDefaults;
|
|
|
|
@end
|
|
|
|
@implementation NSUserDefaultsTests
|
|
|
|
- (void)setUp
|
|
{
|
|
[super setUp];
|
|
|
|
NSString *bundleIdentifier = [[NSBundle bundleForClass:self.class] bundleIdentifier];
|
|
self.userDefaults = [[NSUserDefaults alloc] initWithSuiteName:bundleIdentifier];
|
|
}
|
|
|
|
- (void)tearDown
|
|
{
|
|
[super tearDown];
|
|
|
|
NSString *bundleIdentifier = [[NSBundle bundleForClass:self.class] bundleIdentifier];
|
|
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:bundleIdentifier];
|
|
}
|
|
|
|
- (void)testBOOLs
|
|
{
|
|
XCTAssertEqual(NO, self.userDefaults.boolProperty);
|
|
|
|
self.userDefaults.boolProperty = YES;
|
|
XCTAssertEqual(YES, self.userDefaults.boolProperty);
|
|
|
|
self.userDefaults.boolProperty = NO;
|
|
XCTAssertEqual(NO, self.userDefaults.boolProperty);
|
|
}
|
|
|
|
- (void)testFloats
|
|
{
|
|
XCTAssertEqual(0.0, self.userDefaults.floatProperty);
|
|
|
|
self.userDefaults.floatProperty = 2.1;
|
|
XCTAssertTrue(CGFloatEqualToFloat(2.1, self.userDefaults.floatProperty));
|
|
|
|
self.userDefaults.floatProperty = -1.2;
|
|
XCTAssertTrue(CGFloatEqualToFloat(-1.2, self.userDefaults.floatProperty));
|
|
|
|
self.userDefaults.floatProperty = 0.0;
|
|
XCTAssertTrue(CGFloatEqualToFloat(0.0, self.userDefaults.floatProperty));
|
|
}
|
|
|
|
- (void)testDoubles
|
|
{
|
|
XCTAssertEqual(0.0, self.userDefaults.doubleProperty);
|
|
|
|
self.userDefaults.doubleProperty = 3.6;
|
|
XCTAssertTrue(CGFloatEqualToFloat(3.6, self.userDefaults.doubleProperty));
|
|
|
|
self.userDefaults.doubleProperty = -4.8;
|
|
XCTAssertTrue(CGFloatEqualToFloat(-4.8, self.userDefaults.doubleProperty));
|
|
|
|
self.userDefaults.doubleProperty = 0.0;
|
|
XCTAssertTrue(CGFloatEqualToFloat(0.0, self.userDefaults.doubleProperty));
|
|
}
|
|
|
|
- (void)testIntegers
|
|
{
|
|
XCTAssertEqual(0, self.userDefaults.boolProperty);
|
|
|
|
self.userDefaults.integerProperty = 1;
|
|
XCTAssertEqual(1, self.userDefaults.integerProperty);
|
|
|
|
self.userDefaults.integerProperty = -3;
|
|
XCTAssertEqual(-3, self.userDefaults.integerProperty);
|
|
|
|
self.userDefaults.integerProperty = 0;
|
|
XCTAssertEqual(0, self.userDefaults.integerProperty);
|
|
}
|
|
|
|
- (void)testURLs
|
|
{
|
|
XCTAssertNil(self.userDefaults.URLProperty);
|
|
|
|
NSURL *URL = [NSURL URLWithString:@"http://rileytestut.com"];
|
|
self.userDefaults.URLProperty = URL;
|
|
XCTAssertEqualObjects(URL, self.userDefaults.URLProperty);
|
|
|
|
URL = [NSURL URLWithString:@""];
|
|
self.userDefaults.URLProperty = URL;
|
|
XCTAssertEqualObjects(URL, self.userDefaults.URLProperty);
|
|
|
|
self.userDefaults.URLProperty = nil;
|
|
XCTAssertNil(self.userDefaults.URLProperty);
|
|
}
|
|
|
|
- (void)testObjects
|
|
{
|
|
XCTAssertNil(self.userDefaults.objectProperty);
|
|
|
|
self.userDefaults.objectProperty = @"Roxas";
|
|
XCTAssertEqualObjects(@"Roxas", self.userDefaults.objectProperty);
|
|
|
|
self.userDefaults.objectProperty = @1;
|
|
XCTAssertEqualObjects(@1, self.userDefaults.objectProperty);
|
|
|
|
self.userDefaults.objectProperty = @{@"Roxas": @1};
|
|
XCTAssertEqualObjects(@{@"Roxas": @1}, self.userDefaults.objectProperty);
|
|
|
|
// Unfortunately, trying to test this just results in the test deadlocking :/
|
|
// XCTAssertThrows(self.userDefaults.objectProperty = @{@"operation": [NSOperation new]});
|
|
|
|
self.userDefaults.objectProperty = [@"Roxas" dataUsingEncoding:NSUTF8StringEncoding];
|
|
XCTAssertEqualObjects([@"Roxas" dataUsingEncoding:NSUTF8StringEncoding], self.userDefaults.objectProperty);
|
|
|
|
self.userDefaults.objectProperty = nil;
|
|
XCTAssertNil(self.userDefaults.objectProperty);
|
|
}
|
|
|
|
- (void)testInvalidProperties
|
|
{
|
|
XCTAssertThrows(self.userDefaults.shortProperty);
|
|
XCTAssertThrows(self.userDefaults.shortProperty = 1);
|
|
}
|
|
|
|
- (void)testPersistence
|
|
{
|
|
self.userDefaults.customAccessorsProperty = @"Roxas";
|
|
XCTAssertEqualObjects(@"Roxas", self.userDefaults.customAccessorsProperty);
|
|
XCTAssertEqualObjects(@"Roxas", self.userDefaults.dictionaryRepresentation[@"customAccessorsProperty"]);
|
|
|
|
self.userDefaults.nonDynamicProperty = @"Sora";
|
|
XCTAssertNil(self.userDefaults.nonDynamicProperty);
|
|
XCTAssertNil(self.userDefaults.dictionaryRepresentation[@"nonDynamicProperty"]);
|
|
}
|
|
|
|
- (void)testCustomSubclass
|
|
{
|
|
NSString *bundleIdentifier = [[NSBundle bundleForClass:self.class] bundleIdentifier];
|
|
RSTUserDefaults *customUserDefaults = [[RSTUserDefaults alloc] initWithSuiteName:bundleIdentifier];
|
|
|
|
customUserDefaults.subclassProperty = @"Sora";
|
|
XCTAssertEqualObjects(@"Sora", customUserDefaults.subclassProperty);
|
|
XCTAssertNil(customUserDefaults.dictionaryRepresentation[@"subclassProperty"]);
|
|
|
|
customUserDefaults.objectProperty = @"Riley";
|
|
XCTAssertEqualObjects(@"Riley", customUserDefaults.objectProperty);
|
|
XCTAssertEqualObjects(@"Riley", customUserDefaults.dictionaryRepresentation[@"objectProperty"]);
|
|
}
|
|
|
|
@end |