;;; noise-sse-test.el --- Tests for SSE client -*- lexical-binding: t; -*- ;;; Commentary: ;; Tests for noise-sse.el SSE event parsing and connection management. ;;; Code: (require 'ert) (require 'noise-sse) (ert-deftest noise-sse--parse-event-basic () "Parse a basic SSE event with data field." (let ((event "data: {\"type\":\"message\",\"content\":\"hello\"}\n\n")) (let ((result (noise-sse--parse-event event))) (should (hash-table-p result)) (should (equal (gethash "type" result) "message")) (should (equal (gethash "content" result) "hello"))))) (ert-deftest noise-sse--parse-event-multiline () "Parse SSE event with multiline data." (let ((event "data: {\"type\":\"message\",\ndata: \"content\":\"hello\"}\n\n")) (let ((result (noise-sse--parse-event event))) (should (hash-table-p result)) (should (equal (gethash "type" result) "message"))))) (ert-deftest noise-sse--parse-event-empty () "Parse empty SSE event returns nil." (let ((event "\n\n")) (should (null (noise-sse--parse-event event))))) (ert-deftest noise-sse--initial-state () "SSE client starts in disconnected state." (let ((noise-sse--process nil) (noise-sse--reconnect-timer nil) (noise-sse--reconnect-delay 1)) (should (null noise-sse--process)) (should (null noise-sse--reconnect-timer)) (should (= 1 noise-sse--reconnect-delay)))) (ert-deftest noise-sse--reconnect-delay-backoff () "Reconnect delay doubles on each attempt." (let ((noise-sse--reconnect-delay 1)) (noise-sse--increase-reconnect-delay) (should (= 2 noise-sse--reconnect-delay)) (noise-sse--increase-reconnect-delay) (should (= 4 noise-sse--reconnect-delay)) (noise-sse--increase-reconnect-delay) (should (= 8 noise-sse--reconnect-delay)))) (ert-deftest noise-sse--reconnect-delay-max () "Reconnect delay caps at max value." (let ((noise-sse--reconnect-delay 32) (noise-sse-max-reconnect-delay 60)) (noise-sse--increase-reconnect-delay) (should (= 60 noise-sse--reconnect-delay)))) (provide 'noise-sse-test) ;;; noise-sse-test.el ends here