NumberFieldRdfaTest.php 6.83 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
<?php
/**
 * @file
 * Contains \Drupal\rdf\Tests\Field\NumberFieldRdfaTest.
 */

namespace Drupal\rdf\Tests\Field;

/**
 * Tests RDFa output by number field formatters.
 *
 * @group rdf
 */
class NumberFieldRdfaTest extends FieldRdfaTestBase {

  /**
   * Tests the integer formatter.
   */
  public function testIntegerFormatter() {
    $this->fieldType = 'integer';
    $testValue = 3;
    $this->createTestField();
    $this->createTestEntity($testValue);
24
    $this->assertFormatterRdfa(array('type' => 'number_integer'), 'http://schema.org/baseSalary', array('value' => $testValue));
25 26

    // Test that the content attribute is not created.
27
    $result = $this->xpathContent($this->getRawContent(), '//div[contains(@class, "field__items") and @content]');
28 29 30 31 32 33 34
    $this->assertFalse($result);
  }

  /**
   * Tests the integer formatter with settings.
   */
  public function testIntegerFormatterWithSettings() {
35
    \Drupal::service('theme_handler')->install(['classy']);
36
    \Drupal::service('theme_handler')->setDefault('classy');
37 38
    $this->fieldType = 'integer';
    $formatter = array(
39
      'type' => 'number_integer',
40 41 42 43 44 45
      'settings' => array(
        'thousand_separator' => '.',
        'prefix_suffix' => TRUE,
      ),
    );
    $testValue = 3333333.33;
46
    $field_settings = array(
47 48 49
      'prefix' => '#',
      'suffix' => ' llamas.',
    );
50
    $this->createTestField($field_settings);
51 52 53 54
    $this->createTestEntity($testValue);
    $this->assertFormatterRdfa($formatter, 'http://schema.org/baseSalary', array('value' => $testValue));

    // Test that the content attribute is created.
55
    $result = $this->xpathContent($this->getRawContent(), '//div[contains(@class, "field__item") and @content=:testValue]', array(':testValue' => $testValue));
56 57 58 59 60 61 62 63 64 65 66
    $this->assertTrue($result);
  }

  /**
   * Tests the float formatter.
   */
  public function testFloatFormatter() {
    $this->fieldType = 'float';
    $testValue = 3.33;
    $this->createTestField();
    $this->createTestEntity($testValue);
67
    $this->assertFormatterRdfa(array('type' => 'number_unformatted'), 'http://schema.org/baseSalary', array('value' => $testValue));
68 69

    // Test that the content attribute is not created.
70
    $result = $this->xpathContent($this->getRawContent(), '//div[contains(@class, "field__items") and @content]');
71 72 73 74 75 76 77
    $this->assertFalse($result);
  }

  /**
   * Tests the float formatter with settings.
   */
  public function testFloatFormatterWithSettings() {
78
    \Drupal::service('theme_handler')->install(['classy']);
79
    \Drupal::service('theme_handler')->setDefault('classy');
80 81
    $this->fieldType = 'float';
    $formatter = array(
82
      'type' => 'number_decimal',
83 84 85 86 87 88 89
      'settings' => array(
        'thousand_separator' => '.',
        'decimal_separator' => ',',
        'prefix_suffix' => TRUE,
      ),
    );
    $testValue = 3333333.33;
90
    $field_settings = array(
91 92 93
      'prefix' => '$',
      'suffix' => ' more.',
    );
94
    $this->createTestField($field_settings);
95 96 97 98
    $this->createTestEntity($testValue);
    $this->assertFormatterRdfa($formatter, 'http://schema.org/baseSalary', array('value' => $testValue));

    // Test that the content attribute is created.
99
    $result = $this->xpathContent($this->getRawContent(), '//div[contains(@class, "field__item") and @content=:testValue]', array(':testValue' => $testValue));
100 101 102 103 104 105 106 107 108
    $this->assertTrue($result);
  }

