Rose-HTML-Objects

 view release on metacpan or  search on metacpan

t/form-nested.t  view on Meta::CPAN

is($field->name, 'person_address.person.bday.month', 'person_address.person.bday.month verify 2');

is($field, $person_form->field('bday.month'), 'person_address.person.bday.month 1');
is($field, $person_form->field('bday')->field('month'), 'person_address.person.bday.month 2');

is($field, $form->form('person_address')->field('person.bday.month'), 'person_address.person.bday.month 3');
is($field, $form->form('person_address')->field('person.bday')->field('month'), 'person_address.person.bday.month 4');
is($field, $form->form('person_address')->form('person')->field('bday.month'), 'person_address.person.bday.month 5');
is($field, $form->form('person_address')->form('person')->field('bday')->field('month'), 'person_address.person.bday.month 6');
is($field, $form->form('person_address.person')->field('bday.month'), 'person_address.person.bday.month 7');
is($field, $form->form('person_address.person')->field('bday')->field('month'), 'person_address.person.bday.month 8');
is($field, $form->form('person_address.person')->field('bday.month'), 'person_address.person.bday.month 9');
is($field, $form->form('person_address.person')->field('bday')->field('month'), 'person_address.person.bday.month 10');

@fields =
  qw(dog person_address.person.age person_address.person.bday
     person_address.person.gender person_address.person.your_name
     person_address.person.start person_address.address.city 
     person_address.address.your_state person_address.address.street
     person_address.address.zip);

is_deeply(scalar $form->field_monikers, \@fields, 'field_names() nested');

@fields = 
  qw(dog person_address.person.age person_address.person.bday
     person_address.person.gender person_address.person.name
     person_address.person.start person_address.address.city 
     person_address.address.state person_address.address.street
     person_address.address.zip);

is_deeply([ map { $_->name } $form->fields ], \@fields, 'fields() name nested');

$form->params(
{
  'dog'                           => 'Woof',
  'person_address.person.name'    => 'John', 
  'person_address.person.age'     => ' 10 ', 
  'person_address.person.gender'  => 'm', 
  'person_address.person.bday'    => '1/2/1983',
  'person_address.address.street' => '1 Main St.', 
  'person_address.address.city'   => 'Smithtown', 
  'person_address.address.state'  => ' NY ', 
  'person_address.address.zip'    => 11787  
});

$form->init_fields;

is($form->field('dog')->internal_value, 'Woof', 'person_address_dog dog 1');
is($form->field('person_address.person.name')->internal_value, 'John', 'person_address_dog name 1');

is($form->field('person_address.person.age')->internal_value, '10', 'person_address_dog age 1');
is($form->field('person_address.person.gender')->internal_value, 'm', 'person_address_dog gender 1');
is($form->field('person_address.person.bday')->internal_value->strftime('%Y-%m-%d'), '1983-01-02', 'person_address_dog bday 1');

is($form->field('person_address.address.street')->internal_value, '1 Main St.', 'person_address_dog street 1');
is($form->field('person_address.address.city')->internal_value, 'Smithtown', 'person_address_dog city 1');
is($form->field('person_address.address.state')->internal_value, 'NY', 'person_address_dog state 1');
is($form->field('person_address.address.zip')->internal_value, '11787', 'person_address_dog zip 1');

ok($person_address_form->validate, 'validate() 1');
ok($person_address_form->validate(cascade => 0), 'validate() 2');

$person_address_form->field('person_address.address.zip')->input_value(666);

ok(!$person_address_form->validate, 'validate() 3');
ok($person_address_form->validate(cascade => 0), 'validate() 4');

$person_address_form->field('person_address.address.zip')->input_value(11787);

$person = $form->person_from_form;

is(ref $person, 'MyPerson', 'person_from_form 3');
is($person->name, 'John', 'person name 3');
is($person->age, '10', 'person age 3');
is($person->gender, 'm', 'person gender 3');
is($person->bday->strftime('%Y-%m-%d'), '1983-01-02', 'person bday 3');

$address = $form->address_from_form;

is(ref $address, 'MyAddress', 'address_from_form 3');
is($address->street, '1 Main St.', 'address street 3');
is($address->city, 'Smithtown', 'address city 3');
is($address->state, 'NY', 'address state 3');
is($address->zip, 11787, 'address zip 3');

$form->field('person_address.person.bday.day')->input_value(7);

$person = $form->person_from_form;

is($person->bday->strftime('%Y-%m-%d'), '1983-01-07', 'person bday change 1');

$form->params(
{
  'dog'                           => 'Woof',
  'person_address.person.name'    => 'John', 
  'person_address.person.age'     => ' 10 ', 
  'person_address.person.gender'  => 'm', 
  'person_address.person.bday'    => '1/2/1983',
  'person_address.address.street' => '1 Main St.', 
  'person_address.address.city'   => 'Smithtown', 
  'person_address.address.state'  => ' NY ', 
  'person_address.address.zip'    => 11787,
  'person_address.person.start'   => '2/3/2004 1:23pm',
});

$form->init_fields;

is($form->field('person_address.person.start')->internal_value->strftime('%Y-%m-%d %H:%M:%S'), '2004-02-03 13:23:00', 'person_address_dog start 1');

$person = $form->person_from_form;
is($person->start->strftime('%Y-%m-%d %H:%M:%S'), '2004-02-03 13:23:00', 'person start 1');

