Files
2025-10-04 08:46:46 +01:00

156 lines
6.0 KiB
Swift
Executable File

// Copyright © 2017 Schibsted. All rights reserved.
import XCTest
@testable import Layout
@testable import TestFramework
final class ImageExpressionTests: XCTestCase {
// MARK: Image constants
func testImageConstant() {
let testImage = UIImage()
let node = LayoutNode(constants: ["testImage": testImage])
let expression = LayoutExpression(imageExpression: "testImage", for: node)
XCTAssertEqual(try expression?.evaluate() as? UIImage, testImage)
}
func testImageConstantWithComment() {
let testImage = UIImage()
let node = LayoutNode(constants: ["testImage": testImage])
let expression = LayoutExpression(imageExpression: "testImage // test", for: node)
XCTAssertEqual(try expression?.evaluate() as? UIImage, testImage)
}
func testBracedImageConstant() {
let testImage = UIImage()
let node = LayoutNode(constants: ["testImage": testImage])
let expression = LayoutExpression(imageExpression: "{testImage}", for: node)
XCTAssertEqual(try expression?.evaluate() as? UIImage, testImage)
}
func testBracedImageConstantWithComment() {
let testImage = UIImage()
let node = LayoutNode(constants: ["testImage": testImage])
let expression = LayoutExpression(imageExpression: "{testImage // test}", for: node)
XCTAssertEqual(try expression?.evaluate() as? UIImage, testImage)
}
func testBracedImageConstantWithCommentOutsideBraces() {
let testImage = UIImage()
let node = LayoutNode(constants: ["testImage": testImage])
let expression = LayoutExpression(imageExpression: "{testImage} // test", for: node)
XCTAssertThrowsError(try expression?.evaluate()) // TODO: handle this correctly and/or improve error message
}
// MARK: Image assets
func testImageAssetInModuleByID() {
let node = LayoutNode()
let expression = LayoutExpression(imageExpression: "com.LayoutTests:MyImage", for: node)
XCTAssertNotNil(try expression?.evaluate() as? UIImage)
}
func testImageAssetInModuleByName() {
let node = LayoutNode()
let expression = LayoutExpression(imageExpression: "LayoutTests:MyImage", for: node)
XCTAssertNotNil(try expression?.evaluate() as? UIImage)
}
func testNonexistentImageAssetInModuleyByName() {
let node = LayoutNode()
let expression = LayoutExpression(imageExpression: "LayoutTests:MyImage2", for: node)
XCTAssertThrowsError(try expression?.evaluate()) { error in
XCTAssert("\(error)".contains("not found"))
}
}
func testNonexistentImageAssetInBundleByName() {
let node = LayoutNode()
let expression = LayoutExpression(imageExpression: "LayoutTests:MyImage2", for: node)
XCTAssertThrowsError(try expression?.evaluate()) { error in
XCTAssert("\(error)".contains("not found"))
}
}
func testImageAssetInFrameworkBundleByID() {
_ = TestFrameworkClass()
let node = LayoutNode()
let expression = LayoutExpression(imageExpression: "com.TestFramework:Boxes", for: node)
XCTAssertNotNil(try expression?.evaluate() as? UIImage)
}
func testImageAssetInFrameworkBundleByName() {
_ = TestFrameworkClass()
let node = LayoutNode()
let expression = LayoutExpression(imageExpression: "TestFramework:Boxes", for: node)
XCTAssertNotNil(try expression?.evaluate() as? UIImage)
}
func testImageAssetInNonexistentBundleByID() {
let node = LayoutNode()
let expression = LayoutExpression(imageExpression: "com.NotReal:MyImage2", for: node)
XCTAssertThrowsError(try expression?.evaluate()) { error in
XCTAssert("\(error)".contains("not locate bundle with identifier"))
}
}
func testImageAssetInNonexistentBundleByName() {
let node = LayoutNode()
let expression = LayoutExpression(imageExpression: "NotReal:MyImage2", for: node)
XCTAssertThrowsError(try expression?.evaluate()) { error in
XCTAssert("\(error)".contains("not locate bundle with name"))
}
}
// MARK: Bundle variables
func testImageAssetInFrameworkBundle() {
let bundle = Bundle(for: TestFrameworkClass.self)
let node = LayoutNode(constants: ["bundle": bundle])
let expression = LayoutExpression(imageExpression: "{bundle}:Boxes", for: node)
XCTAssertNotNil(try expression?.evaluate() as? UIImage)
}
// MARK: Error messages
func testNonexistentImageAssetInMainBundle() {
let node = LayoutNode()
let expression = LayoutExpression(imageExpression: "MyImage", for: node)
XCTAssertThrowsError(try expression?.evaluate()) { error in
XCTAssert("\(error)".contains("not found"))
}
}
func testQuotedNonexistentImageAssetInMainBundle() {
let node = LayoutNode()
let expression = LayoutExpression(imageExpression: "'MyImage'", for: node)
XCTAssertThrowsError(try expression?.evaluate()) { error in
XCTAssert("\(error)".contains("not found"))
}
}
func testNonexistentImageVariable() {
let node = LayoutNode()
let expression = LayoutExpression(imageExpression: "{MyImage}", for: node)
XCTAssertThrowsError(try expression?.evaluate()) { error in
XCTAssert("\(error)".contains("Unknown property"))
}
}
func testNonexistentQuotedImageName() {
let node = LayoutNode()
let expression = LayoutExpression(imageExpression: "{'MyImage'}", for: node)
XCTAssertThrowsError(try expression?.evaluate()) { error in
XCTAssert("\(error)".contains("not found"))
}
}
func testNonexistentImageAssetWithExpression() {
let node = LayoutNode()
let expression = LayoutExpression(imageExpression: "MyImage{5}", for: node)
XCTAssertThrowsError(try expression?.evaluate()) { error in
XCTAssert("\(error)".contains("not found"))
}
}
}