public function test_add_subsection__weird_subsection_names()
 {
     $grandparent_form = new EE_Form_Section_Proper(array('name' => 'grandparent', 'subsections' => array('123-reg-money' => new EE_Form_Section_Proper(array('subsections' => array('!0!a77y-bad`string' => new EE_Text_Input()))))));
     $grandparent_form->add_subsections(array('new_one' => new EE_Text_Input()));
     $added_input = $grandparent_form->get_input('new_one');
     $this->assertInstanceOf('EE_Text_Input', $added_input);
     $this->assertEquals('new_one', $added_input->name());
     $this->assertEquals('grandparent[new_one]', $added_input->html_name());
     $grandparent_form->add_subsections(array(12 => new EE_Text_Input()));
     $other_added_input = $grandparent_form->get_input(12);
     $this->assertInstanceOf('EE_Text_Input', $other_added_input);
 }
 /**
  * @group 7121
  */
 public function test_normalized_value_int()
 {
     $form = new EE_Form_Section_Proper(array('name' => 'test', 'subsections' => array('use_captcha' => new EE_Radio_Button_Input(array(1 => __('Yes', 'event_espresso'), 0 => __('No', 'event_espresso')), array('html_label_text' => __('Use reCAPTCHA', 'event_espresso'), 'default' => isset(EE_Registry::instance()->CFG->registration->use_captcha) ? EE_Registry::instance()->CFG->registration->use_captcha : FALSE, 'normalization_strategy' => new EE_Int_Normalization())))));
     $form->receive_form_submission(array('test' => array('use_captcha' => '1')));
     $this->assertTrue($form->is_valid());
     $this->assertTrue(1 === $form->get_input('use_captcha')->normalized_value());
     $this->assertTrue('1' === $form->get_input('use_captcha')->raw_value());
     $form->receive_form_submission(array('test' => array('use_captcha' => '0')));
     $this->assertTrue($form->is_valid());
     $this->assertTrue(0 === $form->get_input('use_captcha')->normalized_value());
     $this->assertTrue('0' === $form->get_input('use_captcha')->raw_value());
 }
    public function test_display_flat_array()
    {
        $form = new EE_Form_Section_Proper(array('name' => 'form', 'subsections' => array('input1' => new EE_Checkbox_Multi_Input(array('foo' => 'Foo', 'bar' => 'Bar', "baz'em" => 'Baz')))));
        $input = $form->get_input('input1');
        $expected_output = '
<label for="form-input1-foo" id="form-input1-foo-lbl" class="ee-checkbox-label-after micro-lbl">
	<input type="checkbox" name="form[input1][]" id="form-input1-foo" class="" style="" value="foo">&nbsp;Foo
</label>
<label for="form-input1-bar" id="form-input1-bar-lbl" class="ee-checkbox-label-after micro-lbl">
	<input type="checkbox" name="form[input1][]" id="form-input1-bar" class="" style="" value="bar">&nbsp;Bar
</label>
<label for="form-input1-bazem" id="form-input1-bazem-lbl" class="ee-checkbox-label-after micro-lbl">
	<input type="checkbox" name="form[input1][]" id="form-input1-bazem" class="" style="" value="baz&#039;em">&nbsp;Baz
</label>';
        $this->assertEquals($expected_output, $input->get_html_for_input());
        //now if we set the default, does it get selected?
        $form->populate_defaults(array('input1' => array("baz'em", 'bar')));
        $this->assertEquals(array("baz'em", 'bar'), $input->normalized_value());
        $this->assertEquals(array("baz'em", 'bar'), $input->raw_value());
        $expected_output2 = '
<label for="form-input1-foo" id="form-input1-foo-lbl" class="ee-checkbox-label-after micro-lbl">
	<input type="checkbox" name="form[input1][]" id="form-input1-foo" class="" style="" value="foo">&nbsp;Foo
</label>
<label for="form-input1-bar" id="form-input1-bar-lbl" class="ee-checkbox-label-after micro-lbl">
	<input type="checkbox" name="form[input1][]" id="form-input1-bar" class="" style="" value="bar" checked="checked">&nbsp;Bar
</label>
<label for="form-input1-bazem" id="form-input1-bazem-lbl" class="ee-checkbox-label-after micro-lbl">
	<input type="checkbox" name="form[input1][]" id="form-input1-bazem" class="" style="" value="baz&#039;em" checked="checked">&nbsp;Baz
</label>';
        $this->assertEquals($expected_output2, $input->get_html_for_input());
    }
    /**
     * @group 7121
     */
    function test_display__normalizing_as_string()
    {
        $form = new EE_Form_Section_Proper(array('name' => 'test', 'subsections' => array('use_captcha' => new EE_Radio_Button_Input(array("yes ma'am" => __('Yes', 'event_espresso'), "no ma'am" => __('No', 'event_espresso')), array('html_label_text' => __('Use reCAPTCHA', 'event_espresso'), 'default' => "yes ma'am")))));
        $this->assertEquals("yes ma'am", $form->get_input('use_captcha')->normalized_value());
        $this->assertEquals("yes ma'am", $form->get_input('use_captcha')->raw_value());
        $this->assertEquals('
<label for="test-use-captcha-yesmaam" id="test-use-captcha-yesmaam-lbl" class="ee-radio-label-after micro-lbl">
	<input id="test-use-captcha-yesmaam" name="test[use_captcha]" class="" style="" type="radio" value="yes ma&#039;am" checked="checked">&nbsp;Yes
</label>
<label for="test-use-captcha-nomaam" id="test-use-captcha-nomaam-lbl" class="ee-radio-label-after micro-lbl">
	<input id="test-use-captcha-nomaam" name="test[use_captcha]" class="" style="" type="radio" value="no ma&#039;am">&nbsp;No
</label>
<div class="clear-float">
</div>', $form->get_input('use_captcha')->get_html_for_input());
        $form->populate_defaults(array('use_captcha' => "no ma'am"));
        //the first option should be selected now
        $this->assertEquals("no ma'am", $form->get_input('use_captcha')->normalized_value());
        $this->assertEquals("no ma'am", $form->get_input('use_captcha')->raw_value());
        $this->assertEquals('
<label for="test-use-captcha-yesmaam" id="test-use-captcha-yesmaam-lbl" class="ee-radio-label-after micro-lbl">
	<input id="test-use-captcha-yesmaam" name="test[use_captcha]" class="" style="" type="radio" value="yes ma&#039;am">&nbsp;Yes
</label>
<label for="test-use-captcha-nomaam" id="test-use-captcha-nomaam-lbl" class="ee-radio-label-after micro-lbl">
	<input id="test-use-captcha-nomaam" name="test[use_captcha]" class="" style="" type="radio" value="no ma&#039;am" checked="checked">&nbsp;No
</label>
<div class="clear-float">
</div>', $form->get_input('use_captcha')->get_html_for_input());
    }
 function test_many_valued()
 {
     //create a form with radio button in it.
     $form = new EE_Form_Section_Proper(array('name' => 'test1', 'subsections' => array('checkbox1' => new EE_Checkbox_Multi_Input(array('option1' => 'Option 1', 'option2' => 'Option 2')))));
     $checkbox = $form->get_input('checkbox1');
     //that radio button's normalization strategy is correct
     $this->assertInstanceOf('EE_Checkbox_Multi_Input', $checkbox);
     $this->assertInstanceOf('EE_Many_Valued_Normalization', $checkbox->get_normalization_strategy());
     //and that when it receives input, it sets it correctly
     $form->receive_form_submission(array('checkbox1' => array('option1')));
     $this->assertTrue($form->is_valid());
     $form->receive_form_submission(array('checkbox1' => array('option_nonexistent')));
     $this->assertFalse($form->is_valid());
     $form->receive_form_submission(array('checkbox1' => 'option1'));
     $this->assertTrue($form->is_valid());
     $form->receive_form_submission(array('checkbox1' => 'option_nonexistent'));
     $this->assertFalse($form->is_valid());
 }
    public function test_display_flat_array()
    {
        $form = new EE_Form_Section_Proper(array('name' => 'form', 'subsections' => array('input1' => new EE_Select_Multiple_Input(array('foo' => 'Foo', 'bar' => 'Bar', "baz'em" => 'Baz')))));
        $input = $form->get_input('input1');
        $expected_output = '
<select multiple id="form-input1" name="form[input1][]" class="" style="">
	<option value="foo">Foo</option>
	<option value="bar">Bar</option>
	<option value="baz&#039;em">Baz</option>
</select>';
        $this->assertEquals($expected_output, $input->get_html_for_input());
        //now if we set the default, does it get selected?
        $form->populate_defaults(array('input1' => array("baz'em", 'bar')));
        $this->assertEquals(array("baz'em", 'bar'), $input->normalized_value());
        $this->assertEquals(array("baz'em", 'bar'), $input->raw_value());
        $expected_output2 = '
<select multiple id="form-input1" name="form[input1][]" class="" style="">
	<option value="foo">Foo</option>
	<option value="bar" selected="selected">Bar</option>
	<option value="baz&#039;em" selected="selected">Baz</option>
</select>';
        $this->assertEquals($expected_output2, $input->get_html_for_input());
    }