The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -w
use strict;
use Test::More tests => 13;
use HTTP::ServerEvent;

# Check the synopsis
my $res= HTTP::ServerEvent->as_string(
    event => "ping",
    data => 12345678, # time(),
    retry => 5000, # retry in 5 seconds
    id => 1,
  );

my @res= split /\x{0D}\x{0A}?/, $res, -1;
is_deeply \@res, [
'event: ping',
'id: 1',
'retry: 5000',
'data: 12345678',
"",
"",
], "The synopsis works as expected";

for my $nl ("\x{0d}", "\x{0a}", "\x{0d}\x{0a}") {
    # Check that embedded newlines still get prefixed with "data:"
       $res= HTTP::ServerEvent->as_string(
        data => ["123${nl}456"],
      );
    my @res= split /\x{0D}\x{0A}?/, $res, -1;
    is_deeply \@res, [
    'data: 123',
    'data: 456',
    "",
    "",
    ], "Embedded newlines don't escape from the data prefixes"
    or diag $res;

    # Check that embedded newlines still get prefixed with "data:"
    my $lived= eval {
       $res= HTTP::ServerEvent->as_string(
        event => "123${nl}456",
      );
      1;
    };
    ok !$lived, "Embedded newline is fatal in the 'event' parameter"
        or diag $res;
    # Check that embedded newlines still get prefixed with "data:"
       $lived= eval {
       $res= HTTP::ServerEvent->as_string(
        event => 'test',
        retry => "123${nl}456",
      );
      1;
    };
    ok !$lived, "Embedded newline is fatal in the 'retry' parameter";
    # Check that embedded newlines still get prefixed with "data:"
       $lived= eval {
       $res= HTTP::ServerEvent->as_string(
        event => 'test',
        id => "123${nl}456",
      );
      1;
    };
    ok !$lived, "Embedded newline is fatal in the 'id' parameter";
};