The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More tests => 6;
use Text::XLogfile ':all';

my $xlogline = 'a=b:c:d=e';

my $equals_key    = { 'a=b'  => 1 };
my $colon_key     = { 'a:b'  => 1 };
my $newline_key   = { "a\nb" => 1 };

my $colon_value   = { 1 => 'a:b'  };
my $newline_value = { 1 => "a\nb" };

my $x2h = parse_xlogline($xlogline);
ok(!defined($x2h), "a=b:c:d=e returns undef");

for (
    [$equals_key,    "Key 'a=b' contains invalid character: '='."],
    [$colon_key,     "Key 'a:b' contains invalid character: ':'."],
    [$newline_key,   "Key 'a\\nb' contains invalid character: newline."],
    [$colon_value,   "Value 'a:b' (of key '1') contains invalid character: ':'."],
    [$newline_value, "Value 'a\\nb' (of key '1') contains invalid character: newline."],
)
{
    my ($hash, $expected) = @$_;

    eval { make_xlogline($hash) };
    like($@, qr/^\Q$expected/, "Detecting error: \u$expected");
}