Created
December 10, 2015 19:31
-
-
Save joshavant/75a5473da9b5f8d68f2b to your computer and use it in GitHub Desktop.
This file contains hidden or 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
| import Foundation | |
| protocol Pageable { | |
| typealias PagedContentType | |
| var pageLimit: Int { get set } | |
| var pageOffset: Int { get set } | |
| func getPage(limit limit: Int, offset: Int, completion: (result: [PagedContentType]?, error: NSError?) -> Void) | |
| mutating func nextPage(completion: (result: [PagedContentType]?, error: NSError?) -> Void) | |
| mutating func resetPagingCounter() | |
| } | |
| extension Pageable { | |
| mutating func nextPage(completion: (result: [PagedContentType]?, error: NSError?) -> Void) { | |
| getPage(limit: pageLimit, offset: pageOffset) { | |
| (result: [PagedContentType]?, error: NSError?) in | |
| self.pageOffset += self.pageLimit | |
| completion(result: result, error: error) | |
| } | |
| } | |
| mutating func resetPagingCounter() { | |
| self.pageOffset = 0 | |
| } | |
| } |
This file contains hidden or 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
| import XCTest | |
| class PageableTestObject: NSObject, Pageable { | |
| typealias PagedContentType = String | |
| var pageLimit = 2 | |
| var pageOffset = 0 | |
| var dataSource = [ | |
| "first", | |
| "second", | |
| "third", | |
| "fourth", | |
| "fifth", | |
| "sixth" | |
| ] | |
| func getPage(limit limit: Int, offset: Int, completion: (result: [String]?, error: NSError?) -> Void) { | |
| let results = Array(dataSource[offset..<(offset + limit)]) | |
| completion(result: results, error: nil) | |
| } | |
| } | |
| class PageableTest: CRTestCase { | |
| var testObject = PageableTestObject() | |
| func testNextPage() { | |
| XCTAssertEqual(2, testObject.pageLimit) | |
| XCTAssertEqual(0, testObject.pageOffset) | |
| testObject.nextPage { | |
| (result, error) in | |
| XCTAssertEqual(2, result!.count) | |
| XCTAssertEqual("first", result![0]) | |
| XCTAssertEqual("second", result![1]) | |
| } | |
| XCTAssertEqual(2, testObject.pageLimit) | |
| XCTAssertEqual(2, testObject.pageOffset) | |
| testObject.nextPage { | |
| (result, error) in | |
| XCTAssertEqual(2, result!.count) | |
| XCTAssertEqual("third", result![0]) | |
| XCTAssertEqual("fourth", result![1]) | |
| } | |
| XCTAssertEqual(2, testObject.pageLimit) | |
| XCTAssertEqual(4, testObject.pageOffset) | |
| testObject.nextPage { | |
| (result, error) in | |
| XCTAssertEqual(2, result!.count) | |
| XCTAssertEqual("fifth", result![0]) | |
| XCTAssertEqual("sixth", result![1]) | |
| } | |
| } | |
| func testResetPagingCounter() { | |
| XCTAssertEqual(2, testObject.pageLimit) | |
| XCTAssertEqual(0, testObject.pageOffset) | |
| testObject.nextPage { | |
| (result, error) in | |
| // do nothing | |
| } | |
| XCTAssertEqual(2, testObject.pageLimit) | |
| XCTAssertEqual(2, testObject.pageOffset) | |
| testObject.resetPagingCounter() | |
| XCTAssertEqual(2, testObject.pageLimit) | |
| XCTAssertEqual(0, testObject.pageOffset) | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment