GBA003/External/Roxas/RoxasTests/NSUserDefaultsTests.m
2024-05-30 10:22:15 +08:00

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