Skip to content

Commit 7ed9d9d

Browse files
committed
docs: add CI badges and README verification tests
- Add standard CI and development status badges - Create ReadmeVerificationTests.swift with 2 tests - Verify basic encoding/decoding example from README - Verify array encoding strategies example from README - All README examples now validated via tests
1 parent 195d011 commit 7ed9d9d

File tree

2 files changed

+62
-0
lines changed

2 files changed

+62
-0
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# swift-url-form-coding
22

3+
[![CI](https://github.com/coenttb/swift-url-form-coding/workflows/CI/badge.svg)](https://github.com/coenttb/swift-url-form-coding/actions/workflows/ci.yml)
4+
![Development Status](https://img.shields.io/badge/status-active--development-blue.svg)
5+
36
A Swift package for encoding and decoding `application/x-www-form-urlencoded` data with Codable support.
47

58
## Overview
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import Testing
2+
@testable import URLFormCoding
3+
4+
@Suite("README Verification")
5+
struct ReadmeVerificationTests {
6+
7+
@Test("Example from README: Basic Encoding/Decoding")
8+
func basicEncodingDecoding() throws {
9+
struct User: Codable {
10+
let name: String
11+
let email: String
12+
let age: Int
13+
}
14+
15+
// Encoding
16+
let encoder = Form.Encoder()
17+
let user = User(name: "John Doe", email: "john@example.com", age: 30)
18+
let formData = try encoder.encode(user)
19+
20+
// Verify encoding produces valid data
21+
#expect(formData.count > 0)
22+
23+
// Decoding
24+
let decoder = Form.Decoder()
25+
let decodedUser = try decoder.decode(User.self, from: formData)
26+
27+
// Verify round-trip
28+
#expect(decodedUser.name == user.name)
29+
#expect(decodedUser.email == user.email)
30+
#expect(decodedUser.age == user.age)
31+
}
32+
33+
@Test("Example from README: Array Encoding Strategies")
34+
func arrayEncodingStrategies() throws {
35+
struct SearchQuery: Codable {
36+
let tags: [String]
37+
}
38+
39+
let query = SearchQuery(tags: ["swift", "ios", "server"])
40+
41+
// Accumulate Values (default)
42+
let encoder1 = Form.Encoder()
43+
encoder1.arrayEncodingStrategy = .accumulateValues
44+
let data1 = try encoder1.encode(query)
45+
#expect(data1.count > 0)
46+
47+
// Brackets (PHP/Rails style)
48+
let encoder2 = Form.Encoder()
49+
encoder2.arrayEncodingStrategy = .brackets
50+
let data2 = try encoder2.encode(query)
51+
#expect(data2.count > 0)
52+
53+
// Indexed Brackets
54+
let encoder3 = Form.Encoder()
55+
encoder3.arrayEncodingStrategy = .bracketsWithIndices
56+
let data3 = try encoder3.encode(query)
57+
#expect(data3.count > 0)
58+
}
59+
}

0 commit comments

Comments
 (0)