Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/api-breakage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 15
container:
image: swift:6.2
image: swift:6.3
steps:
- name: Checkout
uses: actions/checkout@v4
Expand Down
13 changes: 12 additions & 1 deletion .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ name: CI
on:
push:
branches: [main]
paths:
- "**.swift"
- "**.yml"
pull_request:
branches: [main]
workflow_dispatch:
Expand All @@ -11,8 +14,16 @@ jobs:
ci:
name: Build & Test
runs-on: ubuntu-latest
timeout-minutes: 15
strategy:
matrix:
image: ["swift:6.2", "swift:6.3", "swiftlang/swift:nightly-6.4.x-noble"]

container:
image: ${{ matrix.image }}
steps:
- uses: actions/checkout@v4
- name: Checkout
uses: actions/checkout@v4

- name: Build
run: swift build --build-tests
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/format.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
timeout-minutes: 15
strategy:
matrix:
image: ["swift:6.2"]
image: ["swift:6.3"]

container:
image: ${{ matrix.image }}
Expand Down
2 changes: 1 addition & 1 deletion Examples/HummingbirdDemo/Package.swift
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// swift-tools-version: 5.10
// swift-tools-version: 6.1
import PackageDescription

let package = Package(
Expand Down
2 changes: 1 addition & 1 deletion Examples/VaporDemo/Package.swift
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// swift-tools-version: 5.10
// swift-tools-version: 6.1
import PackageDescription

let package = Package(
Expand Down
7 changes: 2 additions & 5 deletions Package.swift
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
// swift-tools-version: 5.10
// swift-tools-version: 6.1
import PackageDescription

let featureFlags: [SwiftSetting] = [
.enableExperimentalFeature("StrictConcurrency=complete"),
.enableUpcomingFeature("ExistentialAny"),
.enableUpcomingFeature("ConciseMagicFile"),
.enableUpcomingFeature("ImplicitOpenExistentials"),
.enableUpcomingFeature("ExistentialAny")
]

let package = Package(
Expand Down
10 changes: 5 additions & 5 deletions Tests/ElementaryHTMXSSETest/ElementaryHTMXSSETest.swift
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
import Elementary
import ElementaryHTMXSSE
import TestUtilities
import XCTest
import Testing

final class ElementaryHTMXSSETests: XCTestCase {
func testExtension() {
@Suite struct ElementaryHTMXSSETests {
@Test func rendersExtension() {
HTMLAttributeAssertEqual(.hx.ext(.sse), "hx-ext", "sse")
}

func testAttributes() {
@Test func rendersAttributes() {
HTMLAttributeAssertEqual(.sse.connect("/test"), "sse-connect", "/test")
HTMLAttributeAssertEqual(.sse.swap("test"), "sse-swap", "test")
HTMLAttributeAssertEqual(.sse.close("test"), "sse-close", "test")
}

func testAttributeValues() {
@Test func rendersAttributeValues() {
HTMLAttributeAssertEqual(.hx.trigger(.sse("time")), "hx-trigger", "sse:time")
}
}
20 changes: 10 additions & 10 deletions Tests/ElementaryHTMXTest/ElementaryHTMXTest.swift
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
import Elementary
import ElementaryHTMX
import TestUtilities
import XCTest
import Testing

final class ElementaryHTMXTests: XCTestCase {
func testMethods() {
@Suite struct ElementaryHTMXTests {
@Test func rendersMethods() {
HTMLAttributeAssertEqual(.hx.get("/test"), "hx-get", "/test")
HTMLAttributeAssertEqual(.hx.post("/test"), "hx-post", "/test")
HTMLAttributeAssertEqual(.hx.put("/test"), "hx-put", "/test")
HTMLAttributeAssertEqual(.hx.patch("/test"), "hx-patch", "/test")
HTMLAttributeAssertEqual(.hx.delete("/test"), "hx-delete", "/test")
}

func testSwap() {
@Test func rendersSwap() {
HTMLAttributeAssertEqual(.hx.swap(.innerHTML), "hx-swap", "innerHTML")
HTMLAttributeAssertEqual(.hx.swap(.outerHTML), "hx-swap", "outerHTML")
HTMLAttributeAssertEqual(.hx.swap(.textContent), "hx-swap", "textContent")
Expand All @@ -24,36 +24,36 @@ final class ElementaryHTMXTests: XCTestCase {
HTMLAttributeAssertEqual(.hx.swap(.none), "hx-swap", "none")
}

func testSwapModifiers() {
@Test func rendersSwapModifiers() {
HTMLAttributeAssertEqual(.hx.swap(.innerHTML.transition(true)), "hx-swap", "innerHTML transition:true")
HTMLAttributeAssertEqual(.hx.swap(.outerHTML.swap("1s").settle("10ms")), "hx-swap", "outerHTML swap:1s settle:10ms")
HTMLAttributeAssertEqual(.hx.swap(.textContent.swap("1s").settle("10ms")), "hx-swap", "textContent swap:1s settle:10ms")
HTMLAttributeAssertEqual(.hx.swap(.default.transition(true)), "hx-swap", "transition:true")
}

func testSelectOOB() {
@Test func rendersSelectOOB() {
HTMLAttributeAssertEqual(.hx.selectOOB("#test"), "hx-select-oob", "#test")
HTMLAttributeAssertEqual(.hx.selectOOB("#test", .innerHTML), "hx-select-oob", "#test:innerHTML")
}

func testSwapOOB() {
@Test func rendersSwapOOB() {
HTMLAttributeAssertEqual(.hx.swapOOB(true), "hx-swap-oob", "true")
HTMLAttributeAssertEqual(.hx.swapOOB(.innerHTML), "hx-swap-oob", "innerHTML")
HTMLAttributeAssertEqual(.hx.swapOOB(.innerHTML, "#test"), "hx-swap-oob", "innerHTML:#test")
}

func testTrigger() {
@Test func rendersTrigger() {
HTMLAttributeAssertEqual(.hx.trigger(.event(.click)), "hx-trigger", "click")
HTMLAttributeAssertEqual(.hx.trigger(.event(.intersect)), "hx-trigger", "intersect")
HTMLAttributeAssertEqual(.hx.trigger(.every("1s")), "hx-trigger", "every 1s")
}

func testTriggerModifiers() {
@Test func rendersTriggerModifiers() {
HTMLAttributeAssertEqual(.hx.trigger(.event(.click).delay("1s").consume()), "hx-trigger", "click delay:1s consume")
HTMLAttributeAssertEqual(.hx.trigger(.event(.intersect).once()), "hx-trigger", "intersect once")
}

func testDisable() {
@Test func rendersDisable() {
HTMLAttributeAssertEqual(.hx.disable, "hx-disable", nil)
}
}
12 changes: 6 additions & 6 deletions Tests/ElementaryHTMXWSTest/ElemntaryHTMXWSTest.swift
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
import Elementary
import ElementaryHTMXWS
import TestUtilities
import XCTest
import Testing

final class ElementaryHTMXWSTests: XCTestCase {
func testExtension() {
@Suite struct ElementaryHTMXWSTests {
@Test func rendersExtension() {
HTMLAttributeAssertEqual(.hx.ext(.ws), "hx-ext", "ws")
}

func testAttributes() {
@Test func rendersAttributes() {
HTMLAttributeAssertEqual(.ws.connect("/test"), "ws-connect", "/test")
}

func testAttributeValues() {
@Test func rendersAttributeValues() {
HTMLAttributeAssertEqual(.hx.trigger(.ws("time")), "hx-trigger", "ws:time")
}

func testWSSend() {
@Test func rendersWSSend() {
HTMLAttributeAssertEqual(.ws.send, "ws-send", nil)
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import Elementary
import ElementaryHyperscript
import TestUtilities
import XCTest
import Testing

final class ElementaryHyperscriptTests: XCTestCase {
func testScript() {
@Suite struct ElementaryHyperscriptTests {
@Test func rendersScript() {
HTMLAttributeAssertEqual(.hyperscript("on click send hello to <form />"), "_", "on click send hello to <form />")
}
}
9 changes: 4 additions & 5 deletions Tests/TestUtilities/Utilities.swift
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
import Elementary
import XCTest
import Testing

public func HTMLAttributeAssertEqual(
_ attribute: HTMLAttribute<HTMLTag.div>,
_ name: String,
_ value: String?,
file: StaticString = #filePath,
line: UInt = #line
sourceLocation: SourceLocation = #_sourceLocation
) {
XCTAssertEqual(name, attribute.name, file: file, line: line)
XCTAssertEqual(value, attribute.value, file: file, line: line)
#expect(name == attribute.name, sourceLocation: sourceLocation)
#expect(value == attribute.value, sourceLocation: sourceLocation)
}
Loading