The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#!perl

# This unit tests whether ad-hoc ("free") enumerations work as expected.

use Test::More tests => 13;

use Enumeration;

my $e = new Enumeration qw(this is a test);

$e->set('this');

ok  $e->is('this')  => 'is query';
ok !$e->is('test')  => 'is query mismatch';

ok  $e->is_any('is', 'a', 'this') => 'is_any query';
ok !$e->is_any('is', 'a', 'test') => 'is_any query mismatch';

ok  $e->is_none('is', 'a', 'test') => 'is_none query';
ok !$e->is_none('is', 'a', 'this') => 'is_none query mismatch';

eval {  $e->is('wonko');  };
like $@, qr/\A"wonko" is not an allowable value/, 'is (unallowed value)';

eval {  $e->is_any('wonko');  };
like $@, qr/\A"wonko" is not an allowable value/, 'is_any (unallowed value)';

eval {  $e->is_none('wonko');  };
like $@, qr/\A"wonko" is not an allowable value/, 'is_none (unallowed value)';

is $e->bare_value, 'this',       'bare_value';
is $e->value,      'Enumeration::this', 'value';

$e->set('a');
is $e->value, 'Enumeration::a', 'set';

eval {  $e->set('wonko');  };
like $@, qr/\A"wonko" is not an allowable value/, 'set (unallowed value)';