Mockingbird Documentation 0.14.1

Structure Value​Provider

public struct ValueProvider: Hashable

Provides concrete instances of types.

To return default values for unstubbed methods, use a ValueProvider with the initialized mock. Mockingbird provides preset value providers which are guaranteed to be backwards compatible, such as .standardProvider.

let bird = mock(Bird.self)
bird.useDefaultValues(from: .standardProvider)
print(bird.name)  // Prints ""

You can create custom value providers by registering values for types.

var valueProvider = ValueProvider()
valueProvider.register("Ryan", for: String.self)

bird.useDefaultValues(from: valueProvider)
print(bird.name)  // Prints "Ryan"
%3 ValueProvider ValueProvider Hashable Hashable ValueProvider->Hashable

Conforms To

Hashable

Initializers

init()

public init()

Create an empty value provider.

init(from:​)

public init(from other: ValueProvider)

Copy another value provider.

Mockingbird provides several preset value providers that can be used as the base template for custom value providers.

var valueProvider = ValueProvider(from: .standardProvider)
print(valueProvider.provideValue(for: String.self))  // Prints ""

Parameters

other Value​Provider

Another value provider to copy.

Properties

collections​Provider

let collectionsProvider

Provides default-initialized collections. https://developer.apple.com/documentation/foundation/collections

primitives​Provider

let primitivesProvider

Provides default values for primitive Swift types. https://developer.apple.com/documentation/foundation/numbers_data_and_basic_values

basics​Provider

let basicsProvider

Provides default values for basic types that are not primitives. https://developer.apple.com/documentation/foundation/numbers_data_and_basic_values

geometry​Provider

let geometryProvider

Provides default values for graphics and geometry types. https://developer.apple.com/documentation/foundation/numbers_data_and_basic_values

strings​Provider

let stringsProvider

Provides default values for string and text types. https://developer.apple.com/documentation/foundation/strings_and_text

dates​Provider

let datesProvider

Provides default values for date and time types. https://developer.apple.com/documentation/foundation/dates_and_times

standard​Provider

let standardProvider

All preset value providers.

Methods

hash(into:​)

public func hash(into hasher: inout Hasher)

Hashes the value provider instance.

Parameters

hasher inout Hasher

The hasher to use when combining the components of this instance.

==(lhs:​rhs:​)

public static func ==(lhs: ValueProvider, rhs: ValueProvider) -> Bool

Returns a Boolean value indicating whether two value provider instances are equal.

Parameters

lhs Value​Provider

A value to compare.

rhs Value​Provider

Another value to compare.

add​Subprovider(_:​)

mutating public func addSubprovider(_ provider: ValueProvider)

Add another value provider as a subprovider

Value providers can be composed hierarchically by adding subproviders. Providers added later have higher precedence.

var valueProvider = ValueProvider()

// Add a preset value provider as a subprovider.
valueProvider.addSubprovider(.standardProvider)
print(valueProvider.provideValue(for: String.self))  // Prints ""

// Add a custom value provider a subprovider.
var stringProvider = ValueProvider()
stringProvider.register("Ryan", for: String.self)
valueProvider.addSubprovider(stringProvider)
print(valueProvider.provideValue(for: String.self))  // Prints "Ryan"

Parameters

provider Value​Provider

A value provider to add.

remove​Subprovider(_:​)

mutating public func removeSubprovider(_ provider: ValueProvider)

Remove a previously added value provider.

Instances are internally unique such that it's possible to easily add and remove preset value providers.

var valueProvider = ValueProvider()
valueProvider.addSubprovider(.standardProvider)
valueProvider.removeSubprovider(.standardProvider)

Parameters

provider Value​Provider

The value provider to remove.

register(_:​for:​)

mutating public func register<K, V>(_ value: V, for type: K.Type = K.self)

Register a value for a specific type.

Create custom value providers by registering values for types.

var valueProvider = ValueProvider()
valueProvider.register("Ryan", for: String.self)
print(valueProvider.provideValue(for: String.self))  // Prints "Ryan"

Parameters

value V

The value to register.

type K.​Type

The type to register the value under. value must be of kind type.

register​Type(_:​)

mutating public func registerType<V: Providable>(_ type: V.Type = V.self)

Register a Providable type used to provide values for generic types.

Provide wildcard instances for generic types by conforming the base type to Providable and registering the type. Non-wildcard instances have precedence over wildcard instances.

extension Array: Providable {
  public static func createInstance() -> Self? {
    return Array()
  }
}

var valueProvider = ValueProvider()
valueProvider.registerType(Array<Any>.self)

// All specializations of `Array` return an empty array
print(valueProvider.provideValue(for: Array<String>.self))  // Prints []
print(valueProvider.provideValue(for: Array<Data>.self))    // Prints []

// Register a non-wildcard instance of `Array<String>`
valueProvider.register(["A", "B"], for: Array<String>.self)
print(valueProvider.provideValue(for: Array<String>.self))  // Prints ["A", "B"]
print(valueProvider.provideValue(for: Array<Data>.self))    // Prints []

Parameters

type V.​Type

A Providable type to register.

remove(_:​)

mutating public func remove<T>(_ type: T.Type)

Remove a registered value for a given type.

Previously registered values can be removed from the top-level value provider. This does not affect values provided by subproviders.

var valueProvider = ValueProvider(from: .standardProvider)
print(valueProvider.provideValue(for: String.self))  // Prints ""

// Override the subprovider value
valueProvider.register("Ryan", for: String.self)
print(valueProvider.provideValue(for: String.self))  // Prints "Ryan"

// Remove the registered value
valueProvider.remove(String.self)
print(valueProvider.provideValue(for: String.self))  // Prints ""

Parameters

type T.​Type

The type to remove a previously registered value for.

remove(_:​)

mutating public func remove<V: Providable>(_ type: V.Type = V.self)

Remove a registered Providable type.

Previously registered wildcard instances for generic types can be removed from the top-level value provider.

var valueProvider = ValueProvider()

valueProvider.registerType(Array<Any>.self)
print(valueProvider.provideValue(for: Array<String>.self))  // Prints []

valueProvider.remove(Array<Any>.self)
print(valueProvider.provideValue(for: Array<String>.self))  // Prints nil

Parameters

type V.​Type

A Providable type to remove.