  /**
   * Tests the float formatter with a scale. Scale is not exercised.
   */
  public function testFloatFormatterWithScale() {
    $this->fieldType = 'float';
    $formatter = array(
109
      'type' => 'number_decimal',
110 111 112 113 114 115 116 117 118 119
      'settings' => array(
        'scale' => 5,
      ),
    );
    $testValue = 3.33;
    $this->createTestField();
    $this->createTestEntity($testValue);
    $this->assertFormatterRdfa($formatter, 'http://schema.org/baseSalary', array('value' => $testValue));

    // Test that the content attribute is not created.
120
    $result = $this->xpathContent($this->getRawContent(), '//div[contains(@class, "field__items") and @content]');
121 122 123 124 125 126 127
    $this->assertFalse($result);
  }

  /**
   * Tests the float formatter with a scale. Scale is exercised.
   */
  public function testFloatFormatterWithScaleExercised() {
128
    \Drupal::service('theme_handler')->install(['classy']);
129
    \Drupal::service('theme_handler')->setDefault('classy');
130 131
    $this->fieldType = 'float';
    $formatter = array(
132
      'type' => 'number_decimal',
133 134 135 136 137 138 139 140 141 142
      'settings' => array(
        'scale' => 5,
      ),
    );
    $testValue = 3.1234567;
    $this->createTestField();
    $this->createTestEntity($testValue);
    $this->assertFormatterRdfa($formatter, 'http://schema.org/baseSalary', array('value' => $testValue));

    // Test that the content attribute is created.
143
    $result = $this->xpathContent($this->getRawContent(), '//div[contains(@class, "field__item") and @content=:testValue]', array(':testValue' => $testValue));
144 145 146 147 148 149 150 151 152 153 154
    $this->assertTrue($result);
  }

  /**
   * Tests the decimal formatter.
   */
  public function testDecimalFormatter() {
    $this->fieldType = 'decimal';
    $testValue = 3.33;
    $this->createTestField();
    $this->createTestEntity($testValue);
155
    $this->assertFormatterRdfa(array('type' => 'number_decimal'), 'http://schema.org/baseSalary', array('value' => $testValue));
156 157

    // Test that the content attribute is not created.
158
    $result = $this->xpathContent($this->getRawContent(), '//div[contains(@class, "field__items") and @content]');
159 160 161 162 163 164 165
    $this->assertFalse($result);
  }

  /**
   * Tests the decimal formatter with settings.
   */
  public function testDecimalFormatterWithSettings() {
166
    \Drupal::service('theme_handler')->install(['classy']);
167
    \Drupal::service('theme_handler')->setDefault('classy');
168 169
    $this->fieldType = 'decimal';
    $formatter = array(
170
      'type' => 'number_decimal',
171 172 173 174 175 176 177
      'settings' => array(
        'thousand_separator' => 't',
        'decimal_separator' => '#',
        'prefix_suffix' => TRUE,
      ),
    );
    $testValue = 3333333.33;
178
    $field_settings = array(
179 180 181
      'prefix' => '$',
      'suffix' => ' more.',
    );
182
    $this->createTestField($field_settings);
183 184 185 186
    $this->createTestEntity($testValue);
    $this->assertFormatterRdfa($formatter, 'http://schema.org/baseSalary', array('value' => $testValue));

    // Test that the content attribute is created.
187
    $result = $this->xpathContent($this->getRawContent(), '//div[contains(@class, "field__item") and @content=:testValue]', array(':testValue' => $testValue));
188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205
    $this->assertTrue($result);
  }

  /**
   * Creates the RDF mapping for the field.
   */
  protected function createTestEntity($testValue) {
    // Add the mapping.
    $mapping = rdf_get_mapping('entity_test', 'entity_test');
    $mapping->setFieldMapping($this->fieldName, array(
      'properties' => array('schema:baseSalary'),
    ))->save();

    // Set up test entity.
    $this->entity = entity_create('entity_test', array());
    $this->entity->{$this->fieldName}->value = $testValue;
  }
}