File tree Expand file tree Collapse file tree 2 files changed +71
-2
lines changed
Expand file tree Collapse file tree 2 files changed +71
-2
lines changed Original file line number Diff line number Diff line change @@ -53,15 +53,17 @@ def reset_buffers
5353 @id = nil
5454 @type = nil
5555 @data = ""
56+ @have_data = false
5657 end
5758
5859 def process_field ( name , value )
5960 case name
6061 when "event"
6162 @type = value . to_sym
6263 when "data"
63- @data << "\n " if ! @data . empty?
64+ @data << "\n " if @have_data
6465 @data << value
66+ @have_data = true
6567 when "id"
6668 @id = value
6769 when "retry"
@@ -73,7 +75,7 @@ def process_field(name, value)
7375 end
7476
7577 def maybe_create_event
76- return nil if @data . empty?
78+ return nil if ! @have_data
7779 StreamEvent . new ( @type || :message , @data , @id )
7880 end
7981 end
Original file line number Diff line number Diff line change 33describe SSE ::Impl ::EventParser do
44 subject { SSE ::Impl ::EventParser }
55
6+ def verify_parsed_events ( lines :, expected_events :)
7+ ep = subject . new ( lines )
8+ output = ep . items . to_a
9+ expect ( output ) . to eq ( expected_events )
10+ end
11+
612 it "parses an event with all fields" do
713 lines = [
814 "event: abc" ,
4248 expect ( output ) . to eq ( [ expected_event ] )
4349 end
4450
51+ it "parses an event with empty data" do
52+ verify_parsed_events (
53+ lines : [
54+ "data:" ,
55+ ""
56+ ] ,
57+ expected_events : [
58+ SSE ::StreamEvent . new ( :message , "" , nil )
59+ ] )
60+ end
61+
62+ it "parses an event with a leading blank data line" do
63+ verify_parsed_events (
64+ lines : [
65+ "data:" ,
66+ "data: abc" ,
67+ ""
68+ ] ,
69+ expected_events : [
70+ SSE ::StreamEvent . new ( :message , "\n abc" , nil )
71+ ] )
72+ end
73+
74+ it "parses an event with multiple leading blank data lines" do
75+ verify_parsed_events (
76+ lines : [
77+ "data:" ,
78+ "data:" ,
79+ "data: abc" ,
80+ ""
81+ ] ,
82+ expected_events : [
83+ SSE ::StreamEvent . new ( :message , "\n \n abc" , nil )
84+ ] )
85+ end
86+
87+ it "parses an event with a blank data line in the middle" do
88+ verify_parsed_events (
89+ lines : [
90+ "data: abc" ,
91+ "data:" ,
92+ "data: def" ,
93+ ""
94+ ] ,
95+ expected_events : [
96+ SSE ::StreamEvent . new ( :message , "abc\n \n def" , nil )
97+ ] )
98+ end
99+
100+ it "parses an event with a trailing blank data line" do
101+ verify_parsed_events (
102+ lines : [
103+ "data: abc" ,
104+ "data:" ,
105+ ""
106+ ] ,
107+ expected_events : [
108+ SSE ::StreamEvent . new ( :message , "abc\n " , nil )
109+ ] )
110+ end
111+
45112 it "ignores comments" do
46113 lines = [
47114 ":" ,
You can’t perform that action at this time.
0 commit comments