#!/usr/local/bin/perl -w use strict; use Test::More tests => 72; BEGIN { use_ok('Rose::HTML::Form::Field::Option'); use_ok('Rose::HTML::Form::Field::PopUpMenu'); } my $field = Rose::HTML::Form::Field::PopUpMenu->new(name => 'fruits'); ok(ref $field eq 'Rose::HTML::Form::Field::PopUpMenu', 'new()'); is(scalar @{ $field->children }, 0, 'children scalar 1'); is(scalar(() = $field->children), 0, 'children list 1'); $field->options(apple => 'Apple', orange => 'Orange', grape => 'Grape'); is(scalar @{ $field->children }, 3, 'children scalar 2'); is(scalar(() = $field->children), 3, 'children list 2'); is($field->is_empty, 1, 'is_empty 1'); is(join(',', sort $field->labels), 'Apple,Grape,Orange,apple,grape,orange', 'labels()'); $field->error('bar'); $field->clear; ok(!defined $field->error, 'clear error'); $field->error('foo'); $field->reset; ok(!defined $field->error, 'reset error'); is($field->html_field, qq(), 'html_field() 1'); is($field->value_label('apple'), 'Apple', 'label()'); $field->option('apple')->label('Apple'); $field->escape_html(0); is($field->html_field, qq(), 'escape_html() 1'); $field->escape_html(1); is($field->html_field, qq(), 'escape_html() 1'); $field->option('apple')->label('Apple'); $field->default('apple'); is($field->html_field, qq(), 'default()'); $field->value('orange'); is(($field->input_value)[0], 'orange', 'input_value()'); is(($field->internal_value)[0], 'orange', 'internal_value() 1'); is($field->internal_value, 'orange', 'internal_value() 2'); is(($field->output_value)[0], 'orange', 'output_value()'); is($field->html_field, qq(), 'value() 1'); is($field->is_empty, 0, 'is_empty 2'); $field->error("Do not pick orange!"); is($field->html, qq(
\n) . qq(Do not pick orange!), 'html()'); is($field->xhtml, qq(
\n) . qq(Do not pick orange!), 'html()'); $field->error(undef); ok($field->is_selected('orange'), 'is_selected() 1'); ok(!$field->is_selected('apple'), 'is_selected() 2'); ok(!$field->is_selected('foo'), 'is_selected() 3'); ok($field->has_value('orange'), 'has_value() 1'); ok(!$field->has_value('apple'), 'has_value() 2'); ok(!$field->has_value('foo'), 'has_value() 3'); $field->add_options(pear => 'Pear', berry => 'Berry'); is($field->html_field, qq(), 'add_options() hash'); $field->add_options(Rose::HTML::Form::Field::Option->new(value => 'squash', label => 'Squash'), Rose::HTML::Form::Field::Option->new(value => 'cherry', label => 'Cherry')); is($field->html_field, qq(), 'add_options() objects'); is($field->html_hidden_field, qq(), 'html_hidden_field()'); is($field->html_hidden_fields, qq(), 'html_hidden_fields()'); is(join("\n", map { $_->html } $field->hidden_field), qq(), 'hidden_field()'); is(join("\n", map { $_->html } $field->hidden_fields), qq(), 'hidden_fields()'); $field->clear; is($field->html_field, qq(), 'clear()'); $field->reset; is($field->html_field, qq(), 'reset()'); $field->input_value('apple'); is($field->html_field, qq(), 'input_value() 2'); eval { $field->input_value([ 'apple', 'cherry' ]) }; ok($@, 'multiple values'); my $id = ref($field)->localizer->add_localized_message( name => 'ORANGE_LABEL', text => { en => 'Orange EN', xx => 'Le Orange', }); $field->option('orange')->label_id($id); is($field->option('orange')->label->as_string, 'Orange EN', 'localized label 1'); is($field->html_field, qq(), 'localized label 2'); $field->localizer->locale('xx'); is($field->option('orange')->label->as_string, 'Le Orange', 'localized label 3'); is($field->html_field, qq(), 'localized label 4'); $field->localizer->locale('en'); $field->locale('xx'); is($field->option('orange')->label->as_string, 'Le Orange', 'localized label 3.1'); is($field->html_field, qq(), 'localized label 4.1'); $field->localizer->locale('xx'); $field->locale(undef); $field->labels({ cherry => 'CHERRY', squash => 'SQUASH' }); $field->label_ids(grape => $id); is($field->option('grape')->label->as_string, 'Le Orange', 'localized label 4'); is($field->html_field, qq(), 'localized label 5'); $field->clear_labels; is($field->html_field, qq(), 'clear labels 1'); $field->option('grape')->hidden(1); is($field->html_field, qq(), 'hidden 1'); is($field->xhtml_field, qq(), 'hidden 2'); $field->option('grape')->hidden(0); $field->reset_labels; is($field->html_field, qq(), 'reset labels 1'); $field->disabled(1); $field = Rose::HTML::Form::Field::PopUpMenu->new(name => 'fruits'); $field->options(apple => 'Apple', orange => 'Orange', grape => 'Grape'); my $group = Rose::HTML::Form::Field::OptionGroup->new(label => 'Others'); $group->options(juji => 'Juji', peach => 'Peach'); $field->add_options($group); my $field2 = Rose::HTML::Form::Field::PopUpMenu->new( name => 'fruits', options => [ apple => 'Apple', orange => 'Orange', grape => 'Grape', Others => [ juji => { label => 'Juji' }, peach => { label => 'Peach' }, ], ]); is($field->xhtml, $field2->xhtml, 'nested option group 1'); is($field->html_field, qq(), 'hidden 3'); is($field->xhtml_field, qq(), 'hidden 4'); $group->option('juji')->hide; is($field->xhtml_field, qq(), 'hidden 4.1'); $group->option('juji')->show; $field->option('peach')->hide; is($field->xhtml_field, qq(), 'hidden 4.2'); $group->option('peach')->show; $group->hidden(1); is($field->html_field, qq(), 'hidden 5'); is($field->xhtml_field, qq(), 'hidden 6'); $field->show_all_options; $field->delete_option('grape'); is($field->html_field, qq(), 'delete 1'); $field->delete_options('grape', 'peach', 'orange'); is($field->html_field, qq(), 'delete 2'); $field->delete_option_group('Others', 'nonesuch'); is($field->html_field, qq(), 'delete 3'); $field = Rose::HTML::Form::Field::PopUpMenu->new(name => 'fruits'); $field->options(apple => 'Apple', orange => 'Orange', grape => 'Grape'); my $i = 1; foreach my $name (qw(items options)) { my $method = "${name}_html_attr"; $field->$method(class => 'bar'); is($field->xhtml_field, qq(), "$method " . $i++); is($field->$method('class'), 'bar', "$method " . $i++); $method = "delete_${name}_html_attr"; $field->$method('class'); is($field->xhtml_field, qq(), "$method " . $i++); } $field->add_option(''); $field->input_value('apple'); is($field->is_empty, 0, 'is_empty 3'); $field->input_value(''); $field->clear; is($field->is_empty, 1, 'is_empty 4'); is(scalar $field->internal_value, undef, 'undef internal value'); $field->input_value('orange'); is(scalar $field->internal_value, 'orange', 'orange internal value');