home | career | drupal | java | mac | mysql | perl | php | scala | uml | unix

Drupal example source code file (link.attribute.test)

This example Drupal source code file (link.attribute.test) is included in the DevDaily.com "Drupal Source Code Warehouse" project. The intent of this project is to help you "Learn Drupal by Example".

PHP - Drupal tags/keywords

array, content, content_type_friendly, content_type_machine, directory, edit, file, function, php, single_field_name_machine, title, type, url

The link.attribute.test Drupal example source code

<?php
// $Id: link.attribute.test,v 1.2.2.5 2011/01/16 04:12:21 jcfiala Exp $

/**
 * @file
 * Basic simpletests to test options on link module.
 */

class LinkAttributeCrudTest extends DrupalWebTestCase {

  private $zebra;

  public $permissions = array(
    'access content',
    'administer content types',
    'administer nodes',
    'administer filters',
    'access comments',
    'post comments',
    'skip comment approval',
    'access administration pages',
  );

  function getInfo() {
    return array(
      'name' => t('Link Attribute Tests'),
      'description' => t('Tests the field attributes, making sure they appear in various displayed situations.'),
      'group' => t('Link'),
    );
  }

  function setup() {
    $this->zebra = 0;
    parent::setup('field_ui', 'link'); // was 'views'
    //$this->loginWithPermissions($this->permissions);
    // Create and login user.
    $account = $this->drupalCreateUser(array('administer content types'));
    $this->drupalLogin($account);
  }

  function createLink($url, $title, $attributes = array()) {
    return array(
      'url' => $url,
      'title' => $title,
      'attributes' => $attributes,
    );
  }

  private function outputScreenContents($description, $basename) {
    // This is a hack to get a directory that won't be cleaned up by simpletest
    $file_dir = file_directory_path().'/../simpletest_output_pages';
    if (!is_dir($file_dir)) {
      mkdir($file_dir, 0777, TRUE);
    }
    $output_path = "$file_dir/$basename." . $this->randomName(10) . '.html';
    $rv = file_put_contents($output_path, $this->drupalGetContent());
    $this->pass("$description: Contents of result page are ".l('here',$output_path));
  }

  private function assertLinkOnNode($field_name, $link_value, $message = '', $group = 'Other') {
    $this->zebra++;
    $zebra_string = ($this->zebra % 2 == 0) ? 'even' : 'odd';
    $cssFieldLocator = 'field-'. str_replace('_', '-', $field_name);
    $this->assertPattern('@<div class="field field-type-link '. $cssFieldLocator .'".*<div class="field-item '. $zebra_string .'">\s*'. $link_value .'\s*</div>@is',
                         $message,
                         $group);
  }

