Skip to content
Snippets Groups Projects
Commit 0b254c44 authored by Dariusz Rybicki's avatar Dariusz Rybicki
Browse files

Add Stored utility

parent edf8b68a
No related branches found
No related tags found
2 merge requests!102Release 1.0.0,!33XXMessengerClient
import XCTestDynamicOverlay
public struct Stored<Value> {
public var get: () -> Value
public var set: (Value) -> Void
public func callAsFunction() -> Value {
get()
}
}
extension Stored {
public static func inMemory(_ value: Value) -> Stored<Value> {
let memory = Memory(value)
return Stored(
get: { memory.value },
set: { memory.value = $0 }
)
}
public static func inMemory<V>() -> Stored<Optional<V>> where Value == Optional<V> {
inMemory(nil)
}
}
private final class Memory<Value> {
init(_ value: Value) {
self.value = value
}
var value: Value
}
extension Stored {
public static func unimplemented() -> Stored<Value> {
Stored<Value>(
get: XCTUnimplemented("\(Self.self).get"),
set: XCTUnimplemented("\(Self.self).set")
)
}
}
import XCTest
@testable import XXMessengerClient
final class StoredTests: XCTestCase {
func testInMemory() throws {
let stored: Stored<String?> = .inMemory()
XCTAssertNil(stored())
stored.set("test")
XCTAssertEqual(stored(), "test")
stored.set(nil)
XCTAssertNil(stored())
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment