summaryrefslogtreecommitdiff
path: root/modules/color/color.test
blob: 09043250b05e0a1465c02f9b8d33e9480f9a7f94 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<?php

/**
 * @file
 * Tests for color module.
 */

/**
 * Tests the Color module functionality.
 */
class ColorTestCase extends DrupalWebTestCase {
  protected $big_user;
  protected $themes;
  protected $colorTests;

  public static function getInfo() {
    return array(
      'name' => 'Color functionality',
      'description' => 'Modify the Bartik and Garland theme colors and make sure the changes are reflected on the frontend',
      'group' => 'Color',
    );
  }

  function setUp() {
    parent::setUp('color');

    // Create users.
    $this->big_user = $this->drupalCreateUser(array('administer themes'));

    // This tests the color module in both Bartik and Garland.
    $this->themes = array(
      'bartik' => array(
        'palette_input' => 'palette[bg]',
        'scheme' => 'slate',
        'scheme_color' => '#3b3b3b',
      ),
      'garland' => array(
        'palette_input' => 'palette[link]',
        'scheme' => 'greenbeam',
        'scheme_color' => '#0c7a00',
      ),
    );
    theme_enable(array_keys($this->themes));

    // Array filled with valid and not valid color values
    $this->colorTests = array(
      '#000' => TRUE,
      '#123456' => TRUE,
      '#abcdef' => TRUE,
      '#0' => FALSE,
      '#00' => FALSE,
      '#0000' => FALSE,
      '#00000' => FALSE,
      '123456' => FALSE,
      '#00000g' => FALSE,
    );
  }

  /**
   * Tests the Color module functionality.
   */
  function testColor() {
    foreach ($this->themes as $theme => $test_values) {
      $this->_testColor($theme, $test_values);
    }
  }

  /**
   * Tests the Color module functionality using the given theme.
   */
  function _testColor($theme, $test_values) {
    variable_set('theme_default', $theme);
    $settings_path = 'admin/appearance/settings/' . $theme;

    $this->drupalLogin($this->big_user);
    $this->drupalGet($settings_path);
    $this->assertResponse(200);
    $edit['scheme'] = '';
    $edit[$test_values['palette_input']] = '#123456';
    $this->drupalPost($settings_path, $edit, t('Save configuration'));

    $this->drupalGet('<front>');
    $stylesheets = variable_get('color_' . $theme . '_stylesheets', array());
    $this->assertPattern('|' . file_create_url($stylesheets[0]) . '|', 'Make sure the color stylesheet is included in the content. (' . $theme . ')');

    $stylesheet_content = join("\n", file($stylesheets[0]));
    $this->assertTrue(strpos($stylesheet_content, 'color: #123456') !== FALSE, 'Make sure the color we changed is in the color stylesheet. (' . $theme . ')');

    $this->drupalGet($settings_path);
    $this->assertResponse(200);
    $edit['scheme'] = $test_values['scheme'];
    $this->drupalPost($settings_path, $edit, t('Save configuration'));

    $this->drupalGet('<front>');
    $stylesheets = variable_get('color_' . $theme . '_stylesheets', array());
    $stylesheet_content = join("\n", file($stylesheets[0]));
    $this->assertTrue(strpos($stylesheet_content, 'color: ' . $test_values['scheme_color']) !== FALSE, 'Make sure the color we changed is in the color stylesheet. (' . $theme . ')');

    // Test with aggregated CSS turned on.
    variable_set('preprocess_css', 1);
    $this->drupalGet('<front>');
    $stylesheets = variable_get('drupal_css_cache_files', array());
    $stylesheet_content = '';
    foreach ($stylesheets as $key => $uri) {
      $stylesheet_content .= join("\n", file(drupal_realpath($uri)));
    }
    $this->assertTrue(strpos($stylesheet_content, 'public://') === FALSE, 'Make sure the color paths have been translated to local paths. (' . $theme . ')');
    variable_set('preprocess_css', 0);
  }

  /**
   * Tests whether the provided color is valid.
   */
  function testValidColor() {
    variable_set('theme_default', 'bartik');
    $settings_path = 'admin/appearance/settings/bartik';

    $this->drupalLogin($this->big_user);
    $edit['scheme'] = '';

    foreach ($this->colorTests as $color => $is_valid) {
      $edit['palette[bg]'] = $color;
      $this->drupalPost($settings_path, $edit, t('Save configuration'));

      if($is_valid) {
        $this->assertText('The configuration options have been saved.');
      }
      else {
        $this->assertText('Main background must be a valid hexadecimal CSS color value.');
      }
    }
  }
}