Newer
Older
<?php
// $Id$
/**
* @file
* Helper module for the file tests.
Angie Byron
committed
*
* The caller is must call file_test_reset() to initializing this module before
* calling file_test_get_calls() or file_test_set_return().
*/
/**
Dries Buytaert
committed
* Implement hook_menu().
*/
function file_test_menu() {
$items['file-test/upload'] = array(
'title' => t('Upload test'),
'page callback' => 'drupal_get_form',
'page arguments' => array('_file_test_form'),
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
Dries Buytaert
committed
/**
* Implement hook_stream_wrappers().
*/
function file_test_stream_wrappers() {
return array(
'dummy' => array(
'name' => t('Dummy files'),
'class' => 'DrupalDummyStreamWrapper',
'description' => t('Dummy wrapper for simpletest.'),
),
);
}
/**
* Form to test file uploads.
*/
function _file_test_form(&$form_state) {
$form['file_test_upload'] = array(
'#type' => 'file',
'#title' => t('Upload an image'),
);
$form['file_test_replace'] = array(
'#type' => 'select',
'#title' => t('Replace existing image'),
'#options' => array(
FILE_EXISTS_RENAME => t('Appends number until name is unique'),
FILE_EXISTS_REPLACE => t('Replace the existing file'),
FILE_EXISTS_ERROR => t('Fail with an error'),
),
'#default_value' => FILE_EXISTS_RENAME,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
return $form;
}
/**
* Process the upload.
*/
function _file_test_form_submit(&$form, &$form_state) {
// Process the upload and validate that it is an image. Note: we're using the
// form value for the $replace parameter.
$file = file_save_upload('file_test_upload', array('file_validate_is_image' => array()), FALSE, $form_state['values']['file_test_replace']);
if ($file) {
$form_state['values']['file_test_upload'] = $file;
drupal_set_message(t('File @filepath was uploaded.', array('@filepath' => $file->filepath)));
drupal_set_message(t('You WIN!'));
}
elseif ($file === FALSE) {
drupal_set_message(t('Epic upload FAIL!'), 'error');
}
}
/**
* Reset/initialize the history of calls to the file_* hooks.
Angie Byron
committed
*
* @see the getter/setter functions file_test_get_calls() and file_test_reset().
*/
function file_test_reset() {
// Keep track of calls to these hooks
Angie Byron
committed
$results = array(
'load' => array(),
'validate' => array(),
'download' => array(),
'references' => array(),
'insert' => array(),
'update' => array(),
'copy' => array(),
'move' => array(),
'delete' => array(),
);
Angie Byron
committed
variable_set('file_test_results', $results);
Angie Byron
committed
// These hooks will return these values, @see file_test_set_return().
$return = array(
'validate' => array(),
'download' => NULL,
'references' => NULL,
);
Angie Byron
committed
variable_set('file_test_return', $return);
}
/**
Angie Byron
committed
* Get the arguments passed to invocation of a given hook since
* file_test_reset() was last called.
Angie Byron
committed
* @param $op
* One of the hook_file_* operations: 'load', 'validate', 'download',
Dries Buytaert
committed
* 'references', 'insert', 'update', 'copy', 'move', 'delete'.
Angie Byron
committed
* @returns
* Array of the parameters passed to each call.
* @see _file_test_log_call() and file_test_reset()
*/
function file_test_get_calls($op) {
Angie Byron
committed
$results = variable_get('file_test_results', array());
return $results[$op];
}
/**
* Get an array with the calls for all hooks.
*
* @return
* An array keyed by hook name ('load', 'validate', 'download',
* 'references', 'insert', 'update', 'copy', 'move', 'delete') with values
* being arrays of parameters passed to each call.
*/
function file_test_get_all_calls() {
return variable_get('file_test_results', array());
}
Angie Byron
committed
/**
* Store the values passed to a hook invocation.
*
* @param $op
* One of the hook_file_* operations: 'load', 'validate', 'download',
Dries Buytaert
committed
* 'references', 'insert', 'update', 'copy', 'move', 'delete'.
Angie Byron
committed
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
* @param $args
* Values passed to hook.
* @see file_test_get_calls() and file_test_reset()
*/
function _file_test_log_call($op, $args) {
$results = variable_get('file_test_results', array());
$results[$op][] = $args;
variable_set('file_test_results', $results);
}
/**
* Load the appropriate return value.
*
* @param $op
* One of the hook_file_[validate,download,references] operations.
* @return
* Value set by file_test_set_return().
* @see file_test_set_return() and file_test_reset().
*/
function _file_test_get_return($op) {
$return = variable_get('file_test_return', array($op => NULL));
return $return[$op];
}
/**
* Assign a return value for a given operation.
*
* @param $op
* One of the hook_file_[validate,download,references] operations.
* @param $value
* Value for the hook to return.
* @see _file_test_get_return() and file_test_reset().
*/
function file_test_set_return($op, $value) {
$return = variable_get('file_test_return', array());
$return[$op] = $value;
variable_set('file_test_return', $return);
}
/**
Dries Buytaert
committed
* Implement hook_file_load().
*/
Dries Buytaert
committed
function file_test_file_load($files) {
foreach ($files as $file) {
_file_test_log_call('load', array($file));
// Assign a value on the object so that we can test that the $file is passed
// by reference.
$file->file_test['loaded'] = TRUE;
}
}
/**
Dries Buytaert
committed
* Implement hook_file_validate().
*/
Angie Byron
committed
function file_test_file_validate($file) {
_file_test_log_call('validate', array($file));
return _file_test_get_return('validate');
}
/**
Dries Buytaert
committed
* Implement hook_file_download().
*/
Angie Byron
committed
function file_test_file_download($file) {
_file_test_log_call('download', array($file));
return _file_test_get_return('download');
}
/**
Dries Buytaert
committed
* Implement hook_file_references().
*/
Angie Byron
committed
function file_test_file_references($file) {
_file_test_log_call('references', array($file));
return _file_test_get_return('references');
}
/**
Dries Buytaert
committed
* Implement hook_file_insert().
*/
Angie Byron
committed
function file_test_file_insert($file) {
_file_test_log_call('insert', array($file));
}
/**
Dries Buytaert
committed
* Implement hook_file_update().
*/
Angie Byron
committed
function file_test_file_update($file) {
_file_test_log_call('update', array($file));
}
/**
Dries Buytaert
committed
* Implement hook_file_copy().
*/
Angie Byron
committed
function file_test_file_copy($file, $source) {
_file_test_log_call('copy', array($file, $source));
}
/**
Dries Buytaert
committed
* Implement hook_file_move().
*/
Angie Byron
committed
function file_test_file_move($file, $source) {
_file_test_log_call('move', array($file, $source));
}
/**
Dries Buytaert
committed
* Implement hook_file_delete().
*/
Angie Byron
committed
function file_test_file_delete($file) {
_file_test_log_call('delete', array($file));
Dries Buytaert
committed
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
/**
* Helper class for testing the stream wrapper registry.
*
* Dummy stream wrapper implementation (dummy://).
*/
class DrupalDummyStreamWrapper extends DrupalLocalStreamWrapper {
function getDirectoryPath() {
return variable_get('stream_public_path', 'sites/default/files');
}
/**
* Override getInternalUri().
*
* Return a dummy path for testing.
*/
function getInternalUri() {
return '/dummy/example.txt';
}
/**
* Override getExternalUrl().
*
* Return the HTML URI of a public file.
*/
function getExternalUrl() {
return '/dummy/example.txt';
}
}