public function MetatagTagsTestBase::testTagsInputOutput in Metatag 7
Confirm that each tag can be saved and that the output of each tag is correct.
File
- tests/
MetatagTagsTestBase.test, line 100 - Base class for testing a module's custom tags.
Class
- MetatagTagsTestBase
- Base class for testing a module's custom tags.
Code
public function testTagsInputOutput() {
// Load the global config.
$this
->drupalGet('admin/config/search/metatags/config/global');
$this
->assertResponse(200);
// Update the Global defaults and test them.
$all_values = $values = array();
foreach ($this->tags as $tag_raw) {
// Convert tag names to something more suitable for a function name.
$tag_name = str_replace(array(
'.',
'-',
':',
' ',
), '_', $tag_raw);
// Look for a custom method named "{$tag_name}_test_key", if found use
// that method to get the test string for this meta tag, otherwise it
// defaults to the meta tag's name.
$method = "{$tag_name}_test_key";
if (method_exists($this, $method)) {
$test_key = $this
->{$method}();
}
else {
$test_key = "metatags[und][{$tag_raw}][value]";
}
// Look for a custom method named "{$tag_name}_test_value", if found use
// that method to get the test string for this meta tag, otherwise it
// defaults to just generating a random string.
$method = "{$tag_name}_test_value";
if (method_exists($this, $method)) {
$test_value = $this
->{$method}();
}
else {
// Generate a random string.
$test_value = $this
->getTestTagValue();
}
$values[$test_key] = $test_value;
// Look for a custom method named "{$tag_name}_test_preprocess_output", if
// found use that method provide any additional processing on the value
// e.g. adding a prefix.
$method = "{$tag_name}_test_preprocess_output";
if (method_exists($this, $method)) {
$test_value = $this
->{$method}($test_value);
}
$all_values[$tag_name] = $test_value;
}
$this
->drupalPost(NULL, $values, 'Save');
$this
->assertText(strip_tags(t('The meta tag defaults for @label have been saved.', array(
'@label' => 'Global',
))));
// Load the test page.
$this
->drupalGet('moosqueakoinkmeow');
$this
->assertResponse(200);
$this
->assertText(t('Test page.'));
// Look for the values.
foreach ($this->tags as $tag_raw) {
// Convert tag names to something more suitable for a function name.
$tag_name = str_replace(array(
'.',
'-',
':',
' ',
), '_', $tag_raw);
// Verify this meta tag was output.
$this
->assertTrue(!empty($all_values[$tag_name]));
// Look for a custom method named "{$tag_name}_test_output_xpath", if
// found use that method to get the xpath definition for this meta tag,
// otherwise it defaults to just looking for a meta tag matching:
// @code
// <$test_tag $test_name_attribute=$tag_name $test_value_attribute=$value />
// @endcode
$method = "{$tag_name}_test_output_xpath";
if (method_exists($this, $method)) {
$xpath_string = $this
->{$method}();
}
else {
// Look for a custom method named "{$tag_name}_test_tag", if
// found use that method to get the xpath definition for this meta tag,
// otherwise it defaults to $this->test_tag.
$method = "{$tag_name}_test_tag";
if (method_exists($this, $method)) {
$xpath_tag = $this
->{$method}();
}
else {
$xpath_tag = $this->test_tag;
}
// Look for a custom method named "{$tag_name}_test_name_attribute", if
// found use that method to get the xpath definition for this meta tag,
// otherwise it defaults to $this->test_name_attribute.
$method = "{$tag_name}_test_name_attribute";
if (method_exists($this, $method)) {
$xpath_name_attribute = $this
->{$method}();
}
else {
$xpath_name_attribute = $this->test_name_attribute;
}
// Look for a custom method named "{$tag_name}_test_tag_name", if
// found use that method to get the xpath definition for this meta tag,
// otherwise it defaults to $tag_name.
$method = "{$tag_name}_test_tag_name";
if (method_exists($this, $method)) {
$xpath_name_tag = $this
->{$method}();
}
else {
$xpath_name_tag = $this
->getTestTagName($tag_name);
}
// Compile the xpath.
$xpath_string = "//{$xpath_tag}[@{$xpath_name_attribute}='{$xpath_name_tag}']";
}
// Something should have been found.
$this
->assertTrue(!empty($xpath_string));
// Look for a custom method named "{$tag_name}_test_value_attribute", if
// found use that method to get the xpath definition for this meta tag,
// otherwise it defaults to $this->test_value_attribute.
$method = "{$tag_name}_test_value_attribute";
if (method_exists($this, $method)) {
$xpath_value_attribute = $this
->{$method}();
}
else {
$xpath_value_attribute = $this->test_value_attribute;
}
// Extract the meta tag from the HTML.
$xpath = $this
->xpath($xpath_string);
$this
->assertEqual(count($xpath), 1, format_string('One @name tag found.', array(
'@name' => $tag_name,
)));
// Most meta tags have an attribute, but some don't.
if (!empty($xpath_value_attribute)) {
$this
->assertTrue($xpath_value_attribute);
$this
->assertTrue(isset($xpath[0][$xpath_value_attribute]));
// Help with debugging.
if (!isset($xpath[0][$xpath_value_attribute])) {
$this
->verbose($xpath, $tag_name . ': ' . $xpath_string);
}
else {
if ((string) $xpath[0][$xpath_value_attribute] != $all_values[$tag_name]) {
$this
->verbose($xpath, $tag_name . ': ' . $xpath_string);
}
$this
->assertTrue($xpath[0][$xpath_value_attribute]);
$this
->assertEqual($xpath[0][$xpath_value_attribute], $all_values[$tag_name]);
// , "The meta tag was found with the expected value.");
}
}
else {
$this
->verbose($xpath, $tag_name . ': ' . $xpath_string);
$this
->assertTrue((string) $xpath[0]);
$this
->assertEqual((string) $xpath[0], $all_values[$tag_name], "The meta tag was found with the expected value.");
}
}
}