Files
SwiftFormat/Snapshots/Layout/LayoutTests/OptionalExpressionTests.swift
2025-10-04 08:46:46 +01:00

79 lines
3.1 KiB
Swift
Executable File

// Copyright © 2017 Schibsted. All rights reserved.
import XCTest
@testable import Layout
final class OptionalExpressionTests: XCTestCase {
func testEquateOptionalNumbers() {
let foo: Double? = 5
let node = LayoutNode(constants: ["foo": foo as Any])
let expression = LayoutExpression(boolExpression: "foo == 5", for: node)
XCTAssertTrue(try expression?.evaluate() as? Bool == true)
}
func testAddOptionalNumbers() {
let foo: Double? = 5
let node = LayoutNode(constants: ["foo": foo as Any])
let expression = LayoutExpression(doubleExpression: "foo + 5", for: node)
XCTAssertEqual(try expression?.evaluate() as? Double, 10)
}
func testMultiplyOptionalNumbers() {
let foo: Double? = 5
let node = LayoutNode(constants: ["foo": foo as Any])
let expression = LayoutExpression(doubleExpression: "foo * 5", for: node)
XCTAssertEqual(try expression?.evaluate() as? Double, 25)
}
func testEquateOptionalStrings() {
let foo: String? = "foo"
let node = LayoutNode(constants: ["foo": foo as Any])
let expression = LayoutExpression(boolExpression: "foo == 'foo'", for: node)
XCTAssertTrue(try expression?.evaluate() as? Bool == true)
}
func testAddOptionalStrings() {
let foo: String? = "foo"
let node = LayoutNode(constants: ["foo": foo as Any])
let expression = LayoutExpression(stringExpression: "{foo + 'bar'}", for: node)
XCTAssertEqual(try expression?.evaluate() as? String, "foobar")
}
func testNullCoalescingInNumberExpression() {
let null: Double? = nil
let node = LayoutNode(constants: ["foo": null as Any])
let expression = LayoutExpression(doubleExpression: "foo ?? 5", for: node)
XCTAssertEqual(try expression?.evaluate() as? Double, 5)
}
func testNullStringExpression() {
let null: String? = nil
let node = LayoutNode(constants: ["foo": null as Any])
let expression = LayoutExpression(stringExpression: "{foo}", for: node)
XCTAssertEqual(try expression?.evaluate() as? String, "")
}
func testOptionalStringExpression() {
let foo: String? = "foo"
let node = LayoutNode(constants: ["foo": foo as Any])
let expression = LayoutExpression(stringExpression: "{foo}", for: node)
XCTAssertEqual(try expression?.evaluate() as? String, "foo")
}
func testNullImageExpression() {
let null: UIImage? = nil
let node = LayoutNode(constants: ["foo": null as Any])
let expression = LayoutExpression(imageExpression: "{foo}", for: node)
XCTAssertEqual(try (expression?.evaluate() as? UIImage).map { $0.size }, .zero)
}
func testNullAnyExpression() {
let null: Any? = nil
let node = LayoutNode(constants: ["foo": null as Any])
let expression = LayoutExpression(expression: "foo", type: RuntimeType(Any.self), for: node)
XCTAssertThrowsError(try expression?.evaluate()) { error in
XCTAssert("\(error)".contains("nil"))
}
}
}