diff --git a/Tests/WingedSwiftTests/HTMLBuilderTests.swift b/Tests/WingedSwiftTests/HTMLBuilderTests.swift new file mode 100644 index 0000000..7e33e8e --- /dev/null +++ b/Tests/WingedSwiftTests/HTMLBuilderTests.swift @@ -0,0 +1,60 @@ +import XCTest +@testable import WingedSwift + +final class HTMLBuilderTests: XCTestCase { + func testHTMLBuilderCreatesRootHTMLTag() { + // Given + let expectedTagName = "html" + + // When + let document = html { + HTMLTag("body") + HTMLTag("head") + } + + // Then + XCTAssertEqual(document.name, expectedTagName, "Root tag should be 'html'") + XCTAssertEqual(document.children.count, 2, "Root tag should have two children.") + XCTAssertEqual(document.children[0].name, "body", "First child should be 'body'") + XCTAssertEqual(document.children[1].name, "head", "Second child should be 'head'") + } + + func testHTMLBuilderHandlesOptional() { + // Given + let optionalComponent: HTMLTag? = HTMLTag("optional") + + // When + let document = html { + HTMLBuilder.buildOptional(optionalComponent) + } + + // Then + XCTAssertEqual(document.name, "html", "Root tag should be 'html'") + XCTAssertEqual(document.children.count, 1, "Root tag should have one child.") + XCTAssertEqual(document.children[0].name, "optional", "Child tag should be 'optional'") + } + + func testHTMLBuilderHandlesEitherFirst() { + // When + let document = html { + HTMLBuilder.buildEither(first: HTMLTag("first")) + } + + // Then + XCTAssertEqual(document.name, "html", "Root tag should be 'html'") + XCTAssertEqual(document.children.count, 1, "Root tag should have one child.") + XCTAssertEqual(document.children[0].name, "first", "Child tag should be 'first'") + } + + func testHTMLBuilderHandlesEitherSecond() { + // When + let document = html { + HTMLBuilder.buildEither(second: HTMLTag("second")) + } + + // Then + XCTAssertEqual(document.name, "html", "Root tag should be 'html'") + XCTAssertEqual(document.children.count, 1, "Root tag should have one child.") + XCTAssertEqual(document.children[0].name, "second", "Child tag should be 'second'") + } +}