spb/zyquo-cloud Public MIT
Native macOS AI chat client for 12 cloud providers — your keys, every cloud model, one beautiful chat.
Swift 97.4%
Shell 1.7%
Makefile 1%
1//2// SSEParserTests.swift3// Zyquo Cloud4//5// Author: Simon-Pierre Boucher6// Mail: contact@spboucher.ai7//89import Testing10@testable import ZyquoCloud1112@Suite struct SSEParserTests {13 private func parse(_ lines: [String]) -> [SSEEvent] {14 var parser = SSEParser()15 var events: [SSEEvent] = []16 for line in lines {17 if let event = parser.consume(line: line) { events.append(event) }18 }19 if let last = parser.consume(line: "") { events.append(last) }20 return events21 }2223 @Test func openAIStyleDataEvents() {24 let events = parse([25 #"data: {"choices":[{"delta":{"content":"Hel"}}]}"#,26 "",27 #"data: {"choices":[{"delta":{"content":"lo"}}]}"#,28 "",29 "data: [DONE]",30 "",31 ])32 #expect(events.count == 3)33 #expect(events[0].data.contains("Hel"))34 #expect(events[2].data == "[DONE]")35 #expect(events[0].event == nil)36 }3738 @Test func anthropicNamedEvents() {39 let events = parse([40 "event: message_start",41 #"data: {"type":"message_start","message":{"usage":{"input_tokens":9}}}"#,42 "",43 "event: content_block_delta",44 #"data: {"type":"content_block_delta","delta":{"type":"text_delta","text":"OK"}}"#,45 "",46 "event: message_stop",47 #"data: {"type":"message_stop"}"#,48 "",49 ])50 #expect(events.count == 3)51 #expect(events[0].event == "message_start")52 #expect(events[1].event == "content_block_delta")53 #expect(events[2].event == "message_stop")54 }5556 @Test func commentAndKeepAliveLinesIgnored() {57 let events = parse([58 ": keep-alive",59 "",60 #"data: {"x":1}"#,61 "",62 ": another comment",63 "",64 ])65 #expect(events.count == 1)66 #expect(events[0].data == #"{"x":1}"#)67 }6869 @Test func multiLineDataJoined() {70 let events = parse([71 "data: line1",72 "data: line2",73 "",74 ])75 #expect(events.count == 1)76 #expect(events[0].data == "line1\nline2")77 }7879 @Test func trailingEventWithoutBlankLineFlushed() {80 var parser = SSEParser()81 #expect(parser.consume(line: "data: tail") == nil)82 let flushed = parser.consume(line: "")83 #expect(flushed?.data == "tail")84 }85}86