SPB Git

spb/zyquo-router Public MIT

One local endpoint, every AI provider — a private OpenAI-compatible LLM gateway for your Mac (170 models, 12 providers).

Swift 95.7% Python 2.3% Shell 1.2% Makefile 0.9%
2.4 KB · 86 lines swift
Raw Blame History
1//2//  SSEParserTests.swift3//  Zyquo Router4//5//  Author: Simon-Pierre Boucher6//  Mail: contact@spboucher.ai7//89import Testing10@testable import ZyquoRouter1112@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