Add thenCallRealImplementation.
This commit is contained in:
parent
c310348d28
commit
020b92c9ff
|
@ -16,33 +16,35 @@ public class MockManager<STUBBING: StubbingProxy, VERIFICATION: VerificationProx
|
|||
|
||||
}
|
||||
|
||||
public func getter<T>(property: String, original: (Void -> T)? = nil) -> (Void -> T) {
|
||||
public func getter<T>(property: String, original: (Void -> T)? = nil) -> T {
|
||||
return call(getterName(property), parameters: Void(), original: original)
|
||||
}
|
||||
|
||||
public func setter<T>(property: String, value: T, original: (T -> Void)? = nil) -> (T -> Void) {
|
||||
public func setter<T>(property: String, value: T, original: (T -> Void)? = nil) {
|
||||
return call(setterName(property), parameters: value, original: original)
|
||||
}
|
||||
|
||||
public func call<IN, OUT>(method: String, parameters: IN, original: (IN -> OUT)? = nil) -> IN -> OUT {
|
||||
return { try! self.callThrows(method, parameters: parameters, original: original)($0) }
|
||||
public func call<IN, OUT>(method: String, parameters: IN, original: (IN -> OUT)? = nil) -> OUT {
|
||||
return try! self.callThrows(method, parameters: parameters, original: original)
|
||||
}
|
||||
|
||||
public func callThrows<IN, OUT>(method: String, parameters: IN, original: (IN throws -> OUT)? = nil) -> IN throws -> OUT {
|
||||
public func callThrows<IN, OUT>(method: String, parameters: IN, original: (IN throws -> OUT)? = nil) throws -> OUT {
|
||||
let stubCall = StubCall(method: method, parameters: parameters)
|
||||
stubCalls.append(stubCall)
|
||||
|
||||
if let stub = (stubs[method]?.filter { $0.parameterMatchers.reduce(true) { $0 && $1.matches(parameters) } }.first) {
|
||||
return {
|
||||
switch stub.output($0) {
|
||||
case .ReturnValue(let value):
|
||||
return value as! OUT
|
||||
case .Error(let error):
|
||||
throw error
|
||||
}
|
||||
switch stub.output(parameters) {
|
||||
case .ReturnValue(let value):
|
||||
return value as! OUT
|
||||
case .ThrowError(let error):
|
||||
throw error
|
||||
case .CallRealImplementation:
|
||||
break
|
||||
}
|
||||
} else if let original = original {
|
||||
return { try original($0) }
|
||||
}
|
||||
|
||||
if let original = original {
|
||||
return try original(parameters)
|
||||
} else {
|
||||
let message = "No stub for method `\(method)` using parameters \(parameters) and no original implementation was provided."
|
||||
XCTFail(message)
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
//
|
||||
// ReturnValueOrError.swift
|
||||
// OnStubCall.swift
|
||||
// Cuckoo
|
||||
//
|
||||
// Created by Filip Dolnik on 29.05.16.
|
||||
// Copyright © 2016 Brightify. All rights reserved.
|
||||
//
|
||||
|
||||
enum ReturnValueOrError {
|
||||
enum OnStubCall {
|
||||
case ReturnValue(Any)
|
||||
case Error(ErrorType)
|
||||
case ThrowError(ErrorType)
|
||||
case CallRealImplementation
|
||||
}
|
|
@ -9,5 +9,5 @@
|
|||
public struct Stub {
|
||||
let name: String
|
||||
let parameterMatchers: [AnyMatcher<Any>]
|
||||
let output: Any -> ReturnValueOrError
|
||||
let output: Any -> OnStubCall
|
||||
}
|
|
@ -33,7 +33,7 @@ public struct StubbingHandler {
|
|||
return ToBeStubbedThrowingFunction(handler: self, name: method, parameterMatchers: parameterMatchers)
|
||||
}
|
||||
|
||||
func createStubReturningValue<IN>(method: String, parameterMatchers: [AnyMatcher<IN>], output: Any -> ReturnValueOrError) {
|
||||
func createStubReturningValue<IN>(method: String, parameterMatchers: [AnyMatcher<IN>], output: Any -> OnStubCall) {
|
||||
let stub = Stub(name: method, parameterMatchers: parameterMatchers.map(AnyMatcher.init), output: output)
|
||||
|
||||
self.createNewStub(stub)
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
//
|
||||
|
||||
public struct ThenReturnValue<IN, OUT> {
|
||||
let setOutput: (Any -> ReturnValueOrError) -> Void
|
||||
let setOutput: (Any -> OnStubCall) -> Void
|
||||
|
||||
/// Invoke `implementation` when invoked.
|
||||
public func then(implementation: IN -> OUT) {
|
||||
|
@ -21,4 +21,9 @@ public struct ThenReturnValue<IN, OUT> {
|
|||
public func thenReturn(output: OUT) {
|
||||
setOutput { _ in .ReturnValue(output) }
|
||||
}
|
||||
|
||||
/// Invoke real implementation when invoked.
|
||||
public func thenCallRealImplementation() {
|
||||
setOutput { _ in .CallRealImplementation }
|
||||
}
|
||||
}
|
|
@ -7,7 +7,7 @@
|
|||
//
|
||||
|
||||
public struct ThenReturnValueOrThrow<IN, OUT> {
|
||||
let setOutput: (Any -> ReturnValueOrError) -> Void
|
||||
let setOutput: (Any -> OnStubCall) -> Void
|
||||
|
||||
/// Invoke `implementation` when invoked.
|
||||
public func then(implementation: IN throws -> OUT) {
|
||||
|
@ -16,7 +16,7 @@ public struct ThenReturnValueOrThrow<IN, OUT> {
|
|||
do {
|
||||
return try .ReturnValue(implementation(parameters))
|
||||
} catch let error {
|
||||
return .Error(error)
|
||||
return .ThrowError(error)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -28,6 +28,11 @@ public struct ThenReturnValueOrThrow<IN, OUT> {
|
|||
|
||||
/// Throw `error` when invoked.
|
||||
public func thenThrow(error: ErrorType) {
|
||||
setOutput { _ in .Error(error) }
|
||||
setOutput { _ in .ThrowError(error) }
|
||||
}
|
||||
|
||||
/// Invoke real implementation when invoked.
|
||||
public func thenCallRealImplementation() {
|
||||
setOutput { _ in .CallRealImplementation }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@ public struct ToBeStubbedFunction<IN, OUT> {
|
|||
let name: String
|
||||
let parameterMatchers: [AnyMatcher<IN>]
|
||||
|
||||
func setOutput(output: Any -> ReturnValueOrError) {
|
||||
func setOutput(output: Any -> OnStubCall) {
|
||||
handler.createStubReturningValue(name, parameterMatchers: parameterMatchers, output: output)
|
||||
}
|
||||
}
|
|
@ -12,7 +12,7 @@ public struct ToBeStubbedThrowingFunction<IN, OUT> {
|
|||
let name: String
|
||||
let parameterMatchers: [AnyMatcher<IN>]
|
||||
|
||||
func setOutput(output: Any -> ReturnValueOrError) {
|
||||
func setOutput(output: Any -> OnStubCall) {
|
||||
handler.createStubReturningValue(name, parameterMatchers: parameterMatchers, output: output)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue