Skip to content

Commit e29b167

Browse files
authored
Merge pull request #33 from clue-labs/ignore-empty-event
Ignore empty `event` type as per EventSource specs
2 parents 11e049f + 1c1c5f8 commit e29b167

File tree

2 files changed

+35
-3
lines changed

2 files changed

+35
-3
lines changed

src/MessageEvent.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,15 @@ public static function parse($data, $lastEventId)
2424

2525
foreach ($lines as $line) {
2626
$name = strstr($line, ':', true);
27-
$value = substr(strstr($line, ':'), 1);
27+
$value = (string) substr(strstr($line, ':'), 1);
2828
if (isset($value[0]) && $value[0] === ' ') {
29-
$value = substr($value, 1);
29+
$value = (string) substr($value, 1);
3030
}
3131
if ($name === 'data') {
3232
$data .= $value . "\n";
3333
} elseif ($name === 'id') {
3434
$id = $value;
35-
} elseif ($name === 'event') {
35+
} elseif ($name === 'event' && $value !== '') {
3636
$type = $value;
3737
} elseif ($name === 'retry' && $value === (string)(int)$value && $value >= 0) {
3838
$retry = (int)$value;

tests/MessageEventTest.php

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,38 @@ public function testParseWithMultipleIdsReturnsMessageWithLastEventIdFromStream(
8888
$this->assertEquals('2', $message->lastEventId);
8989
}
9090

91+
public function testParseReturnsMessageWithTypeFromStream()
92+
{
93+
$message = MessageEvent::parse("data: hello\r\nevent: join", '');
94+
95+
$this->assertEquals("hello", $message->data);
96+
$this->assertEquals('join', $message->type);
97+
}
98+
99+
public function testParseWithoutEventReturnsMessageWithDefaultMessageType()
100+
{
101+
$message = MessageEvent::parse("data: hello", '');
102+
103+
$this->assertEquals("hello", $message->data);
104+
$this->assertEquals('message', $message->type);
105+
}
106+
107+
public function testParseWithMultipleEventsReturnsMessageWithLastTypeFromStream()
108+
{
109+
$message = MessageEvent::parse("data: hello\nevent: join\nevent: leave", '');
110+
111+
$this->assertEquals("hello", $message->data);
112+
$this->assertEquals('leave', $message->type);
113+
}
114+
115+
public function testParseWithEmptyEventReturnsMessageWithDefaultMessageType()
116+
{
117+
$message = MessageEvent::parse("data: hello\r\nevent:", '');
118+
119+
$this->assertEquals("hello", $message->data);
120+
$this->assertEquals('message', $message->type);
121+
}
122+
91123
public function retryTimeDataProvider()
92124
{
93125
return [

0 commit comments

Comments
 (0)