summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2009-07-02 20:19:48 +0000
committerDries Buytaert <dries@buytaert.net>2009-07-02 20:19:48 +0000
commitcf59ebec770a3f10f8fc44a95844167392762095 (patch)
tree3107dbbffc2adbe238a6281dec703e94b357260f
parent8f66b459bff921ad2f79a7858d8eb5294087b58c (diff)
downloadbrdo-cf59ebec770a3f10f8fc44a95844167392762095.tar.gz
brdo-cf59ebec770a3f10f8fc44a95844167392762095.tar.bz2
- Patch #489438 by bjaspan, crotown: hook_field_create_field() is missing.
-rw-r--r--modules/field/field.crud.inc3
-rw-r--r--modules/field/field.test4
-rw-r--r--modules/simpletest/tests/field_test.module62
3 files changed, 68 insertions, 1 deletions
diff --git a/modules/field/field.crud.inc b/modules/field/field.crud.inc
index 9dc190d50..696a4b831 100644
--- a/modules/field/field.crud.inc
+++ b/modules/field/field.crud.inc
@@ -273,6 +273,9 @@ function field_create_field($field) {
// Clear caches
field_cache_clear(TRUE);
+ // Invoke external hooks after the cache is cleared for API consistency.
+ module_invoke_all('field_create_field', $field);
+
return $field;
}
diff --git a/modules/field/field.test b/modules/field/field.test
index ee816c0aa..57357b920 100644
--- a/modules/field/field.test
+++ b/modules/field/field.test
@@ -1320,8 +1320,10 @@ class FieldCrudTestCase extends DrupalWebTestCase {
'field_name' => 'field_2',
'type' => 'test_field',
);
+ field_test_memorize();
$field_definition = field_create_field($field_definition);
-
+ $mem = field_test_memorize();
+ $this->assertIdentical($mem['field_test_field_create_field'][0][0], $field_definition, 'hook_field_create_field() called with correct arguments.');
$field = field_read_field($field_definition['field_name']);
// Ensure that basic properties are preserved.
diff --git a/modules/simpletest/tests/field_test.module b/modules/simpletest/tests/field_test.module
index 8999cdaa3..abf6aaf06 100644
--- a/modules/simpletest/tests/field_test.module
+++ b/modules/simpletest/tests/field_test.module
@@ -366,6 +366,68 @@ function field_test_field_schema($field) {
}
/**
+ * Store and retrieve keyed data for later verification by unit tests.
+ *
+ * This function is a simple in-memory key-value store with the
+ * distinction that it stores all values for a given key instead of
+ * just the most recently set value. field_test module hooks call
+ * this function to record their arguments, keyed by hook name. The
+ * unit tests later call this function to verify that the correct
+ * hooks were called and were passed the correct arguments.
+ *
+ * This function ignores all calls until the first time it is called
+ * with $key of NULL. Each time it is called with $key of NULL, it
+ * erases all previously stored data from its internal cache, but also
+ * returns the previously stored data to the caller. A typical usage
+ * scenario is:
+ *
+ * @code
+ * // calls to field_test_memorize() here are ignored
+ *
+ * // turn on memorization
+ * field_test_memorize();
+ *
+ * // call some Field API functions that invoke field_test hooks
+ * $field = field_create_field(...);
+ *
+ * // retrieve and reset the memorized hook call data
+ * $mem = field_test_memorize();
+ *
+ * // make sure hook_field_create_field() is invoked correctly
+ * assertEqual(count($mem['field_test_field_create_field']), 1);
+ * assertEqual($mem['field_test_field_create_field'][0], array($field));
+ * @endcode
+ *
+ * @param $key
+ * The key under which to store to $value, or NULL as described above.
+ * @param $value
+ * A value to store for $key.
+ * @return
+ * An array mapping each $key to an array of each $value passed in
+ * for that key.
+ */
+function field_test_memorize($key = NULL, $value = NULL) {
+ $memorize =& drupal_static(__FUNCTION__, NULL);
+
+ if (is_null($key)) {
+ $ret = $memorize;
+ $memorize = array();
+ return $ret;
+ }
+ if (is_array($memorize)) {
+ $memorize[$key][] = $value;
+ }
+}
+
+/**
+ * Memorize calls to hook_field_create_field().
+ */
+function field_test_field_create_field($field) {
+ $args = func_get_args();
+ field_test_memorize(__FUNCTION__, $args);
+}
+
+/**
* Implement hook_field_validate().
*
* Possible error codes: