Revision control

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
@testable import Client
import Foundation
import Shared
import XCTest
class PrefsTests: XCTestCase {
var prefs: NSUserDefaultsPrefs!
override func setUp() {
super.setUp()
prefs = NSUserDefaultsPrefs(prefix: "PrefsTests")
}
override func tearDown() {
prefs.clearAll()
super.tearDown()
}
func testClearPrefs() {
prefs.setObject("foo", forKey: "bar")
XCTAssertEqual(prefs.stringForKey("bar")!, "foo")
// Ensure clearing prefs is branch-specific.
let otherPrefs = NSUserDefaultsPrefs(prefix: "othermockaccount")
otherPrefs.clearAll()
XCTAssertEqual(prefs.stringForKey("bar")!, "foo")
prefs.clearAll()
XCTAssertNil(prefs.stringForKey("bar"))
}
func testStringForKey() {
XCTAssertNil(prefs.stringForKey("key"))
prefs.setObject("value", forKey: "key")
XCTAssertEqual(prefs.stringForKey("key")!, "value")
// Non-String values return nil.
prefs.setObject(1, forKey: "key")
XCTAssertNil(prefs.stringForKey("key"))
}
func testBoolForKey() {
XCTAssertNil(prefs.boolForKey("key"))
prefs.setObject(true, forKey: "key")
XCTAssertEqual(prefs.boolForKey("key")!, true)
prefs.setObject(false, forKey: "key")
XCTAssertEqual(prefs.boolForKey("key")!, false)
// We would like non-Bool values to return nil, but I can't figure out how to differentiate.
// Instead, this documents the undesired behaviour.
prefs.setObject(1, forKey: "key")
XCTAssertEqual(prefs.boolForKey("key")!, true)
prefs.setObject("1", forKey: "key")
XCTAssertNil(prefs.boolForKey("key"))
prefs.setObject("x", forKey: "key")
XCTAssertNil(prefs.boolForKey("key"))
}
func testStringArrayForKey() {
XCTAssertNil(prefs.stringArrayForKey("key"))
prefs.setObject(["value1", "value2"], forKey: "key")
XCTAssertEqual(prefs.stringArrayForKey("key")!, ["value1", "value2"])
// Non-[String] values return nil.
prefs.setObject(1, forKey: "key")
XCTAssertNil(prefs.stringArrayForKey("key"))
// [Non-String] values return nil.
prefs.setObject([1, 2], forKey: "key")
XCTAssertNil(prefs.stringArrayForKey("key"))
}
func testMockProfilePrefsRoundtripsTimestamps() {
let prefs = MockProfilePrefs().branch("baz")
let val: Timestamp = Date.now()
prefs.setLong(val, forKey: "foobar")
XCTAssertEqual(val, prefs.unsignedLongForKey("foobar")!)
}
func testMockProfilePrefsKeys() {
let prefs = MockProfilePrefs().branch("baz") as! MockProfilePrefs
let val: Timestamp = Date.now()
prefs.setLong(val, forKey: "foobar")
XCTAssertEqual(val, (prefs.things["baz.foobar"] as! NSNumber).uint64Value)
}
func testMockProfilePrefsClearAll() {
let prefs1 = MockProfilePrefs().branch("bar") as! MockProfilePrefs
let prefs2 = MockProfilePrefs().branch("baz") as! MockProfilePrefs
// Ensure clearing prefs is branch-specific.
prefs1.setInt(123, forKey: "foo")
prefs2.clearAll()
XCTAssertEqual(123, prefs1.intForKey("foo")!)
prefs1.clearAll()
XCTAssertNil(prefs1.intForKey("foo") as AnyObject?)
}
}