  /**
   * A simple test that just creates a new node type, adds a link field to it, creates a new node of that type, and makes sure
   * that the node is being displayed.
   */
  function testBasic() {
    /*$this->acquireContentTypes(1);
    variable_set('node_options_'. $this->content_types[0]->name, array('status', 'promote'));*/
    
    $content_type_friendly = $this->randomName(20);
    $content_type_machine = strtolower($this->randomName(10));
    $title = $this->randomName(20);

    $this->drupalGet('admin/structure/types');

    // Create the content type.
    $this->clickLink(t('Add content type'));
    
    $edit = array (
      'name' => $content_type_friendly,
      'type' => $content_type_machine,
    );
    $this->drupalPost(NULL, $edit, t('Save and add fields'));
    $this->assertText(t('The content type @name has been added.', array('@name' => $content_type_friendly)));
    
    // Now add a singleton field.
    $single_field_name_friendly = $this->randomName(20);
    $single_field_name_machine = strtolower($this->randomName(10));
    $single_field_name = 'field_'. $single_field_name_machine;
    $edit = array (
      'fields[_add_new_field][label]' => $single_field_name_friendly,
      'fields[_add_new_field][field_name]' => $single_field_name_machine,
      'fields[_add_new_field][type]' => 'link_field',
      'fields[_add_new_field][widget_type]' => 'link_field',

    );
    $this->drupalPost(NULL, $edit, t('Save'));
    
    // We'll go with the default settings for this run-through.
    $this->drupalPost(NULL, array(), t('Save field settings'));
    
    // Using all the default settings, so press the button.
    $this->drupalPost(NULL, array(), t('Save settings'));
    $this->assertText(t('Saved @name configuration.', array('@name' => $single_field_name_friendly)));
    
    // Somehow clicking "save" isn't enough, and we have to do a
    // node_types_rebuild().
    node_types_rebuild();
    menu_rebuild();
    $type_exists = db_query('SELECT 1 FROM {node_type} WHERE type = :type', array(':type' => $content_type_machine))->fetchField();
    $this->assertTrue($type_exists, 'The new content type has been created in the database.');
    
    $permission = 'create ' . $content_type_machine . ' content';
    $permission_edit = 'edit ' . $content_type_machine . ' content';
    // Reset the permissions cache.
    $this->checkPermissions(array($permission), TRUE);

    // Now that we have a new content type, create a user that has privileges
    // on the content type.
    $permissions = array_merge($this->permissions, array($permission));
    $account = $this->drupalCreateUser($permissions);
    $this->drupalLogin($account);
    
    // Go to page.
    $this->drupalGet('node/add/'. $content_type_machine);
    
    // Add a node.
    $edit = array(
      'title' => $title,
      'field_'. $single_field_name_machine. '[und][0][title]' => 'Link',
      'field_'. $single_field_name_machine. '[und][0][url]' => 'http://www.drupal.org/',
    );
    
    $this->drupalPost(NULL, $edit, t('Save'));
    $this->assertText(t('@content_type_friendly @title has been created', array('@content_type_friendly' => $content_type_friendly, '@title' => $title)));

    /*$field_settings = array(
      'type' => 'link',
      'widget_type' => 'link',
      'type_name' => $this->content_types[0]->name,
      'attributes' => array(), // <-- This is needed or we have an error.
    );

    $field = $this->createField($field_settings, 0);
    //$this->pass('<pre>'. print_r($field, TRUE) .'</pre>');
    $field_db_info = content_database_info($field);*/

    //$this->acquireNodes(2);
    /*$node = $this->drupalCreateNode(array('type' => $content_type_machine,
                                          'promote' => 1));
    $test_nid = $node->nid;*/

    //$node = node_load($this->nodes[0]->nid);
    //$node->promote = 1; // We want this to show on front page for the teaser test.
    /*$this->assert('debug', print_r($node, TRUE), 'Debug');
    $node->{$single_field_name}['und'][0] = $this->createLink('http://www.example.com', 'Test Link');
    node_save($node);
    $this->assert('debug', print_r($node, TRUE), 'Debug');*/
    
    //$this->drupalGet('node/'. $test_nid .'/edit');
    $this->drupalGet('node/add/'. $content_type_machine);
    
    // lets add a node:
    $edit = array(
      'title' => $title,
      'field_' . $single_field_name_machine . '[und][0][url]' => 'http://www.example.com/',
      'field_' . $single_field_name_machine . '[und][0][title]' => 'Display',
    );
    
    // Now we can fill in the second item in the multivalue field and save.
    $this->drupalPost(NULL, $edit, t('Save'));
    $this->assertText(t('@content_type_friendly @title has been created', array('@content_type_friendly' => $content_type_friendly, '@title' => $title)));

    $this->assertText('Display');
    //$this->assertText('http://www.example.com/');
    $this->assertLinkByHref('http://www.example.com');
  }
    
  /*  
    $test_nid = 33; // will fail!
    
    $this->assert('debug', '<pre>'. print_r(node_load($test_nid), TRUE) .'</pre>', 'Debug');

    // Does this display on the node page?
    $this->drupalGet('node/'. $test_nid);
    $this->assertLinkOnNode($single_field_name_machine, l('Test Link', 'http://www.example.com'));
  
    // Does this display on the front page?
    $this->drupalGet('<front>');
    // reset the zebra!
    $this->zebra = 0;
    $this->assertLinkOnNode($single_field_name_machine, l('Test Link', 'http://www.example.com'));
}*/

  /**
   * This test sees that we can create a link field with a defined class, and make sure
   * that class displays properly when the link is displayed.
   */
  /*function testLinkWithClassOnField() {
    $this->acquireContentTypes(1);
    $field_settings = array(
      'type' => 'link',
      'widget_type' => 'link',
      'type_name' => $this->content_types[0]->name,
      'attributes' => array(
        'class' => 'test-class',
        'target' => 'default',
        'rel' => FALSE,
      ),
    );

    $field = $this->createField($field_settings, 0);
    //$this->pass('<pre>'. print_r($field, TRUE) .'</pre>');
    $field_db_info = content_database_info($field);

    $this->acquireNodes(2);

    $node = node_load($this->nodes[0]->nid);
    $node->promote = 1; // We want this to show on front page for the teaser test.
    $node->{$field['field_name']}[0] = $this->createLink('http://www.example.com', 'Test Link');
    node_save($node);

    // Does this display on the node page?
    $this->drupalGet('node/'. $this->nodes[0]->nid);
    //$this->outputScreenContents('Link field with class', 'link_');
    $this->assertLinkOnNode($field['field_name'], l('Test Link', 'http://www.example.com', array('attributes' => array('class' => 'test-class'))));

    // Does this display on the front page?
    $this->drupalGet('<front>');
    // reset the zebra!
    $this->zebra = 0;
    $this->assertLinkOnNode($field['field_name'], l('Test Link', 'http://www.example.com', array('attributes' => array('class' => 'test-class'))));
  }*/

}

Other Drupal examples (source code examples)

Here is a short list of links related to this Drupal link.attribute.test source code file:

new blog posts

"Drupal" is a registered trademark of Dries Buytaert.

my drupal tutorials and examples  

Copyright 1998-2016 Alvin Alexander, alvinalexander.com
All Rights Reserved.

Beginning in 2016, a portion of the proceeds from pages under the '/drupal-code-examples/' URI will be donated to charity.