$field = $form->field('person_address.person.start.time.ampm');
$person_form  = $form->form('person_address.person');
$address_form = $form->form('person_address.address');

is(ref $field, 'Rose::HTML::Form::Field::PopUpMenu', 'person_address.person.start.time.ampm verify 1');
is($field->name, 'person_address.person.start.time.ampm', 'person_address.person.start.time.ampm verify 2');

is($field, $person_form->field('start.time.ampm'), 'person_address.person.start.time.ampm 1');
is($field, $person_form->field('start')->field('time')->field('ampm'), 'person_address.person.start.time.ampm 2');

is($field, $form->form('person_address')->field('person.start.time')->field('ampm'), 'person_address.person.start.time.ampm 3');
is($field, $form->form('person_address')->field('person.start')->field('time.ampm'), 'person_address.person.start.time.ampm 4');
is($field, $form->form('person_address')->form('person')->field('start.time.ampm'), 'person_address.person.start.time.ampm 5');
is($field, $form->form('person_address')->form('person')->field('start')->field('time')->field('ampm'), 'person_address.person.start.time.ampm 6');

t/form-nested.t  view on Meta::CPAN

   qq(</select>),
   'pa.p.st.time.ampm html 2');

#
# Check nested set
#

# Set nested form from the top-level
my $w_form = Rose::HTML::Form->new;
my $x_form = Rose::HTML::Form->new;
my $y_form = Rose::HTML::Form->new;
my $z_form = Rose::HTML::Form->new;

is(scalar @{ $w_form->children }, 0, 'children scalar 1');
is(scalar(() = $w_form->children), 0, 'children list 1');

$w_form->add_form('x' => $x_form);
$x_form->add_form('y' => $y_form);

is(scalar @{ $w_form->children }, 0, 'children scalar 2');
is(scalar(() = $w_form->children), 0, 'children list 2');

# Add $z_form to $w_form->form('x')->form('y') under the name 'z'
$w_form->add_form('x.y.z' => $z_form);

is($z_form, $w_form->form('x')->form('y')->form('z'), 'nested set 1');

# Test a nested field with the same name as a field in the parent

my $f1 = Rose::HTML::Form->new();

$f1->add_fields
(
  id => { type => 'int' },
);

my $f2 = Rose::HTML::Form->new();

$f2->add_fields
(
  id => { type => 'text' },
);

$f1->add_form(f2 => $f2);

is(join(',', sort map { $_->name } $f1->fields), 'f2.id,id', 'nested same-name fields');

$form = Rose::HTML::Form->new;
$form->add_field(foo => { type => 'text' });

my $subform = Rose::HTML::Form->new;
$subform->add_field(bar => { type => 'text' });

$form->add_form(sub => $subform);
#local $Rose::HTML::Form::Debug = 1;
# Call validate() on fields "foo" and "sub.bar" and
# call validate(form_only => 1) on the sub-form "sub"
$form->validate;
#print STDERR "---\n";
# Same as above
$form->validate(cascade => 1);
#print STDERR "---\n";
# Call validate() on fields "foo" and "sub.bar"
$form->validate(cascade => 0);
#print STDERR "---\n";
# Call validate(form_only => 1) on the sub-form "sub"
$form->validate(form_only => 1);
#print STDERR "---\n";
# Don't call validate() on any fields or sub-forms
$form->validate(form_only => 1, cascade => 0);

# no warnings 'redefine';
# *MyAddressForm::validate = sub
# {
#   my($self) = shift;
#   $self->field('street')->error('Blah');
#   $self->Rose::HTML::Form::validate(@_);
# };

$form = MyPersonAddressForm->new;

$form->add_field(x => { type => 'text' });
$form->validate();

is($form->field('address.street')->error, 'Blah', 'nested validate');

$f1 = Rose::HTML::Form->new;
$f2 = Rose::HTML::Form->new;

$f2->add_fields
(
  bar =>
  {
    type    => 'radio group',
    choices => [ 'Yes', 'No' ],
  },
);

$f1->add_form(subform => $f2);

is(join("\n", map { $_->html } $f1->fields),
   qq(<input name="subform.bar" type="radio" value="Yes"> <label>Yes</label><br>\n) .
   qq(<input name="subform.bar" type="radio" value="No"> <label>No</label>),
   'nested grouped fields 1');

#
# Modifying nested fields
#

my $f = MyPersonForm->new;

$f->add_form(n => MyPersonForm->new);

is(join(', ', map { $_->name } $f->fields), 'age, bday, gender, name, start, n.age, n.bday, n.gender, n.name, n.start', 'nested modification 1');

$f->form('n')->add_field('new' => { type => 'text' });

is(join(', ', map { $_->name } $f->fields), 'age, bday, gender, name, start, n.age, n.bday, n.gender, n.name, n.new, n.start', 'nested modification 2');

#
# local_fields()
#

$form = MyPersonAddressDogForm->new;

is(join(' ', map { $_->name } sort { $a->name cmp $b->name } $form->local_fields), 'dog', 'local fields 1');

$form->add_field(bar => { type => 'text' });

is(join(' ', map { $_->name } sort { $a->name cmp $b->name } $form->local_fields), 'bar dog', 'local fields 2');



( run in 0.675 second using v1.01-cache-2.11-cpan-13bb782fe5a )