form_test.module in SimpleTest 7
Helper module for the form API tests.
File
tests/form_test.moduleView source
<?php
/**
* @file
* Helper module for the form API tests.
*/
/**
* Implement hook_menu().
*/
function form_test_menu() {
$items['form_test/tableselect/multiple-true'] = array(
'title' => 'Tableselect checkboxes test',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'_form_test_tableselect_multiple_true_form',
),
'access arguments' => array(
'access content',
),
'type' => MENU_CALLBACK,
);
$items['form_test/tableselect/multiple-false'] = array(
'title' => 'Tableselect radio button test',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'_form_test_tableselect_multiple_false_form',
),
'access arguments' => array(
'access content',
),
'type' => MENU_CALLBACK,
);
$items['form_test/tableselect/empty-text'] = array(
'title' => 'Tableselect empty text test',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'_form_test_tableselect_empty_form',
),
'access arguments' => array(
'access content',
),
'type' => MENU_CALLBACK,
);
$items['form_test/tableselect/advanced-select'] = array(
'title' => 'Tableselect js_select tests',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'_form_test_tableselect_js_select_form',
),
'access arguments' => array(
'access content',
),
'type' => MENU_CALLBACK,
);
$items['form_test/drupal_form_submit_batch_api'] = array(
'title' => 'BatchAPI Drupal_form_submit tests',
'page callback' => 'form_test_drupal_form_submit_batch_api',
'access arguments' => array(
'access content',
),
'type' => MENU_CALLBACK,
);
$items['form_test/form-storage'] = array(
'title' => 'Form storage test',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'form_storage_test_form',
),
'access arguments' => array(
'access content',
),
'type' => MENU_CALLBACK,
);
$items['form_test/wrapper-callback'] = array(
'title' => 'Form wrapper callback test',
'page callback' => 'form_test_wrapper_callback',
'page arguments' => array(
'form_test_wrapper_callback_form',
),
'access arguments' => array(
'access content',
),
'type' => MENU_CALLBACK,
);
$items['form_test/form-state-values-clean'] = array(
'title' => 'Form state values clearance test',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'form_test_form_state_values_clean_form',
),
'access arguments' => array(
'access content',
),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Create a header and options array. Helper function for callbacks.
*/
function _form_test_tableselect_get_data() {
$header = array(
'one' => t('One'),
'two' => t('Two'),
'three' => t('Three'),
'four' => t('Four'),
);
$options['row1'] = array(
'one' => 'row1col1',
'two' => t('row1col2'),
'three' => t('row1col3'),
'four' => t('row1col4'),
);
$options['row2'] = array(
'one' => 'row2col1',
'two' => t('row2col2'),
'three' => t('row2col3'),
'four' => t('row2col4'),
);
$options['row3'] = array(
'one' => 'row3col1',
'two' => t('row3col2'),
'three' => t('row3col3'),
'four' => t('row3col4'),
);
return array(
$header,
$options,
);
}
/**
* Build a form to test the tableselect element.
*
* @param $form_state
* The form_state
* @param $element_properties
* An array of element properties for the tableselect element.
*
* @return
* A form with a tableselect element and a submit button.
*/
function _form_test_tableselect_form_builder($form, $form_state, $element_properties) {
list($header, $options) = _form_test_tableselect_get_data();
$form['tableselect'] = $element_properties;
$form['tableselect'] += array(
'#type' => 'tableselect',
'#header' => $header,
'#options' => $options,
'#multiple' => FALSE,
'#empty' => t('Empty text.'),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
return $form;
}
/**
* Test the tableselect #multiple = TRUE functionality.
*/
function _form_test_tableselect_multiple_true_form($form, $form_state) {
return _form_test_tableselect_form_builder($form, $form_state, array(
'#multiple' => TRUE,
));
}
/**
* Process the tableselect #multiple = TRUE submitted values.
*/
function _form_test_tableselect_multiple_true_form_submit($form, &$form_state) {
$selected = $form_state['values']['tableselect'];
foreach ($selected as $key => $value) {
drupal_set_message(t('Submitted: @key = @value', array(
'@key' => $key,
'@value' => $value,
)));
}
}
/**
* Test the tableselect #multiple = FALSE functionality.
*/
function _form_test_tableselect_multiple_false_form($form, $form_state) {
return _form_test_tableselect_form_builder($form, $form_state, array(
'#multiple' => FALSE,
));
}
/**
* Process the tableselect #multiple = FALSE submitted values.
*/
function _form_test_tableselect_multiple_false_form_submit($form, &$form_state) {
drupal_set_message(t('Submitted: @value', array(
'@value' => $form_state['values']['tableselect'],
)));
}
/**
* Test functionality of the tableselect #empty property.
*/
function _form_test_tableselect_empty_form($form, $form_state) {
return _form_test_tableselect_form_builder($form, $form_state, array(
'#options' => array(),
));
}
/**
* Test functionality of the tableselect #js_select property.
*/
function _form_test_tableselect_js_select_form($form, $form_state, $action) {
switch ($action) {
case 'multiple-true-default':
$options = array(
'#multiple' => TRUE,
);
break;
case 'multiple-false-default':
$options = array(
'#multiple' => FALSE,
);
break;
case 'multiple-true-no-advanced-select':
$options = array(
'#multiple' => TRUE,
'#js_select' => FALSE,
);
break;
case 'multiple-false-advanced-select':
$options = array(
'#multiple' => FALSE,
'#js_select' => TRUE,
);
break;
}
return _form_test_tableselect_form_builder($form, $form_state, $options);
}
/**
* Page callback for the batch/drupal_form_submit interaction test.
*
* When called without any arguments we set up a batch that calls
* form_test_batch_callback. That function will submit a form using
* drupal_form_submit using the values specified in this function.
*
* The form's field test_value begins at 'initial_value', and is changed
* to 'form_submitted' when the form is submitted successfully. On
* completion this function is passed 'done' to complete the process.
*/
function form_test_drupal_form_submit_batch_api($arg = '') {
// If we're at the end of the batch process, return.
if ($arg == 'done') {
return t('Done');
}
// Otherwise set up the batch.
$batch['operations'] = array(
array(
'form_test_batch_callback',
array(
'form_submitted',
),
),
);
// Set the batch and process it.
batch_set($batch);
batch_process('form_test/drupal_form_submit_batch_api/done');
}
/**
* Submits form_test_mock_form using drupal_form_submit using the given $value.
*/
function form_test_batch_callback($value) {
$state['values']['test_value'] = $value;
drupal_form_submit('form_test_mock_form', $state);
}
/**
* A simple form with a textfield and submit button.
*/
function form_test_mock_form($form, $form_state) {
$form['test_value'] = array(
'#type' => 'textfield',
'#default_value' => 'initial_state',
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
return $form;
}
/**
* Form submission callback.
*
* Updates the variable 'form_test_mock_submit' to the submitted form value.
*/
function form_test_mock_form_submit($form, &$form_state) {
variable_set('form_test_mock_submit', $form_state['values']['test_value']);
}
/**
* A multistep form for testing the form storage.
*
* It uses two steps for editing a virtual "thing". Any changes to it are saved
* in the form storage and have to be present during any step. By setting the
* request parameter "cache" the form can be tested with caching enabled, as
* it would be the case, if the form would contain some #ajax callbacks.
*
* @see form_storage_test_form_submit().
*/
function form_storage_test_form($form, &$form_state) {
// Initialize
if (!isset($form_state['storage'])) {
if (empty($form_state['input'])) {
$_SESSION['constructions'] = 0;
}
// Put the initial thing into the storage
$form_state['storage'] = array(
'thing' => array(
'title' => 'none',
'value' => '',
),
);
$form_state['storage'] += array(
'step' => 1,
);
}
// Count how often the form is constructed
$_SESSION['constructions']++;
if ($form_state['storage']['step'] == 1) {
$form['title'] = array(
'#type' => 'textfield',
'#title' => 'title',
'#default_value' => $form_state['storage']['thing']['title'],
'#required' => TRUE,
);
$form['value'] = array(
'#type' => 'textfield',
'#title' => 'value',
'#default_value' => $form_state['storage']['thing']['value'],
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Continue',
);
}
else {
$form['body'] = array(
'#value' => 'This is the second step.',
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Save',
);
}
if (isset($_REQUEST['cache'])) {
// Manually activate caching, so we can test that the storage keeps working
// when it's enabled.
$form['#cache'] = TRUE;
}
return $form;
}
/**
* Multistep form submit callback.
*/
function form_storage_test_form_submit($form, &$form_state) {
if ($form_state['storage']['step'] == 1) {
$form_state['storage']['thing']['title'] = $form_state['values']['title'];
$form_state['storage']['thing']['value'] = $form_state['values']['value'];
}
else {
drupal_set_message("Title: " . check_plain($form_state['storage']['thing']['title']));
}
$form_state['storage']['step']++;
drupal_set_message("Form constructions: " . $_SESSION['constructions']);
}
/**
* Menu callback; Invokes a form builder function with a wrapper callback.
*/
function form_test_wrapper_callback($form_id) {
$form_state = array(
'args' => array(),
'wrapper_callback' => 'form_test_wrapper_callback_wrapper',
);
return drupal_build_form($form_id, $form_state);
}
/**
* Form wrapper for form_test_wrapper_callback_form().
*/
function form_test_wrapper_callback_wrapper($form, &$form_state) {
$form['wrapper'] = array(
'#markup' => 'Form wrapper callback element output.',
);
return $form;
}
/**
* Form builder for form wrapper callback test.
*/
function form_test_wrapper_callback_form($form, &$form_state) {
$form['builder'] = array(
'#markup' => 'Form builder element output.',
);
return $form;
}
/**
* Form builder for form_state_values_clean() test.
*/
function form_test_form_state_values_clean_form($form, &$form_state) {
// Build an example form containing multiple submit and button elements; not
// only on the top-level.
$form = array(
'#tree' => TRUE,
);
$form['foo'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
$form['bar'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
$form['beer'] = array(
'#type' => 'value',
'#value' => 1000,
);
$form['baz']['foo'] = array(
'#type' => 'button',
'#value' => t('Submit'),
);
$form['baz']['baz'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
$form['baz']['beer'] = array(
'#type' => 'value',
'#value' => 2000,
);
return $form;
}
/**
* Form submit handler for form_state_values_clean() test form.
*/
function form_test_form_state_values_clean_form_submit($form, &$form_state) {
form_state_values_clean($form_state);
drupal_json_output($form_state['values']);
exit;
}
Functions
Name | Description |
---|---|
form_storage_test_form | A multistep form for testing the form storage. |
form_storage_test_form_submit | Multistep form submit callback. |
form_test_batch_callback | Submits form_test_mock_form using drupal_form_submit using the given $value. |
form_test_drupal_form_submit_batch_api | Page callback for the batch/drupal_form_submit interaction test. |
form_test_form_state_values_clean_form | Form builder for form_state_values_clean() test. |
form_test_form_state_values_clean_form_submit | Form submit handler for form_state_values_clean() test form. |
form_test_menu | Implement hook_menu(). |
form_test_mock_form | A simple form with a textfield and submit button. |
form_test_mock_form_submit | Form submission callback. |
form_test_wrapper_callback | Menu callback; Invokes a form builder function with a wrapper callback. |
form_test_wrapper_callback_form | Form builder for form wrapper callback test. |
form_test_wrapper_callback_wrapper | Form wrapper for form_test_wrapper_callback_form(). |
_form_test_tableselect_empty_form | Test functionality of the tableselect #empty property. |
_form_test_tableselect_form_builder | Build a form to test the tableselect element. |
_form_test_tableselect_get_data | Create a header and options array. Helper function for callbacks. |
_form_test_tableselect_js_select_form | Test functionality of the tableselect #js_select property. |
_form_test_tableselect_multiple_false_form | Test the tableselect #multiple = FALSE functionality. |
_form_test_tableselect_multiple_false_form_submit | Process the tableselect #multiple = FALSE submitted values. |
_form_test_tableselect_multiple_true_form | Test the tableselect #multiple = TRUE functionality. |
_form_test_tableselect_multiple_true_form_submit | Process the tableselect #multiple = TRUE submitted values. |