function FieldSqlStorageTestCase::testFieldCompareDataModification

Tests the expected return values of _field_sql_storage_write_compare().

File

modules/field/modules/field_sql_storage/field_sql_storage.test, line 316

Class

FieldSqlStorageTestCase
Tests field storage.

Code

public function testFieldCompareDataModification() {
    $langcode = LANGUAGE_NONE;
    $field_info = field_info_field($this->field_name);
    // Make sure we have 2 sample field values that are unique.
    $value1 = 0;
    $value2 = 0;
    while ($value1 == $value2) {
        $value1 = mt_rand();
        $value2 = (string) mt_rand();
    }
    // Create the 2 entities to compare.
    $entity = field_test_create_stub_entity();
    $entity->{$this->field_name}[$langcode][]['value'] = $value1;
    $entity1 = clone $entity;
    $entity2 = clone $entity;
    // Make sure that it correctly compares identical entities.
    $this->assert(!_field_sql_storage_write_compare($field_info, $entity1, $entity2), 'The entities are identical.');
    // Compare to an empty object.
    $this->assert(_field_sql_storage_write_compare($field_info, $entity1, new stdClass()), 'The entity is not the same as an empty object.');
    // Change one of the values.
    $entity2->{$this->field_name}[$langcode][0]['value'] = $value2;
    $this->assert(_field_sql_storage_write_compare($field_info, $entity1, $entity2), 'The values are not the same.');
    // Reset $entity2.
    $entity2 = clone $entity;
    // Duplicate the value on one of the entities.
    $entity1->{$this->field_name}[$langcode][]['value'] = $value1;
    $this->assert(_field_sql_storage_write_compare($field_info, $entity1, $entity2), 'The fields do not have the same number of values.');
    // Add a second value to both entities.
    $entity2->{$this->field_name}[$langcode][]['value'] = $value2;
    $this->assert(_field_sql_storage_write_compare($field_info, $entity1, $entity2), 'The values are not the same.');
    // Replace the array containing the value with the actual value.
    $entity2->{$this->field_name}[$langcode] = $entity2->{$this->field_name}[$langcode][0];
    $this->assert(_field_sql_storage_write_compare($field_info, $entity1, $entity2), 'The array to hold field values is replaced by the value.');
    // Null one value.
    $entity2->{$this->field_name}[$langcode] = NULL;
    $this->assert(_field_sql_storage_write_compare($field_info, $entity1, $entity2), 'One field is NULL and the other is not.');
    // Null both values.
    $entity1->{$this->field_name}[$langcode] = NULL;
    $this->assert(!_field_sql_storage_write_compare($field_info, $entity1, $entity2), 'Both fields are NULL.');
    // Unset one of the fields.
    unset($entity2->{$this->field_name});
    $this->assert(_field_sql_storage_write_compare($field_info, $entity1, $entity2), 'One field structure is unset.');
    // Unset both of the fields.
    unset($entity1->{$this->field_name});
    $this->assert(!_field_sql_storage_write_compare($field_info, $entity1, $entity2), 'Both field structures are unset.');
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.