macOSのスクリーンショットの保存場所を変更するメニュバーエクストラ
Revision | f71edbdb8a1c018c5ffbd2186023cbaef4458110 (tree) |
---|---|
Time | 2017-04-23 23:52:13 |
Author | masakih <masakih@user...> |
Commiter | masakih |
実験的クラスを削除
@@ -14,13 +14,9 @@ | ||
14 | 14 | F40EB6D01EA26BEC00FEE444 /* ActionListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = F40EB6CF1EA26BEC00FEE444 /* ActionListener.swift */; }; |
15 | 15 | F40EB6D21EA2F28100FEE444 /* Screenshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = F40EB6D11EA2F28100FEE444 /* Screenshot.swift */; }; |
16 | 16 | F414DD031EABAB7300111DA7 /* UserDefaultsExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F414DD021EABAB7300111DA7 /* UserDefaultsExtension.swift */; }; |
17 | - F414DD051EAC12D500111DA7 /* FolderItemSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F414DD041EAC12D500111DA7 /* FolderItemSerializer.swift */; }; | |
18 | - F414DD071EAC43E500111DA7 /* UserDefaultsTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F414DD061EAC43E500111DA7 /* UserDefaultsTest.swift */; }; | |
19 | - F463F6D91EAA3B8F00FAB2E3 /* LimitedArraySerializerTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F463F6D81EAA3B8F00FAB2E3 /* LimitedArraySerializerTest.swift */; }; | |
20 | - F463F6DB1EAA3C9700FAB2E3 /* LimitedArraySerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F463F6DA1EAA3C9700FAB2E3 /* LimitedArraySerializer.swift */; }; | |
17 | + F42539E01EACCEDE0083EB9D /* UserDefaultsTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F42539DF1EACCEDE0083EB9D /* UserDefaultsTest.swift */; }; | |
21 | 18 | F47B06EB1E9A5DF9006711D9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F47B06EA1E9A5DF9006711D9 /* AppDelegate.swift */; }; |
22 | 19 | F47B06EF1E9A5DF9006711D9 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F47B06EE1E9A5DF9006711D9 /* Assets.xcassets */; }; |
23 | - F47B06FD1E9A5DF9006711D9 /* GoIntoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F47B06FC1E9A5DF9006711D9 /* GoIntoTests.swift */; }; | |
24 | 20 | F47B07081E9A6071006711D9 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = F47B07071E9A6071006711D9 /* MainMenu.xib */; }; |
25 | 21 | F47B070C1E9A65FA006711D9 /* StatusItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = F47B070B1E9A65FA006711D9 /* StatusItem.swift */; }; |
26 | 22 | F47B070E1E9A6E55006711D9 /* StatusBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = F47B070D1E9A6E55006711D9 /* StatusBar.swift */; }; |
@@ -51,16 +47,12 @@ | ||
51 | 47 | F40EB6CF1EA26BEC00FEE444 /* ActionListener.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActionListener.swift; sourceTree = "<group>"; }; |
52 | 48 | F40EB6D11EA2F28100FEE444 /* Screenshot.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Screenshot.swift; sourceTree = "<group>"; }; |
53 | 49 | F414DD021EABAB7300111DA7 /* UserDefaultsExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserDefaultsExtension.swift; sourceTree = "<group>"; }; |
54 | - F414DD041EAC12D500111DA7 /* FolderItemSerializer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FolderItemSerializer.swift; sourceTree = "<group>"; }; | |
55 | - F414DD061EAC43E500111DA7 /* UserDefaultsTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserDefaultsTest.swift; sourceTree = "<group>"; }; | |
56 | - F463F6D81EAA3B8F00FAB2E3 /* LimitedArraySerializerTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LimitedArraySerializerTest.swift; sourceTree = "<group>"; }; | |
57 | - F463F6DA1EAA3C9700FAB2E3 /* LimitedArraySerializer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LimitedArraySerializer.swift; sourceTree = "<group>"; }; | |
50 | + F42539DF1EACCEDE0083EB9D /* UserDefaultsTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserDefaultsTest.swift; sourceTree = "<group>"; }; | |
58 | 51 | F47B06E71E9A5DF9006711D9 /* GoInto.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GoInto.app; sourceTree = BUILT_PRODUCTS_DIR; }; |
59 | 52 | F47B06EA1E9A5DF9006711D9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; |
60 | 53 | F47B06EE1E9A5DF9006711D9 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; |
61 | 54 | F47B06F31E9A5DF9006711D9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; |
62 | 55 | F47B06F81E9A5DF9006711D9 /* GoIntoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GoIntoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; |
63 | - F47B06FC1E9A5DF9006711D9 /* GoIntoTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GoIntoTests.swift; sourceTree = "<group>"; }; | |
64 | 56 | F47B06FE1E9A5DF9006711D9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; |
65 | 57 | F47B07071E9A6071006711D9 /* MainMenu.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MainMenu.xib; sourceTree = "<group>"; }; |
66 | 58 | F47B070B1E9A65FA006711D9 /* StatusItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StatusItem.swift; sourceTree = "<group>"; }; |
@@ -123,8 +115,6 @@ | ||
123 | 115 | F47B07171EA10A88006711D9 /* QuitItem.swift */, |
124 | 116 | F40EB6CF1EA26BEC00FEE444 /* ActionListener.swift */, |
125 | 117 | F4D346931EA644170031AFB3 /* LimitedArray.swift */, |
126 | - F463F6DA1EAA3C9700FAB2E3 /* LimitedArraySerializer.swift */, | |
127 | - F414DD041EAC12D500111DA7 /* FolderItemSerializer.swift */, | |
128 | 118 | F47B06EE1E9A5DF9006711D9 /* Assets.xcassets */, |
129 | 119 | F47B06F31E9A5DF9006711D9 /* Info.plist */, |
130 | 120 | F40EB6C91EA1D7B500FEE444 /* ImageType.plist */, |
@@ -139,9 +129,7 @@ | ||
139 | 129 | isa = PBXGroup; |
140 | 130 | children = ( |
141 | 131 | F4DBE9271EA7864B00CEB984 /* LimitedArrayTest.swift */, |
142 | - F463F6D81EAA3B8F00FAB2E3 /* LimitedArraySerializerTest.swift */, | |
143 | - F414DD061EAC43E500111DA7 /* UserDefaultsTest.swift */, | |
144 | - F47B06FC1E9A5DF9006711D9 /* GoIntoTests.swift */, | |
132 | + F42539DF1EACCEDE0083EB9D /* UserDefaultsTest.swift */, | |
145 | 133 | F47B06FE1E9A5DF9006711D9 /* Info.plist */, |
146 | 134 | ); |
147 | 135 | path = GoIntoTests; |
@@ -261,11 +249,9 @@ | ||
261 | 249 | F47B07181EA10A88006711D9 /* QuitItem.swift in Sources */, |
262 | 250 | F40EB6C81EA1CD7A00FEE444 /* ImageTypeItem.swift in Sources */, |
263 | 251 | F47B070E1E9A6E55006711D9 /* StatusBar.swift in Sources */, |
264 | - F463F6DB1EAA3C9700FAB2E3 /* LimitedArraySerializer.swift in Sources */, | |
265 | 252 | F4D346941EA644170031AFB3 /* LimitedArray.swift in Sources */, |
266 | 253 | F414DD031EABAB7300111DA7 /* UserDefaultsExtension.swift in Sources */, |
267 | 254 | F47B07121EA10A3E006711D9 /* ChooseFolderItem.swift in Sources */, |
268 | - F414DD051EAC12D500111DA7 /* FolderItemSerializer.swift in Sources */, | |
269 | 255 | ); |
270 | 256 | runOnlyForDeploymentPostprocessing = 0; |
271 | 257 | }; |
@@ -273,10 +259,8 @@ | ||
273 | 259 | isa = PBXSourcesBuildPhase; |
274 | 260 | buildActionMask = 2147483647; |
275 | 261 | files = ( |
276 | - F414DD071EAC43E500111DA7 /* UserDefaultsTest.swift in Sources */, | |
262 | + F42539E01EACCEDE0083EB9D /* UserDefaultsTest.swift in Sources */, | |
277 | 263 | F4DBE9281EA7864B00CEB984 /* LimitedArrayTest.swift in Sources */, |
278 | - F463F6D91EAA3B8F00FAB2E3 /* LimitedArraySerializerTest.swift in Sources */, | |
279 | - F47B06FD1E9A5DF9006711D9 /* GoIntoTests.swift in Sources */, | |
280 | 264 | ); |
281 | 265 | runOnlyForDeploymentPostprocessing = 0; |
282 | 266 | }; |
@@ -24,8 +24,8 @@ | ||
24 | 24 | </BuildAction> |
25 | 25 | <TestAction |
26 | 26 | buildConfiguration = "Debug" |
27 | - selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" | |
28 | - selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" | |
27 | + selectedDebuggerIdentifier = "" | |
28 | + selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn" | |
29 | 29 | shouldUseLaunchSchemeArgsEnv = "YES" |
30 | 30 | codeCoverageEnabled = "YES"> |
31 | 31 | <Testables> |
@@ -1,37 +0,0 @@ | ||
1 | -// | |
2 | -// FolderItemSerializer.swift | |
3 | -// GoInto | |
4 | -// | |
5 | -// Created by Hori,Masaki on 2017/04/23. | |
6 | -// Copyright © 2017年 Hori,Masaki. All rights reserved. | |
7 | -// | |
8 | - | |
9 | -import Foundation | |
10 | - | |
11 | -final class FolderItemSerializer: NSObject, NSCoding { | |
12 | - fileprivate let url: URL | |
13 | - | |
14 | - init(_ url: URL) { | |
15 | - self.url = url | |
16 | - } | |
17 | - | |
18 | - private struct CodingKey { | |
19 | - static let url = "FolderItemWrapper.url" | |
20 | - } | |
21 | - | |
22 | - init?(coder aDecoder: NSCoder) { | |
23 | - guard let url = aDecoder.decodeObject(forKey: CodingKey.url) as? URL | |
24 | - else { return nil } | |
25 | - self.url = url | |
26 | - } | |
27 | - func encode(with aCoder: NSCoder) { | |
28 | - aCoder.encode(url, forKey: CodingKey.url) | |
29 | - } | |
30 | -} | |
31 | -extension FolderItemSerializer: Serializer { | |
32 | - var original: SerializerProvider? { return FolderItem(url) } | |
33 | -} | |
34 | - | |
35 | -extension FolderItem: SerializerProvider { | |
36 | - var serializer: Serializer { return FolderItemSerializer(url) } | |
37 | -} |
@@ -1,68 +0,0 @@ | ||
1 | -// | |
2 | -// LimitedArraySerializer.swift | |
3 | -// GoInto | |
4 | -// | |
5 | -// Created by Hori,Masaki on 2017/04/21. | |
6 | -// Copyright © 2017年 Hori,Masaki. All rights reserved. | |
7 | -// | |
8 | - | |
9 | -import Foundation | |
10 | - | |
11 | -protocol SerializerProvider { | |
12 | - var serializer: Serializer { get } | |
13 | -} | |
14 | -protocol Serializer { | |
15 | - var original: SerializerProvider? { get } | |
16 | -} | |
17 | - | |
18 | -private struct LimitedArrayWrapperCodingKey { | |
19 | - static let array = "LimitedArrayWrapperCodingKey.Array" | |
20 | - static let size = "LimitedArrayWrapperCodingKey.Size" | |
21 | -} | |
22 | - | |
23 | -private class LimitedArrayWrapper<Element: Equatable>: NSObject, NSCoding { | |
24 | - let array: [Element] | |
25 | - let size: Int | |
26 | - | |
27 | - init(_ limited: LimitedArray<Element>) { | |
28 | - array = limited.array | |
29 | - size = limited.size | |
30 | - } | |
31 | - required init?(coder aDecoder: NSCoder) { | |
32 | - let array = aDecoder.decodeObject(forKey: LimitedArrayWrapperCodingKey.array) | |
33 | - switch array { | |
34 | - case let elements as [Element]: | |
35 | - self.array = elements | |
36 | - case let serialized as [Serializer]: | |
37 | - self.array = serialized.flatMap { $0.original as? Element } | |
38 | - default: | |
39 | - return nil | |
40 | - } | |
41 | - size = aDecoder.decodeInteger(forKey: LimitedArrayWrapperCodingKey.size) | |
42 | - } | |
43 | - func encode(with aCoder: NSCoder) { | |
44 | - if let serializable = array as? [SerializerProvider] { | |
45 | - let storeArray = serializable.map { $0.serializer } | |
46 | - aCoder.encode(storeArray, forKey: LimitedArrayWrapperCodingKey.array) | |
47 | - } else { | |
48 | - aCoder.encode(array, forKey: LimitedArrayWrapperCodingKey.array) | |
49 | - } | |
50 | - aCoder.encode(size, forKey: LimitedArrayWrapperCodingKey.size) | |
51 | - } | |
52 | -} | |
53 | - | |
54 | -class LimitedArraySerializer { | |
55 | - | |
56 | - class func seirialize<Element>(_ object: LimitedArray<Element>) -> Data { | |
57 | - let wrapper = LimitedArrayWrapper(object) | |
58 | - return NSKeyedArchiver.archivedData(withRootObject: wrapper) | |
59 | - } | |
60 | - | |
61 | - class func deserialize<Element>(_ data: Data) -> LimitedArray<Element>? { | |
62 | - guard let wrapper = NSKeyedUnarchiver.unarchiveObject(with: data) as? LimitedArrayWrapper<Element> | |
63 | - else { return nil } | |
64 | - var limited = LimitedArray<Element>(wrapper.size) | |
65 | - wrapper.array.reversed().forEach { limited.append($0) } | |
66 | - return limited | |
67 | - } | |
68 | -} |
@@ -12,7 +12,7 @@ final class StatusBar: NSObject { | ||
12 | 12 | let myStatusBar = NSStatusBar.system().statusItem(withLength: NSSquareStatusItemLength) |
13 | 13 | let menu = NSMenu() |
14 | 14 | private(set) var items: [StatusItem] = [] |
15 | - private(set) var recentItems = LimitedArray<FolderItem>(3) | |
15 | + private(set) var recentItems = LimitedArray<FolderItem>(5) | |
16 | 16 | |
17 | 17 | override init() { |
18 | 18 | super.init() |
@@ -36,6 +36,8 @@ final class StatusBar: NSObject { | ||
36 | 36 | |
37 | 37 | items.reversed().forEach { $0.enter(menu) } |
38 | 38 | |
39 | + UserDefaults.standard.recentURLs?.forEach(appendFolder) | |
40 | + | |
39 | 41 | let currentLocation = Screenshot.shared.location |
40 | 42 | if items |
41 | 43 | .flatMap({ $0 as? FolderItem }) |
@@ -50,6 +52,8 @@ final class StatusBar: NSObject { | ||
50 | 52 | newItem.enter(menu) |
51 | 53 | newItem.set() |
52 | 54 | recentItems.append(newItem) |
55 | + | |
56 | + UserDefaults.standard.recentURLs = recentItems.map { $0.url } | |
53 | 57 | } |
54 | 58 | } |
55 | 59 |
@@ -9,16 +9,23 @@ | ||
9 | 9 | import Foundation |
10 | 10 | |
11 | 11 | extension UserDefaults { |
12 | - var recentFolders: LimitedArray<FolderItem>? { | |
13 | - get { | |
14 | - guard let data = object(forKey: "recentFolders") as? Data, | |
15 | - let serialized: LimitedArray<FolderItem> = LimitedArraySerializer.deserialize(data) | |
16 | - else { return nil } | |
17 | - return serialized | |
12 | + func set(archived: Any?, forKey: String) { | |
13 | + if let object = archived { | |
14 | + let data = NSKeyedArchiver.archivedData(withRootObject: object) | |
15 | + set(data, forKey: forKey) | |
16 | + } else { | |
17 | + set(nil, forKey: forKey) | |
18 | 18 | } |
19 | - set { | |
20 | - let data = newValue.map { LimitedArraySerializer.seirialize($0) } | |
21 | - set(data, forKey: "recentFolders") | |
19 | + } | |
20 | + func unarchiveObject(forKey: String) -> Any? { | |
21 | + if let data = object(forKey: forKey) as? Data { | |
22 | + return NSKeyedUnarchiver.unarchiveObject(with: data) | |
22 | 23 | } |
24 | + return nil | |
25 | + } | |
26 | + | |
27 | + var recentURLs: [URL]? { | |
28 | + get { return unarchiveObject(forKey: "recentURLs") as? [URL] } | |
29 | + set { set(archived: newValue, forKey: "recentURLs") } | |
23 | 30 | } |
24 | 31 | } |
@@ -1,36 +0,0 @@ | ||
1 | -// | |
2 | -// GoIntoTests.swift | |
3 | -// GoIntoTests | |
4 | -// | |
5 | -// Created by Hori,Masaki on 2017/04/09. | |
6 | -// Copyright © 2017年 Hori,Masaki. All rights reserved. | |
7 | -// | |
8 | - | |
9 | -import XCTest | |
10 | -@testable import GoInto | |
11 | - | |
12 | -class GoIntoTests: XCTestCase { | |
13 | - | |
14 | - override func setUp() { | |
15 | - super.setUp() | |
16 | - // Put setup code here. This method is called before the invocation of each test method in the class. | |
17 | - } | |
18 | - | |
19 | - override func tearDown() { | |
20 | - // Put teardown code here. This method is called after the invocation of each test method in the class. | |
21 | - super.tearDown() | |
22 | - } | |
23 | - | |
24 | - func testExample() { | |
25 | - // This is an example of a functional test case. | |
26 | - // Use XCTAssert and related functions to verify your tests produce the correct results. | |
27 | - } | |
28 | - | |
29 | - func testPerformanceExample() { | |
30 | - // This is an example of a performance test case. | |
31 | - self.measure { | |
32 | - // Put the code you want to measure the time of here. | |
33 | - } | |
34 | - } | |
35 | - | |
36 | -} |
@@ -1,70 +0,0 @@ | ||
1 | -// | |
2 | -// LimitedArraySerializerTest.swift | |
3 | -// GoInto | |
4 | -// | |
5 | -// Created by Hori,Masaki on 2017/04/21. | |
6 | -// Copyright © 2017年 Hori,Masaki. All rights reserved. | |
7 | -// | |
8 | - | |
9 | -import XCTest | |
10 | - | |
11 | -@testable import GoInto | |
12 | - | |
13 | - | |
14 | -class LimitedArraySerializerTest: XCTestCase { | |
15 | - | |
16 | - func testInt() { | |
17 | - var limited = LimitedArray<Int>(3) | |
18 | - limited.append(1) | |
19 | - limited.append(2) | |
20 | - limited.append(3) | |
21 | - | |
22 | - let data = LimitedArraySerializer.seirialize(limited) | |
23 | - XCTAssertNotNil(data) | |
24 | - let object: LimitedArray<Int> = LimitedArraySerializer.deserialize(data) ?? LimitedArray<Int>(3) | |
25 | - | |
26 | - XCTAssertEqual(object.array, limited.array) | |
27 | - XCTAssertEqual(object.size, limited.size) | |
28 | - } | |
29 | - | |
30 | - func testURL() { | |
31 | - var limited = LimitedArray<URL>(3) | |
32 | - limited.append(URL(fileURLWithPath: "/System/")) | |
33 | - limited.append(URL(fileURLWithPath: "/Users/")) | |
34 | - limited.append(URL(fileURLWithPath: "/var/")) | |
35 | - | |
36 | - let data = LimitedArraySerializer.seirialize(limited) | |
37 | - XCTAssertNotNil(data) | |
38 | - let object: LimitedArray<URL> = LimitedArraySerializer.deserialize(data) ?? LimitedArray<URL>(3) | |
39 | - | |
40 | - XCTAssertEqual(object.array, limited.array) | |
41 | - XCTAssertEqual(object.size, limited.size) | |
42 | - } | |
43 | - func testFolderItem() { | |
44 | - var limited = LimitedArray<FolderItem>(3) | |
45 | - limited.append(FolderItem(URL(fileURLWithPath: "/System/"))) | |
46 | - limited.append(FolderItem(URL(fileURLWithPath: "/Users/"))) | |
47 | - limited.append(FolderItem(URL(fileURLWithPath: "/var/"))) | |
48 | - | |
49 | - let data = LimitedArraySerializer.seirialize(limited) | |
50 | - XCTAssertNotNil(data) | |
51 | - let object: LimitedArray<FolderItem> = LimitedArraySerializer.deserialize(data) ?? LimitedArray<FolderItem>(3) | |
52 | - | |
53 | - XCTAssertEqual(object.array, limited.array) | |
54 | - XCTAssertEqual(object.size, limited.size) | |
55 | - } | |
56 | - | |
57 | - func testSize() { | |
58 | - var limited = LimitedArray<URL>(5) | |
59 | - limited.append(URL(fileURLWithPath: "/System/")) | |
60 | - limited.append(URL(fileURLWithPath: "/Users/")) | |
61 | - limited.append(URL(fileURLWithPath: "/var/")) | |
62 | - | |
63 | - let data = LimitedArraySerializer.seirialize(limited) | |
64 | - XCTAssertNotNil(data) | |
65 | - let object: LimitedArray<URL> = LimitedArraySerializer.deserialize(data) ?? LimitedArray<URL>(5) | |
66 | - | |
67 | - XCTAssertEqual(object.array, limited.array) | |
68 | - XCTAssertEqual(object.size, limited.size) | |
69 | - } | |
70 | -} |
@@ -11,20 +11,29 @@ import XCTest | ||
11 | 11 | @testable import GoInto |
12 | 12 | |
13 | 13 | class UserDefaultsTest: XCTestCase { |
14 | + var originalURLs: [URL]? = [] | |
15 | + | |
16 | + override func setUp() { | |
17 | + super.setUp() | |
18 | + originalURLs = UserDefaults.standard.recentURLs | |
19 | + } | |
20 | + | |
21 | + override func tearDown() { | |
22 | + UserDefaults.standard.recentURLs = originalURLs | |
23 | + super.tearDown() | |
24 | + } | |
14 | 25 | |
15 | 26 | func testRecentFolders() { |
16 | - var limited = LimitedArray<FolderItem>(3) | |
17 | - limited.append(FolderItem(URL(fileURLWithPath: "/System/"))) | |
18 | - limited.append(FolderItem(URL(fileURLWithPath: "/Users/"))) | |
19 | - limited.append(FolderItem(URL(fileURLWithPath: "/var/"))) | |
27 | + let urls = [URL(fileURLWithPath: "/System/"), | |
28 | + URL(fileURLWithPath: "/Users/"), | |
29 | + URL(fileURLWithPath: "/var/")] | |
20 | 30 | |
21 | - UserDefaults.standard.recentFolders = limited | |
31 | + UserDefaults.standard.recentURLs = urls | |
22 | 32 | |
23 | - let storedData = UserDefaults.standard.recentFolders | |
33 | + let storedData = UserDefaults.standard.recentURLs | |
24 | 34 | XCTAssertNotNil(storedData) |
25 | 35 | guard let stored = storedData else { return } |
26 | 36 | |
27 | - XCTAssertEqual(limited.array, stored.array) | |
28 | - XCTAssertEqual(limited.size, stored.size) | |
37 | + XCTAssertEqual(urls, stored) | |
29 | 38 | } |
30 | 39 | } |