#!/usr/local/bin/perl -w
use strict;
use Rose::HTML::Object::Errors qw(:number);
BEGIN
{
use Test::More tests => 46;
use_ok('Rose::HTML::Form::Field::Numeric');
}
my $field = Rose::HTML::Form::Field::Numeric->new(
label => 'Num',
description => 'Your num',
name => 'num',
value => 123,
default => 456,
maxlength => 20);
ok(ref $field eq 'Rose::HTML::Form::Field::Numeric', 'new()');
ok($field->validate, 'validate() 0');
is($field->html_field, '<input maxlength="20" name="num" size="6" type="text" value="123">', 'html_field() 1');
is($field->xhtml_field, '<input maxlength="20" name="num" size="6" type="text" value="123" />', 'xhtml_field() 1');
$field->clear;
is($field->internal_value, undef, 'clear()');
is($field->html_field, '<input maxlength="20" name="num" size="6" type="text" value="">', 'html_field() 2');
is($field->xhtml_field, '<input maxlength="20" name="num" size="6" type="text" value="" />', 'xhtml_field() 2');
$field->reset;
is($field->internal_value, '456', 'reset()');
is($field->html_field, '<input maxlength="20" name="num" size="6" type="text" value="456">', 'html_field() 3');
is($field->xhtml_field, '<input maxlength="20" name="num" size="6" type="text" value="456" />', 'xhtml_field() 3');
$field->input_value('123.456');
$field->class('foo');
$field->id('bar');
$field->style('baz');
is($field->html_field, '<input class="foo" id="bar" maxlength="20" name="num" size="6" style="baz" type="text" value="123.456">', 'html_field() 4');
is($field->xhtml_field, '<input class="foo" id="bar" maxlength="20" name="num" size="6" style="baz" type="text" value="123.456" />', 'xhtml_field() 4');
$field->input_value('bad');
ok(!$field->validate, 'validate() 1');
is($field->error, 'Num must be a number.', 'error() 1');
is($field->error_id, NUM_INVALID_NUMBER, 'error_id() 1');
$field->input_value('7^7');
ok(!$field->validate, 'validate() 2');
$field->input_value('-1.23');
ok($field->validate, 'validate() 3');
$field->input_value(' - 123.456 ');
ok($field->validate, 'validate() 4');
is($field->internal_value, '-123.456', 'internal_value() 1');
$field->input_value(' + 123.456 ');
ok($field->validate, 'validate() 4.1');
is($field->internal_value, '123.456', 'internal_value() 2');
ok(!$field->error, 'error() 2');
$field->input_value(-5);
ok($field->validate, 'validate() 5');
ok(!$field->error, 'error() 3');
$field->min(0);
ok(!$field->validate, 'validate() 6');
is($field->error, 'Num must be a positive number.', 'error() 4');
is($field->error_id, NUM_NOT_POSITIVE_NUMBER, 'error_id() 2');
$field->min(1);
ok(!$field->validate, 'validate() 7');
is($field->error, 'Num must be greater than or equal to 1.', 'error() 4');
is($field->error_id, NUM_BELOW_MIN, 'error_id() 3');
$field->max(100);
$field->input_value(100);
ok($field->validate, 'validate() 8');
ok(!$field->has_error, 'error() 4');
$field->input_value(101);
ok(!$field->validate, 'validate() 9');
is($field->error, 'Num must be less than or equal to 100.', 'error() 4');
is($field->error_id, NUM_ABOVE_MAX, 'error_id() 4');
$field->negative(1);
$field->input_value(300);
ok(!$field->validate, 'validate() 10');
$field->input_value(-300);
ok($field->validate, 'validate() 11');
$field->input_value(0);
ok($field->validate, 'validate() 12');
$field->positive(1);
ok($field->validate, 'validate() 13');
$field->input_value(-400);
ok(!$field->validate, 'validate() 14');
$field->input_value(400);
ok($field->validate, 'validate() 15');
$field->negative(0);
ok($field->validate, 'validate() 16');
$field->positive(0);
$field->input_value(-400);
ok($field->validate, 'validate() 17');
$field->input_value(400);
ok($field->validate, 'validate() 18');
$field->input_value('400a');
ok(!$field->validate, 'validate() 19');