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 strict;
use warnings;
use Test::More;

use Text::AAlib;

my $aa = Text::AAlib->new(
    width  => 100,
    height => 200,
);

can_ok $aa, "putpixel";

my @PARAMS = qw/x y color/;
for my $param (@PARAMS) {
    my %args = map { $_ => 1 } grep { $_ ne $param } @PARAMS;
    eval {
        $aa->putpixel(%args);
    };
    like $@, qr/missing mandatory parameter/, "missing '$param' parameter";
}

for my $param (@PARAMS) {
    my %args = map { $_ => 1 } grep { $_ ne $param } @PARAMS;
    $args{$param} = 'aaa';
    eval {
        $aa->putpixel(%args);
    };
    like $@, qr/should be number/, "invalid '$param', not a number";
}

eval {
    $aa->putpixel(
        x => 100, y => 1, color => 10,
    );
};
like $@, qr/'x' param should be/, "invalid 'x' param(>= width)";

eval {
    $aa->putpixel(
        x => -1, y => 1, color => 10,
    );
};
like $@, qr/'x' param should be/, "invalid 'x' param(< 0)";

eval {
    $aa->putpixel(
        x => 1, y => 200, color => 10,
    );
};
like $@, qr/'y' param should be/, "invalid 'y' param(>= height)";

eval {
    $aa->putpixel(
        x => 0, y => -1, color => 10,
    );
};
like $@, qr/'y' param should be/, "invalid 'y' param(< 0)";

eval {
    $aa->putpixel(
        x => 1, y => 1, color => 256,
    );
};
like $@, qr/'color' parameter should be/, "invalid 'color' param(>= 255)";

eval {
    $aa->putpixel(
        x => 0, y => 0, color => -1,
    );
};
like $@, qr/'color' parameter should be/, "invalid 'color' param(< 0)";

done_testing;