The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

use strict;

use Test::More tests => 20;

use Rose::HTML::Object::Messages qw(:field FORM_HAS_ERRORS);

is(FIELD_REQUIRED_GENERIC, Rose::HTML::Object::Messages::FIELD_REQUIRED_GENERIC(), 'import 1');
is(FIELD_PARTIAL_VALUE, Rose::HTML::Object::Messages::FIELD_PARTIAL_VALUE(), 'import 2');
is(FORM_HAS_ERRORS, Rose::HTML::Object::Messages::FORM_HAS_ERRORS(), 'import 3');

my $messages = Rose::HTML::Object::Messages->message_ids;
is(scalar @$messages, 45, 'message_ids 1');

my @messages = Rose::HTML::Object::Messages->message_ids;
is(scalar @messages, 45, 'message_ids 2');

ok(Rose::HTML::Object::Messages->message_id_exists(FIELD_REQUIRED_GENERIC), 'message_id_exists 1');
ok(!Rose::HTML::Object::Messages->message_id_exists(-12345), 'message_id_exists 2');

ok(Rose::HTML::Object::Messages->message_name_exists('FIELD_REQUIRED_GENERIC'), 'message_name_exists 1');
ok(!Rose::HTML::Object::Messages->message_name_exists('NONESUCH'), 'message_name_exists 2');

is(Rose::HTML::Object::Messages->get_message_id('FIELD_REQUIRED_GENERIC'), FIELD_REQUIRED_GENERIC, 'get_message_id 1');
is(Rose::HTML::Object::Messages->get_message_id('NONESUCH'), undef, 'get_message_id 2');

is(Rose::HTML::Object::Messages->get_message_name(FIELD_REQUIRED_GENERIC), 'FIELD_REQUIRED_GENERIC', 'get_message_name 1');
is(Rose::HTML::Object::Messages->get_message_name(-12345), undef, 'get_messageget_message_name_id 2');

Rose::HTML::Object::Messages->add_message(TEST_MESSAGE => 30_000);

is(Rose::HTML::Object::Messages->get_message_id('TEST_MESSAGE'), 30_000, 'add_message 1');
is(Rose::HTML::Object::Messages->get_message_name(30_000), 'TEST_MESSAGE', 'add_message 2');

Rose::HTML::Object::Messages->import('TEST_MESSAGE');
eval "is(TEST_MESSAGE, 30_000, 'import new constant 1');";
die $@  if($@);

package Rose::HTML::Object::Messages;

use constant TEST_MESSAGE2 => 30_002;
use constant TEST_MESSAGE3 => 30_003;

package main;

Rose::HTML::Object::Messages->add_messages(qw(TEST_MESSAGE2 TEST_MESSAGE3));

Rose::HTML::Object::Messages->import(qw(TEST_MESSAGE2 TEST_MESSAGE3));
eval "is(TEST_MESSAGE2, 30_002, 'import new constant 2');";
die $@  if($@);
eval "is(TEST_MESSAGE3, 30_003, 'import new constant 3');";
die $@  if($@);

my $list = join(',', sort { $a <=> $b } 
  qw(-1 1 2 4 5 6 7 8 10 11 100 1300 1301 1302 1303 1304 1305 1306 1307
     1400 1500 1501 1550 1551 1552 1553 1554 1600 1650 1700 1701 10000 10001
     10002 10003 10004 10005 11000 11001 11002 11003 11004 11005 11006 11007
     30000 30002 30003));

is(join(',', sort { $a <=> $b } Rose::HTML::Object::Messages->message_ids), $list, 'message_ids');

$list = join(',', sort
  qw(CUSTOM_MESSAGE DATE_INVALID DATE_MIN_GREATER_THAN_MAX EMAIL_INVALID
     FIELD_DESCRIPTION FIELD_ERROR_LABEL_DAY FIELD_ERROR_LABEL_HOUR
     FIELD_ERROR_LABEL_MAXIMUM_DATE FIELD_ERROR_LABEL_MINIMUM_DATE
     FIELD_ERROR_LABEL_MINUTE FIELD_ERROR_LABEL_MONTH FIELD_ERROR_LABEL_SECOND
     FIELD_ERROR_LABEL_YEAR FIELD_INVALID_GENERIC FIELD_INVALID_LABELLED
     FIELD_LABEL FIELD_LABEL_DAY FIELD_LABEL_HOUR FIELD_LABEL_MINUTE
     FIELD_LABEL_MONTH FIELD_LABEL_SECOND FIELD_LABEL_YEAR FIELD_PARTIAL_VALUE
     FIELD_REQUIRED_GENERIC FIELD_REQUIRED_LABELLED FIELD_REQUIRED_SUBFIELD
     FIELD_REQUIRED_SUBFIELDS FORM_HAS_ERRORS NUM_ABOVE_MAX NUM_BELOW_MIN
     NUM_INVALID_INTEGER NUM_INVALID_INTEGER_POSITIVE NUM_INVALID_NUMBER
     NUM_INVALID_NUMBER_POSITIVE NUM_NOT_POSITIVE_INTEGER
     NUM_NOT_POSITIVE_NUMBER PHONE_INVALID SET_INVALID_QUOTED_STRING
     SET_PARSE_ERROR STRING_OVERFLOW TEST_MESSAGE TEST_MESSAGE2
     TEST_MESSAGE3 TIME_INVALID TIME_INVALID_AMPM TIME_INVALID_HOUR
     TIME_INVALID_MINUTE TIME_INVALID_SECONDS));

is(join(',', sort Rose::HTML::Object::Messages->message_names), $list, 'message_names');