Chandra
view release on metacpan or search on metacpan
t/59_form.t view on Meta::CPAN
{
my $f = Chandra::Form->new(id => 'f9');
$f->range('vol', { label => 'Volume', min => 0, max => 100, value => 75 });
my $html = $f->render;
like($html, qr/type="range"/, 'range type');
like($html, qr/min="0"/, 'min');
like($html, qr/max="100"/, 'max');
like($html, qr/value="75"/, 'value');
}
# ---- hidden() ----
{
my $f = Chandra::Form->new(id => 'f10');
$f->hidden('token', { value => 'abc123' });
my $html = $f->render;
like($html, qr/type="hidden"/, 'hidden type');
like($html, qr/value="abc123"/, 'hidden value');
unlike($html, qr/<label[^>]*for="f10-token"/, 'no label for hidden');
}
# ---- submit() ----
{
my $f = Chandra::Form->new(id => 'f11');
$f->text('name', { label => 'Name' });
$f->submit('Save');
my $html = $f->render;
like($html, qr/<button type="submit"[^>]*>Save<\/button>/, 'submit button');
like($html, qr/chandra-submit/, 'submit class');
}
# ---- Default submit label ----
{
my $f = Chandra::Form->new(id => 'f12');
$f->text('x', {});
my $html = $f->render;
like($html, qr/>Submit<\/button>/, 'default submit label');
}
# ---- Chaining ----
{
my $f = Chandra::Form->new(id => 'chain');
my $result = $f->text('a', {})->password('b', {})->email('c', {})->submit('Go');
is($result, $f, 'all methods chain');
is($f->field_count, 3, '3 fields after chain');
}
# ---- group() ----
{
my $f = Chandra::Form->new(id => 'grp');
$f->text('name', { label => 'Name' });
$f->group('Appearance' => sub {
$f->select('theme', {
label => 'Theme',
options => [{ value => 'dark', label => 'Dark' }],
});
$f->number('font', { label => 'Font Size' });
});
$f->text('other', { label => 'Other' });
my $html = $f->render;
like($html, qr/<fieldset class="chandra-group">/, 'fieldset rendered');
like($html, qr/<legend>Appearance<\/legend>/, 'legend rendered');
like($html, qr/<\/fieldset>/, 'fieldset closed');
}
# ---- bind_js() ----
{
my $f = Chandra::Form->new(id => 'js-test');
my $js = $f->bind_js;
like($js, qr/js-test/, 'JS contains form id');
like($js, qr/addEventListener/, 'JS has event listener');
like($js, qr/submit/, 'JS handles submit');
like($js, qr/change/, 'JS handles change');
like($js, qr/_form_submit/, 'JS invokes _form_submit');
}
# ---- set_values_js() ----
{
my $f = Chandra::Form->new(id => 'sv-test');
my $js = $f->set_values_js({ name => 'bob', age => 30 });
like($js, qr/sv-test/, 'set_values JS has form id');
like($js, qr/bob/, 'JS contains value');
}
# ---- get_values_js() ----
{
my $f = Chandra::Form->new(id => 'gv-test');
my $js = $f->get_values_js;
like($js, qr/gv-test/, 'get_values JS has form id');
like($js, qr/_form_values/, 'JS invokes _form_values');
}
# ---- show_errors_js() ----
{
my $f = Chandra::Form->new(id => 'err-test');
$f->text('username', {});
my $js = $f->show_errors_js({ username => 'Required' });
like($js, qr/err-test-username/, 'error JS has field id');
like($js, qr/Required/, 'error message in JS');
}
# ---- clear_errors_js() ----
{
my $f = Chandra::Form->new(id => 'clr-test');
my $js = $f->clear_errors_js;
like($js, qr/clr-test/, 'clear JS has form id');
like($js, qr/chandra-error/, 'targets error spans');
}
# ---- on_change() global ----
{
my $f = Chandra::Form->new(id => 'oc1');
my @changes;
$f->on_change(sub { push @changes, [@_] });
ok(1, 'global on_change registered');
}
# ---- on_change() field-specific ----
{
my $f = Chandra::Form->new(id => 'oc2');
my $theme_val;
$f->on_change('theme', sub { $theme_val = $_[0] });
( run in 1.471 second using v1.01-cache-2.11-cpan-2398b32b56e )