The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
use Test::More "no_plan";
use utf8;
BEGIN {use_ok(Perl6::Slurp)};

my $FILENAME = 'layers.t.data';

my $desc;
sub TEST { $desc = $_[0] };

open FH, '>:utf8', $FILENAME or exit;
print FH map chr, 0..0x1FF;
close FH;

undef $/;

my @layers = ( qw(:raw :bytes :unix :stdio :perlio :crlf :utf8),
			   ":raw :utf8",
			   ":raw:utf8",
			 );


for my $layer (@layers) {
	open FH, "<$layer", $FILENAME or exit;
	$data{$layer} = <FH>;
	$len{$layer}  = length $data{$layer};
	close FH;
}

for my $layer (@layers) {
	TEST "scalar slurp from '<$layer', $FILENAME";
	$str = slurp "<$layer", $FILENAME;
	is $data{$layer}, $str, $desc;
	ok length($str) == $len{$layer}, "length of $desc";

	TEST "scalar slurp from '< $layer', $FILENAME";
	$str = slurp "< $layer", $FILENAME;
	is $data{$layer}, $str, $desc;
	ok length($str) == $len{$layer}, "length of $desc";
}

%opts = (
	':raw'       => [{raw=>1}],
	':utf8'      => [{utf8=>1}],
	':raw :utf8' => [{raw=>1}, {utf8=>1}],
	':raw:utf8'  => [[raw=>1, utf8=>1]],
);

for my $layer (keys %opts) {
	local $" = ", ";
	TEST "scalar option slurp from $FILENAME, $layer";
	$str = slurp $FILENAME, @{$opts{$layer}};
	is $data{$layer}, $str, $desc;
	ok length($str) == $len{$layer}, "length of $desc";

	TEST "scalar option slurp from $layer, $FILENAME";
	$str = slurp @{$opts{$layer}}, $FILENAME;
	is $data{$layer}, $str, $desc;
	ok length($str) == $len{$layer}, "length of $desc";

}

unlink $FILENAME;