-
Notifications
You must be signed in to change notification settings - Fork 169
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
11 changed files
with
517 additions
and
283 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
// | ||
// AwesomeCache.h | ||
// AwesomeCache | ||
// | ||
// Created by Alexander Schuch on 31/01/15. | ||
// Copyright (c) 2015 Alexander Schuch. All rights reserved. | ||
// | ||
|
||
#import <UIKit/UIKit.h> | ||
|
||
//! Project version number for AwesomeCache. | ||
FOUNDATION_EXPORT double AwesomeCacheVersionNumber; | ||
|
||
//! Project version string for AwesomeCache. | ||
FOUNDATION_EXPORT const unsigned char AwesomeCacheVersionString[]; | ||
|
||
// In this header, you should import all the public headers of your framework using statements like #import <AwesomeCache/PublicHeader.h> | ||
|
||
|
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
<plist version="1.0"> | ||
<dict> | ||
<key>CFBundleDevelopmentRegion</key> | ||
<string>en</string> | ||
<key>CFBundleExecutable</key> | ||
<string>$(EXECUTABLE_NAME)</string> | ||
<key>CFBundleIdentifier</key> | ||
<string>com.aschuch.$(PRODUCT_NAME:rfc1034identifier)</string> | ||
<key>CFBundleInfoDictionaryVersion</key> | ||
<string>6.0</string> | ||
<key>CFBundleName</key> | ||
<string>$(PRODUCT_NAME)</string> | ||
<key>CFBundlePackageType</key> | ||
<string>FMWK</string> | ||
<key>CFBundleShortVersionString</key> | ||
<string>1.0</string> | ||
<key>CFBundleSignature</key> | ||
<string>????</string> | ||
<key>CFBundleVersion</key> | ||
<string>$(CURRENT_PROJECT_VERSION)</string> | ||
<key>NSPrincipalClass</key> | ||
<string></string> | ||
</dict> | ||
</plist> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,136 @@ | ||
// | ||
// AwesomeCacheTests.swift | ||
// AwesomeCacheTests | ||
// | ||
// Created by Alexander Schuch on 31/01/15. | ||
// Copyright (c) 2015 Alexander Schuch. All rights reserved. | ||
// | ||
|
||
import UIKit | ||
import XCTest | ||
import AwesomeCache | ||
|
||
class AwesomeCacheTests: XCTestCase { | ||
|
||
var cache: AwesomeCache<NSString> = AwesomeCache<NSString>(name: "awesomeCache") | ||
|
||
override func setUp() { | ||
cache = AwesomeCache<NSString>(name: "awesomeCache") | ||
cache.removeAllObjects() | ||
|
||
super.setUp() | ||
} | ||
|
||
override func tearDown() { | ||
cache.removeAllObjects() | ||
|
||
super.tearDown() | ||
} | ||
|
||
func testGetterAndSetter() { | ||
let nilObject = cache.objectForKey("unavailable") | ||
XCTAssertNil(nilObject, "Get nil object") | ||
|
||
cache.setObject("AddedString", forKey: "add") | ||
XCTAssertNotNil(cache.objectForKey("add"), "Get non-nil object") | ||
XCTAssertEqual("AddedString", cache.objectForKey("add")!, "Get non-nil object") | ||
} | ||
|
||
func testRemoveObject() { | ||
cache.setObject("AddedString", forKey: "remove") | ||
XCTAssertNotNil(cache.objectForKey("remove"), "Get non-nil object") | ||
XCTAssertEqual("AddedString", cache.objectForKey("remove")!, "Get non-nil object") | ||
|
||
cache.removeObjectForKey("remove") | ||
XCTAssertNil(cache.objectForKey("remove"), "Get deleted object") | ||
} | ||
|
||
func testSubscripting() { | ||
cache["addSubscript"] = "AddedString" | ||
XCTAssertNotNil(cache["addSubscript"], "Get non-nil object via subscript") | ||
XCTAssertEqual("AddedString", cache["addSubscript"]!, "Get non-nil object via subscript") | ||
|
||
cache["addSubscript"] = nil | ||
XCTAssertNil(cache["addSubscript"], "Get deleted object via subscript") | ||
} | ||
|
||
func testObjectExpiry() { | ||
cache.setObject("NeverExpires", forKey: "never", expires: .Never) | ||
cache.setObject("ExpiresIn2Seconds", forKey: "2Seconds", expires: .Seconds(2)) | ||
cache.setObject("ExpiresAtDate", forKey: "atDate", expires: .Date(NSDate().dateByAddingTimeInterval(4))) | ||
|
||
XCTAssertNotNil(cache.objectForKey("never"), "Never expires") | ||
XCTAssertNotNil(cache.objectForKey("2Seconds"), "Expires in 2 seconds") | ||
XCTAssertNotNil(cache.objectForKey("atDate"), "Expires in 4 seconds") | ||
|
||
sleep(2) | ||
|
||
XCTAssertNotNil(cache.objectForKey("never"), "Never expires") | ||
XCTAssertNil(cache.objectForKey("2Seconds"), "Expires in 2 seconds") | ||
XCTAssertNotNil(cache.objectForKey("atDate"), "Expires in 4 seconds") | ||
|
||
sleep(2) | ||
|
||
XCTAssertNotNil(cache.objectForKey("never"), "Never expires") | ||
XCTAssertNil(cache.objectForKey("2Seconds"), "Expires in 2 seconds") | ||
XCTAssertNil(cache.objectForKey("atDate"), "Expires in 3 seconds") | ||
} | ||
|
||
func testCacheBlockExecuted() { | ||
var executed = false | ||
|
||
cache.setObjectForKey("blockExecuted", cacheBlock: { successBlock, failureBlock in | ||
executed = true | ||
successBlock("AddedString", .Never) | ||
}, completion: { object, isLoadedFromCache, error in | ||
XCTAssertNotNil(object, "Cached object not nil") | ||
XCTAssertEqual("AddedString", object!, "Get cached object") | ||
|
||
XCTAssertNotNil(self.cache.objectForKey("blockExecuted"), "Get cached object") | ||
XCTAssertTrue(executed, "Block was executed") | ||
XCTAssertFalse(isLoadedFromCache, "Object was not loaded cached") | ||
XCTAssertNil(error, "Error is nil") | ||
}) | ||
} | ||
|
||
func testCacheBlockNotExecuted() { | ||
var executed = false | ||
|
||
cache.setObject("AddedString", forKey: "blockNotExecuted") | ||
|
||
cache.setObjectForKey("blockNotExecuted", cacheBlock: { successBlock, failureBlock in | ||
executed = true | ||
successBlock("SometingElse", .Never) | ||
}, completion: { object, isLoadedFromCache, error in | ||
XCTAssertNotNil(object, "Cached object not nil") | ||
XCTAssertEqual("AddedString", object!, "Get cached object") | ||
|
||
XCTAssertNotNil(self.cache.objectForKey("blockNotExecuted"), "Get cached object") | ||
XCTAssertEqual("AddedString", self.cache.objectForKey("blockNotExecuted")!, "Get cached object") | ||
|
||
XCTAssertFalse(executed, "Block was not executed") | ||
XCTAssertTrue(isLoadedFromCache, "Object was loaded from cached") | ||
XCTAssertNil(error, "Error is nil") | ||
}) | ||
} | ||
|
||
|
||
func testCacheBlockError() { | ||
|
||
cache.setObjectForKey("blockError", cacheBlock: { successBlock, failureBlock in | ||
let error = NSError(domain: "AwesomeCacheErrorDomain", code: 42, userInfo: nil) | ||
failureBlock(error) | ||
}, completion: { object, isLoadedFromCache, error in | ||
XCTAssertNil(object, "Cached object nil") | ||
XCTAssertNil(self.cache.objectForKey("blockError"), "Get cached object") | ||
|
||
XCTAssertFalse(isLoadedFromCache, "Object was loaded from cached") | ||
XCTAssertNotNil(error, "Error is nil") | ||
XCTAssert(error!.domain == "AwesomeCacheErrorDomain", "Error domain") | ||
XCTAssert(error!.code == 42, "Error code") | ||
}) | ||
|
||
|
||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.