view release on metacpan or search on metacpan
lib/Form/Sensible/Reflector/MySQL.pm view on Meta::CPAN
$f->{upper_bound} = $mysql_type =~ /unsigned/? 4294967295 : 2147483647;
}
# Treat massive integers as strings or nothing works
elsif ($mysql_type =~ /^bigint/){
$f->{field_type} = 'Text';
$f->{validation} = { code => $mysql_type =~ /unsigned/ ?
sub {
use Math::BigInt;
my $n = Math::BigInt->new( $_[0] );
# return '_FIELDNAME_ is an invalid unsigned big integer' if $n eq 'NaN';
return $self->i18n->{ubigint}->{nan} if $n eq 'NaN';
return $self->i18n->{ubigint}->{not_int} if not $n->is_int;
return $self->i18n->{ubigint}->{too_high} if $n > 8446744073709551615;
return $self->i18n->{ubigint}->{too_low} if $n < 0;
return 0;
}
: sub {
use Math::BigInt ':constant';
my $n = Math::BigInt->new( $_[0] );
return $self->i18n->{sbigint}->{nan} if $n eq 'NaN';
return $self->i18n->{sbigint}->{not_int} if not $n->is_int;
return $self->i18n->{sbigint}->{too_high} if $n > 9223372036854775807;
return $self->i18n->{sbigint}->{too_low} if $n < -9223372036854775808;
return 0;
}
};
}
elsif ($mysql_type =~ /^(double|real)/){
$f->{field_type} = 'Text';
$f->{validation} = { code => sub {
use Math::BigFloat ':constant';
my $n = Math::BigFloat->new( $_[0] );
return $self->i18n->{double}->{nan} if $n eq 'NaN';
return $self->i18n->{double}->{oob}
if ($n <= -1.7976931348623157E+308 and $n >= -2.2250738585072014E-308)
or $n== 0
or ($n <= 2.2250738585072014E-308 and $n >= 1.7976931348623157E+3080);
return 0;
}
};
}
elsif ($mysql_type =~ /^(decimal|numeric) (?: \((\d+) (?:,(\d+))? \) )?$/x ){
t/510_floats.t view on Meta::CPAN
}
);
is( scalar $form->get_fields, 1, 'number of fields');
$form->field($col)->value( 'a test string' );
isnt(
scalar keys %{ $form->validate->error_fields },
0,
$col.' NaN produces errors'
);
like(
$form->validate->error_fields->{$col}->[0],
qr'not a valid', 'NaN'
);
is(
$form->field('my_floatnm')->{upper_bound},
999.99,
'upper bound of float'
);
is(
$form->field('my_floatnm')->{lower_bound},
t/510_floats.t view on Meta::CPAN
$form->field('my_floatnm')->value( 9999 );
@rv = $form->field('my_floatnm')->validate;
#like( $rv[0], qr'higher', 'float too high');
like( $rv[0], qr'3', 'float too high');
$form->field('my_floatnm')->value( 99.999 );
like(
$form->validate->error_fields->{$col}->[0],
qr'3',
'NaN error'
);
$form->field('my_floatnm')->value( 999.99 );
is(
scalar (keys %{$form->validate->error_fields}),
0,
'no errors'
);
$form->field($col)->value( 18446744073709551615 );
t/510_floats.t view on Meta::CPAN
}
);
$form->field('my_floatn')->value( 'a test string' );
isnt( scalar keys %{ $form->validate->error_fields }, 0, 'has errors');
like(
$form->validate->error_fields->{'my_floatn'}->[0],
qr'not a valid',
'NaN'
);
$form->field($col)->value( 18446744073709551615 );
isnt(
$form->validate->error_fields->{$col}->[0],
'Invalid number format', 'NaN'
);
done_testing(15);
t/540_doubles.t view on Meta::CPAN
{
%$options,
only_columns => [$col]
}
);
$form->field($col)->value( 'a test string' );
like(
$form->validate->error_fields->{$col}->[0],
qr'is not a valid',
'String is NaN'
);
TODO: {
local $TODO = "TODO Math::BigInt->new( -1.7976931348623157E+309 )";
$form->field($col)->value( Math::BigInt->new( -1.7976931348623157E+309 ));
# TODO Bounds and out of bounds tests
is(
$form->validate->error_fields->{$col}->[0],
undef,
'expon'
t/550_decmail.t view on Meta::CPAN
{
%$options,
only_columns => [$col]
}
);
$form->field($col)->value( 'a test string' );
like(
$form->validate->error_fields->{$col}->[0],
qr'not a valid',
'String is NaN'
);
# TODO Bounds and out of bounds tests
$form->field($col)->value( '9' x 66 );
like(
$form->validate->error_fields->{$col}->[0],
qr'too many digits',
'Exceeds default'
);
t/550_decmail.t view on Meta::CPAN
my $form = $reflector->reflect_from($Local::Fixtures::dbh,
{
%$options,
only_columns => [$col]
}
);
$form->field($col)->value( 'a test string' );
like(
$form->validate->error_fields->{$col}->[0],
qr'not a valid',
'String is NaN'
);
my $max = $Local::Fixtures::dbh->selectrow_array(
"SELECT `$col` FROM $Local::Fixtures::table_name LIMIT 1"
);
$form->field($col)->value( $max );
is(
scalar keys %{$form->validate->error_fields},
0,
t/560_ints.t view on Meta::CPAN
my $form = $reflector->reflect_from($Local::Fixtures::dbh, $options);
goto TEST;
# TINYINT S
is( $form->field('my_tinyint_s')->field_type, 'number', 'class');
$form->field('my_tinyint_s')->value( 'a test string' );
@rv = $form->field('my_tinyint_s')->validate;
like( $rv[0], qr'is not a number', 'NaN');
$form->clear_state;
$form->field('my_tinyint_s')->value( -129 );
like( $form->validate->error_fields->{'my_tinyint_s'}->[0], qr'lower', 'lower');
TEST:
$form->field('my_tinyint_s')->value( -128 );
is( $form->field('my_tinyint_s')->value, -128, 'Set negative value' );
t/560_ints.t view on Meta::CPAN
$form->set_values({ my_tinyint_s => 128 });
ok( not($form->validate->is_valid), 'tinyint s 128 ok');
# TINYINT U
is( $form->field('my_tinyint_u')->field_type, 'number', 'class');
$form->field('my_tinyint_u')->value( 'a test string' );
@rv = $form->field('my_tinyint_u')->validate;
like( $rv[0], qr'is not a number', 'NaN');
$form->field('my_tinyint_u')->value( 256 );
like(
$form->validate->error_fields->{'my_tinyint_u'}->[0],
qr'higher',
'higher'
);
$form->field('my_tinyint_u')->value( 255 );
t/560_ints.t view on Meta::CPAN
) or explain $form->field('my_tinyint_u')->validate->error_fields;
# SMALLINT S
is( $form->field('my_smallint_s')->field_type, 'number', 'class');
$form->field('my_smallint_s')->value( 'a test string' );
@rv = $form->field('my_smallint_s')->validate;
like( $rv[0], qr'is not a number', 'NaN');
$form->field('my_smallint_s')->value( -32769 );
@rv = $form->field('my_smallint_s')->validate;
like( $rv[0], qr'lower', 'lower');
$form->field('my_smallint_s')->value( -32768 );
is( $form->field('my_smallint_s')->validate, 0, 'smallint s -32768 ok');
$form->set_values({ my_smallint_s => 32768 });
@rv = $form->field('my_smallint_s')->validate;
t/560_ints.t view on Meta::CPAN
$form->set_values({ my_smallint_s => 0 });
ok( not($form->validate->is_valid), 'smallint s 0 ok');
# SMALLINT U
is( $form->field('my_smallint_u')->field_type, 'number', 'class');
$form->field('my_smallint_u')->value( 'a test string' );
@rv = $form->field('my_smallint_u')->validate;
like( $rv[0], qr'not a number', 'NaN');
$form->field('my_smallint_u')->value( 65536 );
@rv = $form->field('my_smallint_u')->validate;
like( $rv[0], qr'higher', 'higher');
$form->field('my_smallint_u')->value( 65535 );
is( $form->field('my_smallint_u')->validate, 0, 'smallint u 255 ok' );
$form->field('my_smallint_u')->value( -1 );
@rv = $form->field('my_smallint_u')->validate;
t/560_ints.t view on Meta::CPAN
$form->field('my_smallint_u')->value( 0 );
is( $form->field('my_smallint_u')->validate, 0, 'smallint u 0 ok' );
# MEDIUMINT S
is( $form->field('my_mediumint_s')->field_type, 'number', 'class');
$form->field('my_mediumint_s')->value( 'a test string' );
@rv = $form->field('my_mediumint_s')->validate;
like( $rv[0], qr'not a number', 'NaN');
$form->field('my_mediumint_s')->value( -8388609 );
@rv = $form->field('my_mediumint_s')->validate;
like( $rv[0], qr'lower', 'lower');
$form->field('my_mediumint_s')->value( -8388608 );
is( $form->field('my_mediumint_s')->validate, 0, 'mediumint s -8388608 ok');
$form->set_values({ my_mediumint_s => 8388608 });
@rv = $form->field('my_mediumint_s')->validate;
t/560_ints.t view on Meta::CPAN
$form->set_values({ my_mediumint_s => 0 });
ok( not($form->validate->is_valid), 'mediumint s 0 ok');
# MEDIUMINT U
is( $form->field('my_mediumint_u')->field_type, 'number', 'class');
$form->field('my_mediumint_u')->value( 'a test string' );
@rv = $form->field('my_mediumint_u')->validate;
like( $rv[0], qr'not a number', 'NaN');
$form->field('my_mediumint_u')->value( 16777216 );
@rv = $form->field('my_mediumint_u')->validate;
like( $rv[0], qr'higher');
$form->field('my_mediumint_u')->value( 16777215 );
is( $form->field('my_mediumint_u')->validate, 0, 'mediumint u 255 ok' );
$form->field('my_mediumint_u')->value( -1 );
@rv = $form->field('my_mediumint_u')->validate;
t/560_ints.t view on Meta::CPAN
$form->field('my_mediumint_u')->value( 0 );
is( $form->field('my_mediumint_u')->validate, 0, 'mediumint u 0 ok' );
# INT S
is( $form->field('my_int_s')->field_type, 'number', 'class');
$form->field('my_int_s')->value( 'a test string' );
@rv = $form->field('my_int_s')->validate;
like( $rv[0], qr'not a number', 'NaN');
$form->field('my_int_s')->value( -2147483649 );
@rv = $form->field('my_int_s')->validate;
like( $rv[0], qr'lower', 'lower');
$form->field('my_int_s')->value( -2147483648 );
is( $form->field('my_int_s')->validate, 0, 'int s -8388608 ok');
$form->set_values({ my_int_s => 2147483648 });
@rv = $form->field('my_int_s')->validate;
t/560_ints.t view on Meta::CPAN
$form->set_values({ my_int_s => 0 });
ok( not($form->validate->is_valid), 'int s 0 ok');
# INT U
is( $form->field('my_int_u')->field_type, 'number', 'class');
$form->field('my_int_u')->value( 'a test string' );
@rv = $form->field('my_int_u')->validate;
like( $rv[0], qr'not a number', 'NaN');
$form->field('my_int_u')->value( 4294967296 );
@rv = $form->field('my_int_u')->validate;
like( $rv[0], qr'higher');
$form->field('my_int_u')->value( 4294967295 );
is( $form->field('my_int_u')->validate, 0, 'int u 255 ok' );
$form->field('my_int_u')->value( -1 );
@rv = $form->field('my_int_u')->validate;
t/560_ints.t view on Meta::CPAN
# BIGINT S
is( $form->field('my_bigint_s')->field_type, 'Text', 'class');
$form->field('my_bigint_s')->value( 'a test string' );
like(
$form->validate->error_fields->{'my_bigint_s'}->[0],
qr'invalid',
'NaN'
) or explain $form->validate->error_fields->{'my_bigint_s'};
$form->field('my_bigint_s')->value( -9223372036854775809 );
is( $form->field('my_bigint_s')->value, -9223372036854775809, 'big int signed');
TODO: {
local $TODO = 'Error messages vary between versions of Form::Sensible';
# http://www.cpantesters.org/cpan/report/3af9e5c6-520e-11e0-8a1e-03415704ce1c
like(
$form->validate->error_fields->{'my_bigint_s'}->[0],
t/560_ints.t view on Meta::CPAN
ok( not($form->validate->is_valid), 'bigint s 0 ok');
# BIGINT U
is( $form->field('my_bigint_u')->field_type, 'Text', 'class');
$form->field('my_bigint_u')->value( 'a test string' );
like(
$form->validate->error_fields->{'my_bigint_u'}->[0],
qr'invalid',
'a test string is NaN'
);
$form->field('my_bigint_u')->value( 18446744073709551616 );
like(
$form->validate->error_fields->{'my_bigint_u'}->[0],
qr'higher',
'exceeds big int u upper bounds'
);
$form->field('my_bigint_u')->value( 255 );