123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- <?php
- /**
- * @file
- * Common functions for Location tests.
- */
- class LocationTestCase extends DrupalWebTestCase {
- /**
- * Custom assertion -- will check each element of an array against a reference value.
- */
- function assertArrayEpsilon($result, $expected, $epsilon, $message = '', $group = 'Other') {
- foreach ($expected as $k => $test) {
- $lower = $test - $epsilon;
- $upper = $test + $epsilon;
- if ($result[$k] < $lower || $result[$k] > $upper) {
- $this->_assert('fail', $message ? $message : t('Value deviates by @amt, which is more than @maxdev.', array('@amt' => abs($test - $result[$k]), '@maxdev' => $epsilon)), $group);
- }
- else {
- $this->_assert('pass', $message ? $message : t('Value within expected margin.'), $group);
- }
- }
- }
- /**
- * Get a set of location field defaults.
- * This will also enable collection on all parts of the location field.
- */
- function getLocationFieldDefaults() {
- // Get the (settable) defaults.
- $defaults = array();
- $d = location_invoke_locationapi($location, 'defaults');
- $fields = location_field_names();
- foreach ($fields as $k => $v) {
- if (!isset($d[$k]['nodiff'])) {
- $defaults[$k] = $d[$k];
- }
- }
- foreach ($defaults as $k => $v) {
- // Change collection to allow.
- $defaults[$k]['collect'] = 1;
- }
- return $defaults;
- }
- /**
- * Flatten a post settings array because drupalPost isn't smart enough to.
- */
- function flattenPostData(&$edit) {
- do {
- $edit_flattened = TRUE;
- foreach ($edit as $k => $v) {
- if (is_array($v)) {
- $edit_flattened = FALSE;
- foreach ($v as $kk => $vv) {
- $edit["{$k}[{$kk}]"] = $vv;
- }
- unset($edit[$k]);
- }
- }
- } while (!$edit_flattened);
- }
- function addLocationContentType(&$settings, $add = array()) {
- // find a non-existent random type name.
- do {
- $name = strtolower($this->randomName(3, 'type_'));
- } while (node_get_types('type', $name));
- // Get the (settable) defaults.
- $defaults = $this->getLocationFieldDefaults();
- $settings = array(
- 'name' => $name,
- 'type' => $name,
- 'location_settings' => array(
- 'multiple' => array(
- 'max' => 1,
- 'add' => 1,
- ),
- 'form' => array(
- 'fields' => $defaults,
- ),
- ),
- );
- //$settings['location_settings'] = array_merge_recursive($settings['location_settings'], $add);
- $this->flattenPostData($settings);
- $add = array('location_settings' => $add);
- $this->flattenPostData($add);
- $settings = array_merge($settings, $add);
- $this->drupalPost('admin/content/types/add', $settings, 'Save content type');
- $this->refreshVariables();
- $settings = variable_get('location_settings_node_'. $name, array());
- return $name;
- }
- /**
- * Delete a node.
- */
- function deleteNode($nid) {
- // Implemention taken from node_delete, with some assumptions regarding
- // function_exists removed.
- $node = node_load($nid);
- db_query('DELETE FROM {node} WHERE nid = %d', $node->nid);
- db_query('DELETE FROM {node_revisions} WHERE nid = %d', $node->nid);
- // Call the node-specific callback (if any):
- node_invoke($node, 'delete');
- node_invoke_nodeapi($node, 'delete');
- // Clear the page and block caches.
- cache_clear_all();
- }
- /**
- * Order locations in a node by LID for testing repeatability purposes.
- */
- function reorderLocations(&$node, $field = 'locations') {
- $locations = array();
- foreach ($node->{$field} as $location) {
- if ($location['lid']) {
- $locations[$location['lid']] = $location;
- }
- }
- ksort($locations);
- $node->{$field} = array();
- foreach ($locations as $location) {
- $node->{$field}[] = $location;
- }
- }
- /**
- * Creates a node based on default settings. This uses the internal simpletest
- * browser, meaning the node will be owned by the current simpletest _browser user.
- *
- * Code modified from #212304.
- * This is mainly for testing for differences between node_save() and
- * submitting a node/add/* form.
- *
- * @param values
- * An associative array of values to change from the defaults, keys are
- * node properties, for example 'body' => 'Hello, world!'.
- * @return object Created node object.
- */
- function drupalCreateNodeViaForm($values = array()) {
- $defaults = array(
- 'type' => 'page',
- 'title' => $this->randomName(8),
- );
- $edit = ($values + $defaults);
- if (empty($edit['body'])) {
- $content_type = db_fetch_array(db_query("select name, has_body from {node_type} where type='%s'", $edit['type']));
- if ($content_type['has_body']) {
- $edit['body'] = $this->randomName(32);
- }
- }
- $type = $edit['type'];
- unset($edit['type']); // Only used in URL.
- $this->flattenPostData($edit); // Added by me.
- $this->drupalPost('node/add/'. str_replace('_', '-', $type), $edit, t('Save'));
- $node = node_load(array('title' => $edit['title']));
- $this->assertRaw(t('@type %title has been created.', array('@type' => node_get_types('name', $node), '%title' => $edit['title'])), t('Node created successfully.'));
- return $node;
- }
- }
|