Colon-Config
view release on metacpan or search on metacpan
t/comment-in-value.t view on Meta::CPAN
# Tests for '#' character behavior: comment detection only applies at line
# start, never inside values. This documents and locks down that contract.
use strict;
use warnings;
use Test2::Bundle::Extended;
use Test2::Tools::Explain;
use Test2::Plugin::NoWarnings;
use Colon::Config;
# --- '#' at the start of a line is a comment (skipped entirely) ---
{
my $input = <<'EOS';
# this is a comment
key:value
EOS
is Colon::Config::read($input), [ key => 'value' ],
"line starting with '#' is treated as a comment";
}
{
my $input = <<'EOS';
# indented comment
key:value
EOS
is Colon::Config::read($input), [ key => 'value' ],
"indented '#' at line start is still a comment";
}
# --- '#' inside a value is preserved literally ---
{
is Colon::Config::read("key:#value\n"), [ key => '#value' ],
"value starting with '#' is preserved";
}
{
is Colon::Config::read("key:value#stuff\n"), [ key => 'value#stuff' ],
"'#' in the middle of a value is preserved";
}
{
is Colon::Config::read("key: value # comment\n"), [ key => 'value # comment' ],
"'#' after spaces in a value is preserved (no inline comment stripping)";
}
# --- Real-world patterns with '#' in values ---
{
is Colon::Config::read("color:#ff0000\n"), [ color => '#ff0000' ],
"CSS hex color in value is preserved";
}
{
is Colon::Config::read("url:http://example.com/#anchor\n"),
[ url => 'http://example.com/#anchor' ],
"URL fragment (#anchor) in value is preserved";
}
{
is Colon::Config::read("channel:#general\n"), [ channel => '#general' ],
"channel name with '#' prefix is preserved";
}
# --- Mixed: comments and values with '#' in the same input ---
{
my $input = <<'EOS';
# header comment
color:#ff0000
# another comment
channel:#general
EOS
is Colon::Config::read($input),
[ color => '#ff0000', channel => '#general' ],
"comment lines and '#'-containing values coexist correctly";
}
# --- Edge case: line with only '#' ---
{
my $input = <<'EOS';
key1:val1
#
key2:val2
EOS
is Colon::Config::read($input), [ key1 => 'val1', key2 => 'val2' ],
"bare '#' on a line is a comment";
}
# --- Multiple '#' characters in a value ---
{
is Colon::Config::read("key:a#b#c\n"), [ key => 'a#b#c' ],
"multiple '#' characters in a value are all preserved";
}
done_testing;
( run in 1.514 second using v1.01-cache-2.11-cpan-364913b4093 )