@@ -17,7 +17,8 @@ public class SseEvent
1717 public string EventName { get ; set ; } = "message" ; // Default SSE event name
1818 public string Data { get ; set ; } = "" ;
1919
20- public override string ToString ( ) => $ "event: { EventName } \n data: { Data } \n \n ";
20+ public override string ToString ( ) => $ "(Event=\" { EventName } \" Data=\" { Data } \" )";
21+
2122 public override bool Equals ( object ? obj )
2223 {
2324 return obj is SseEvent other &&
@@ -60,15 +61,19 @@ private async Task<List<SseEvent>> ReadSseEventsAsync(HttpResponseMessage respon
6061 currentEvent = new SseEvent ( ) ; // Reset for next event
6162 dataBuffer . Clear ( ) ;
6263 }
63- else if ( line . StartsWith ( "event:" ) )
64+ else if ( line . Contains ( ':' ) )
6465 {
65- currentEvent . EventName = line . Substring ( "event:" . Length ) . Trim ( ) ;
66+ var parts = line . Split ( ':' , StringSplitOptions . TrimEntries ) ;
67+ events . Add ( new SseEvent ( )
68+ {
69+ Data = parts [ 1 ] ,
70+ EventName = parts [ 0 ]
71+ } ) ;
6672 }
67- else if ( line . StartsWith ( "data:" ) )
73+ else
6874 {
69- dataBuffer . AppendLine ( line . Substring ( "data:" . Length ) . TrimStart ( ' ' ) ) ;
75+ Assert . Fail ( "invalid SSE line" ) ;
7076 }
71- // Ignore id, retry, and comment lines for these tests
7277 }
7378 // In case the stream ends without a final blank line but there's data buffered
7479 if ( dataBuffer . Length > 0 )
@@ -92,21 +97,12 @@ public async Task TestSyncSseFeatures()
9297 Assert . AreEqual ( "sync" , headerValues ? . FirstOrDefault ( ) , "X-Test-SSE header value incorrect." ) ;
9398
9499 var receivedEvents = await ReadSseEventsAsync ( response ) ;
95-
96- // Server sends:
97- // eventSource.Send("message 1 part 1");
98- // eventSource.Send("message 1 part 2");
99- // eventSource.Send("message 2 part 1", eventName: "customSync");
100- // eventSource.Send("message 2 part 2", eventName: "customSync");
101- // ReadSseEventsAsync currently combines data lines for the same event.
102- // The server code sends "message 1 part 1" and "message 1 part 2" as separate events by default
103- // because .Send() is called multiple times.
104- // Let's adjust expected based on server logic: each Send is one event.
105-
106100 var expectedEvents = new List < SseEvent >
107101 {
108- new SseEvent { EventName = "message" , Data = "message 1 part 1" } ,
109- new SseEvent { EventName = "customSync" , Data = "message 2 part 1" }
102+ new SseEvent { EventName = "data" , Data = "message 1 part 1" } ,
103+ new SseEvent { EventName = "data" , Data = "message 1 part 2" } ,
104+ new SseEvent { EventName = "customSync" , Data = "message 2 part 1" } ,
105+ new SseEvent { EventName = "customSync" , Data = "message 2 part 2" }
110106 } ;
111107
112108 CollectionAssert . AreEqual ( expectedEvents , receivedEvents , "The received SSE events do not match the expected events." ) ;
@@ -131,9 +127,9 @@ public async Task TestAsyncSseFeatures()
131127
132128 var expectedEvents = new List < SseEvent >
133129 {
134- new SseEvent { EventName = "message " , Data = "async message 1" } ,
130+ new SseEvent { EventName = "data " , Data = "async message 1" } ,
135131 new SseEvent { EventName = "customAsync" , Data = "async message 2" } ,
136- new SseEvent { EventName = "message " , Data = "async message 3" }
132+ new SseEvent { EventName = "data " , Data = "async message 3" }
137133 } ;
138134
139135 CollectionAssert . AreEqual ( expectedEvents , receivedEvents , "The received asynchronous SSE events do not match the expected events." ) ;
@@ -165,7 +161,7 @@ public async Task TestSseWithCorsHeaders()
165161
166162 var expectedEvents = new List < SseEvent >
167163 {
168- new SseEvent { EventName = "message " , Data = "cors message 1" }
164+ new SseEvent { EventName = "data " , Data = "cors message 1" }
169165 } ;
170166
171167 CollectionAssert . AreEqual ( expectedEvents , receivedEvents , "The received SSE events for CORS test do not match the expected events." ) ;
@@ -187,8 +183,8 @@ public async Task TestSseEmptyNullDataEvents()
187183
188184 var expectedEvents = new List < SseEvent >
189185 {
190- new SseEvent { EventName = "message " , Data = "" } ,
191- new SseEvent { EventName = "message " , Data = "" } ,
186+ new SseEvent { EventName = "data " , Data = "" } ,
187+ new SseEvent { EventName = "data " , Data = "" } ,
192188 new SseEvent { EventName = "customEmpty" , Data = "" } ,
193189 new SseEvent { EventName = "customNull" , Data = "" }
194190 } ;
0 commit comments