/**
 *  Splash
 *  Copyright (c) John Sundell 2018
 *  MIT license - see LICENSE.md
 */

import Foundation
import Splash

struct OutputBuilderMock: OutputBuilder {
    private var components = [Component]()

    mutating func addToken(_ token: String, ofType type: TokenType) {
        components.append(.token(token, type))
    }

    mutating func addPlainText(_ text: String) {
        components.append(.plainText(text))
    }

    mutating func addWhitespace(_ whitespace: String) {
        components.append(.whitespace(whitespace))
    }

    func build() -> [Component] {
        return components
    }
}

extension OutputBuilderMock {
    enum Component: Equatable {
        case token(String, TokenType)
        case plainText(String)
        case whitespace(String)
    }
}