Skip to content

Instantly share code, notes, and snippets.

@philosopherdog
Created January 4, 2017 01:34
Show Gist options
  • Save philosopherdog/6516e5c4380d424ea0defd0bd49d89ee to your computer and use it in GitHub Desktop.
Save philosopherdog/6516e5c4380d424ea0defd0bd49d89ee to your computer and use it in GitHub Desktop.
Swift NSUserDefaults Fake for Testing
// Copyright (c) 2014 Mark Grimes. All rights reserved.
import Foundation
class FakeUserDefaults : NSUserDefaults {
typealias FakeDefaults = Dictionary<String, AnyObject?>
var data : FakeDefaults
override init?(suiteName suitename: String) {
data = FakeDefaults()
super.init(suiteName: "UnitTest")
}
// NOP
override func synchronize() -> Bool {
return true
}
// Accessors
override func objectForKey(defaultName: String) -> AnyObject? {
return data[defaultName]?
}
override func valueForKey(key: String) -> AnyObject? {
return data[key]?
}
override func boolForKey(defaultName: String) -> Bool {
return data[defaultName] as Bool
}
override func integerForKey(defaultName: String) -> Int {
return data[defaultName] as Int
}
override func floatForKey(defaultName: String) -> Float {
return data[defaultName] as Float
}
// Mutators
override func setObject(value: AnyObject?, forKey defaultName: String) {
data[defaultName] = value
}
override func setValue(value: AnyObject?, forKey key: String) {
data[key] = value
}
override func setBool(value: Bool, forKey defaultName: String) {
data[defaultName] = value as Bool
}
override func setInteger(value: Int, forKey defaultName: String) {
data[defaultName] = value as Int
}
override func setFloat(value: Float, forKey defaultName: String) {
data[defaultName] = value as Float
}
}
extension NSUserDefaults {
@objc class func transientDefaults() -> FakeUserDefaults {
return FakeUserDefaults(suiteName: "UnitTest")!
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment