Skip to content

Commit

Permalink
create Framework
Browse files Browse the repository at this point in the history
  • Loading branch information
aschuch committed Jan 31, 2015
1 parent 0a3f2fa commit 8876af3
Show file tree
Hide file tree
Showing 11 changed files with 517 additions and 283 deletions.
19 changes: 19 additions & 0 deletions AwesomeCache/AwesomeCache.h
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.
26 changes: 26 additions & 0 deletions AwesomeCache/Info.plist
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>
136 changes: 136 additions & 0 deletions AwesomeCacheTests/AwesomeCacheTests.swift
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")
})


}

}
6 changes: 3 additions & 3 deletions Tests/Info.plist → AwesomeCacheTests/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>com.aschuch.${PRODUCT_NAME:rfc1034identifier}</string>
<string>com.aschuch.$(PRODUCT_NAME:rfc1034identifier)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
Expand Down
Loading

0 comments on commit 8876af3

Please sign in to comment.