This commit is contained in:
Akshay Kolli
2026-06-30 01:12:19 -07:00
commit 4c1c6b2f37
55 changed files with 13180 additions and 0 deletions

View File

@@ -0,0 +1,73 @@
import CryptoKit
import XCTest
@testable import ClipBored
final class ClipboardEncryptionServiceTests: XCTestCase {
func testProtectAndUnprotectRoundTrip() throws {
let service = makeService(byte: 7)
let value = "secret clipboard value \(UUID().uuidString)"
let protected = try XCTUnwrap(service.protect(value))
XCTAssertTrue(ClipboardEncryptionService.isProtected(protected))
XCTAssertFalse(protected.contains(value))
XCTAssertEqual(service.unprotect(protected), value)
}
func testUnprotectLeavesPlaintextValuesUntouched() {
let service = makeService(byte: 7)
let value = "plain clipboard value"
XCTAssertEqual(service.unprotect(value), value)
}
func testMarkerLookingPlaintextIsStillEncryptable() throws {
let service = makeService(byte: 7)
let value = ClipboardEncryptionService.marker + "not encrypted user text"
let protected = try XCTUnwrap(service.protect(value))
XCTAssertNotEqual(protected, value)
XCTAssertEqual(service.unprotect(protected), value)
XCTAssertEqual(service.unprotect(value), value)
}
func testWrongKeyCannotDecryptProtectedValue() throws {
let service = makeService(byte: 7)
let wrongService = makeService(byte: 9)
let protected = try XCTUnwrap(service.protect("keyed secret"))
XCTAssertNil(wrongService.unprotect(protected))
}
func testProtectDataAndUnprotectDataRoundTrip() throws {
let service = makeService(byte: 7)
let data = Data((0..<128).map { UInt8($0) })
let protected = service.protectData(data)
XCTAssertTrue(ClipboardEncryptionService.isProtected(protected))
XCTAssertNotEqual(protected, data)
XCTAssertEqual(service.unprotectData(protected), data)
}
func testWrongKeyCannotDecryptProtectedData() {
let service = makeService(byte: 7)
let wrongService = makeService(byte: 9)
let protected = service.protectData(Data("binary secret".utf8))
XCTAssertNil(wrongService.unprotectData(protected))
}
func testProtectFallsBackToPlaintextWhenKeyIsUnavailable() {
let service = ClipboardEncryptionService(keyProvider: { nil })
XCTAssertEqual(service.protect("available only in memory"), "available only in memory")
XCTAssertEqual(service.protectData(Data("available only in memory".utf8)), Data("available only in memory".utf8))
}
private func makeService(byte: UInt8) -> ClipboardEncryptionService {
let keyData = Data(repeating: byte, count: 32)
return ClipboardEncryptionService(keyProvider: { SymmetricKey(data: keyData) })
}
}