Skip to content

Instantly share code, notes, and snippets.

@joshavant
Created December 10, 2015 19:31
Show Gist options
  • Select an option

  • Save joshavant/75a5473da9b5f8d68f2b to your computer and use it in GitHub Desktop.

Select an option

Save joshavant/75a5473da9b5f8d68f2b to your computer and use it in GitHub Desktop.
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
}
}
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