Files
honeyDueKMP/iosApp/HoneyDueTests/StringExtensionsTests.swift
Trey t 1e2adf7660 Rebrand from Casera/MyCrib to honeyDue
Total rebrand across KMM project:
- Kotlin package: com.example.casera -> com.tt.honeyDue (dirs + declarations)
- Gradle: rootProject.name, namespace, applicationId
- Android: manifest, strings.xml (all languages), widget resources
- iOS: pbxproj bundle IDs, Info.plist, entitlements, xcconfig
- iOS directories: Casera/ -> HoneyDue/, CaseraTests/ -> HoneyDueTests/, etc.
- Swift source: all class/struct/enum renames
- Deep links: casera:// -> honeydue://, .casera -> .honeydue
- App icons replaced with honeyDue honeycomb icon
- Domains: casera.treytartt.com -> honeyDue.treytartt.com
- Bundle IDs: com.tt.casera -> com.tt.honeyDue
- Database table names preserved

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 06:33:57 -06:00

204 lines
4.2 KiB
Swift

//
// StringExtensionsTests.swift
// honeyDueTests
//
// Unit tests for String and Optional<String> extensions.
//
import Testing
@testable import honeyDue
// MARK: - isBlank Tests
struct IsBlankTests {
@Test func emptyStringIsBlank() {
#expect("".isBlank)
}
@Test func whitespaceOnlyIsBlank() {
#expect(" ".isBlank)
}
@Test func nonEmptyIsNotBlank() {
#expect(!"hello".isBlank)
}
@Test func stringWithWhitespacePaddingIsNotBlank() {
#expect(!" hello ".isBlank)
}
}
// MARK: - nilIfBlank Tests
struct NilIfBlankTests {
@Test func emptyReturnsNil() {
#expect("".nilIfBlank == nil)
}
@Test func whitespaceOnlyReturnsNil() {
#expect(" ".nilIfBlank == nil)
}
@Test func nonEmptyReturnsTrimmed() {
#expect(" hello ".nilIfBlank == "hello")
}
@Test func plainStringReturnsSelf() {
#expect("test".nilIfBlank == "test")
}
}
// MARK: - capitalizedFirst Tests
struct CapitalizedFirstTests {
@Test func lowercaseFirstCapitalized() {
#expect("hello".capitalizedFirst == "Hello")
}
@Test func alreadyCapitalizedUnchanged() {
#expect("Hello".capitalizedFirst == "Hello")
}
@Test func allUppercaseOnlyFirstKept() {
#expect("hELLO".capitalizedFirst == "HELLO")
}
@Test func emptyStringReturnsEmpty() {
#expect("".capitalizedFirst == "")
}
@Test func singleCharCapitalized() {
#expect("a".capitalizedFirst == "A")
}
}
// MARK: - truncated Tests
struct TruncatedTests {
@Test func shortStringNotTruncated() {
#expect("hi".truncated(to: 10) == "hi")
}
@Test func longStringTruncatedWithEllipsis() {
#expect("Hello World".truncated(to: 5) == "Hello...")
}
@Test func longStringTruncatedWithoutEllipsis() {
#expect("Hello World".truncated(to: 5, addEllipsis: false) == "Hello")
}
@Test func exactLengthNotTruncated() {
#expect("Hello".truncated(to: 5) == "Hello")
}
}
// MARK: - isValidEmail Tests
struct IsValidEmailTests {
@Test func standardEmailValid() {
#expect("user@example.com".isValidEmail)
}
@Test func emailWithSubdomainValid() {
#expect("user@mail.example.com".isValidEmail)
}
@Test func emailWithPlusValid() {
#expect("user+tag@example.com".isValidEmail)
}
@Test func emailWithDotsValid() {
#expect("first.last@example.com".isValidEmail)
}
@Test func noAtSignInvalid() {
#expect(!"userexample.com".isValidEmail)
}
@Test func noDomainInvalid() {
#expect(!"user@".isValidEmail)
}
@Test func noTLDInvalid() {
#expect(!"user@example".isValidEmail)
}
@Test func emptyStringInvalid() {
#expect(!"".isValidEmail)
}
@Test func numericLocalPartValid() {
#expect("123@example.com".isValidEmail)
}
}
// MARK: - isValidPhone Tests
struct IsValidPhoneTests {
@Test func tenDigitsValid() {
#expect("5551234567".isValidPhone)
}
@Test func formattedUSPhoneValid() {
#expect("(555) 123-4567".isValidPhone)
}
@Test func internationalFormatValid() {
#expect("+1 555-123-4567".isValidPhone)
}
@Test func tooShortInvalid() {
#expect(!"12345".isValidPhone)
}
@Test func lettersInvalid() {
#expect(!"555-ABC-DEFG".isValidPhone)
}
}
// MARK: - Optional String Tests
struct OptionalStringTests {
@Test func nilIsNilOrBlank() {
let s: String? = nil
#expect(s.isNilOrBlank)
}
@Test func emptyIsNilOrBlank() {
let s: String? = ""
#expect(s.isNilOrBlank)
}
@Test func whitespaceIsNilOrBlank() {
let s: String? = " "
#expect(s.isNilOrBlank)
}
@Test func valueIsNotNilOrBlank() {
let s: String? = "hello"
#expect(!s.isNilOrBlank)
}
@Test func nilNilIfBlankReturnsNil() {
let s: String? = nil
#expect(s.nilIfBlank == nil)
}
@Test func blankOptionalNilIfBlankReturnsNil() {
let s: String? = " "
#expect(s.nilIfBlank == nil)
}
@Test func valueOptionalNilIfBlankReturnsTrimmed() {
let s: String? = " hello "
#expect(s.nilIfBlank == "hello")
}
}