jugutier/JGAlgorithms

View on GitHub
Example/Pods/Quick/Sources/Quick/Hooks/ExampleHooks.swift

Summary

Maintainability
A
1 hr
Test Coverage
/**
    A container for closures to be executed before and after each example.
*/
final internal class ExampleHooks {
    internal var befores: [BeforeExampleWithMetadataClosure] = []
    internal var afters: [AfterExampleWithMetadataClosure] = []
    internal var phase: HooksPhase = .nothingExecuted

    internal func appendBefore(_ closure: @escaping BeforeExampleWithMetadataClosure) {
        befores.append(closure)
    }

    internal func appendBefore(_ closure: @escaping BeforeExampleClosure) {
        befores.append { (exampleMetadata: ExampleMetadata) in closure() }
    }

    internal func appendAfter(_ closure: @escaping AfterExampleWithMetadataClosure) {
        afters.append(closure)
    }

    internal func appendAfter(_ closure: @escaping AfterExampleClosure) {
        afters.append { (exampleMetadata: ExampleMetadata) in closure() }
    }

    internal func executeBefores(_ exampleMetadata: ExampleMetadata) {
        phase = .beforesExecuting
        for before in befores {
            before(exampleMetadata)
        }

        phase = .beforesFinished
    }

    internal func executeAfters(_ exampleMetadata: ExampleMetadata) {
        phase = .aftersExecuting
        for after in afters {
            after(exampleMetadata)
        }

        phase = .aftersFinished
    }
}