914 lines
37 KiB
Plaintext
914 lines
37 KiB
Plaintext
<?php
|
|
|
|
/**
|
|
* @file
|
|
* Tests for breakpoints.module
|
|
*/
|
|
|
|
/**
|
|
* Base class for Breakpoint tests.
|
|
*/
|
|
abstract class BreakpointsTestCase extends DrupalWebTestCase {
|
|
function setUp() {
|
|
$modules = func_get_args();
|
|
if (isset($modules[0]) && is_array($modules[0])) {
|
|
$modules = $modules[0];
|
|
}
|
|
array_unshift($modules, 'breakpoints');
|
|
parent::setUp($modules);
|
|
}
|
|
|
|
/**
|
|
* Verify that a breakpoint is properly stored.
|
|
*/
|
|
function verifyBreakpoint($breakpoint, $in_database = TRUE) {
|
|
$t_args = array('%breakpoint' => $breakpoint->name);
|
|
$properties = array('name', 'breakpoint', 'source', 'source_type', 'status', 'weight', 'multipliers');
|
|
if ($in_database) {
|
|
$properties[] = 'id';
|
|
}
|
|
$assert_group = t('Breakpoints API');
|
|
// Verify text format database record.
|
|
$db_breakpoint = db_select('breakpoints', 'b')
|
|
->fields('b')
|
|
->condition('machine_name', $breakpoint->machine_name)
|
|
->execute()
|
|
->fetchObject();
|
|
$db_breakpoint->multipliers = unserialize($db_breakpoint->multipliers);
|
|
foreach ($properties as $property) {
|
|
$this->assertEqual($db_breakpoint->{$property}, $breakpoint->{$property}, t('Database: Proper ' . $property . ' for breakpoint %breakpoint.', $t_args), $assert_group);
|
|
}
|
|
|
|
// Verify breakpoints_breakpoint_load_by_fullkey().
|
|
$load_breakpoint = breakpoints_breakpoint_load_by_fullkey($breakpoint->machine_name);
|
|
foreach ($properties as $property) {
|
|
$this->assertEqual($load_breakpoint->{$property}, $breakpoint->{$property}, t('breakpoints_breakpoint_load_by_fullkey: Proper ' . $property . ' for breakpoint %breakpoint.', $t_args), $assert_group);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Tests for breakpoints CRUD operations.
|
|
*/
|
|
class BreakpointsCRUDTestCase extends BreakpointsTestCase {
|
|
|
|
public static function getInfo() {
|
|
return array(
|
|
'name' => 'Breakpoints CRUD operations',
|
|
'description' => 'Test creation, loading, updating, deleting of breakpoints.',
|
|
'group' => 'Breakpoints',
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Test CRUD operations for breakpoints.
|
|
*/
|
|
function testBreakpointsCRUD() {
|
|
// Add a breakpoint with minimum data only.
|
|
$breakpoint = new stdClass();
|
|
$breakpoint->disabled = FALSE;
|
|
$breakpoint->api_version = 1;
|
|
$breakpoint->name = 'Custom';
|
|
$breakpoint->breakpoint = '(min-width: 600px)';
|
|
$breakpoint->source = 'user';
|
|
$breakpoint->source_type = 'custom';
|
|
$breakpoint->status = 1;
|
|
$breakpoint->weight = 0;
|
|
$breakpoint->multipliers = array(
|
|
'1.5x' => 0,
|
|
'2x' => 0,
|
|
);
|
|
breakpoints_breakpoint_save($breakpoint);
|
|
$this->verifyBreakpoint($breakpoint);
|
|
|
|
// Update the breakpoint.
|
|
$breakpoint->weight = 1;
|
|
$breakpoint->multipliers['2x'] = 1;
|
|
breakpoints_breakpoint_save($breakpoint);
|
|
$this->verifyBreakpoint($breakpoint);
|
|
|
|
// Disable the breakpoint.
|
|
$breakpoint->status = 0;
|
|
breakpoints_breakpoint_save($breakpoint);
|
|
$this->verifyBreakpoint($breakpoint);
|
|
$breakpoints = breakpoints_breakpoint_load_all_active();
|
|
$this->assertFalse(isset($breakpoints[$breakpoint->machine_name]), t('breakpoints_breakpoint_load_all_active: Disabled breakpoints aren\'t loaded.'), t('Breakpoints API'));
|
|
|
|
// Delete the breakpoint.
|
|
breakpoints_breakpoint_delete($breakpoint);
|
|
$db_breakpoint = db_select('breakpoints', 'b')->fields('b')->condition('machine_name', $breakpoint->machine_name)->execute()->fetchObject();
|
|
$this->assertFalse($db_breakpoint, t('Database: Deleted breakpoint no longer exists'), t('Breakpoints API'));
|
|
$this->assertFalse(breakpoints_breakpoint_load_by_fullkey($breakpoint->machine_name), t('breakpoints_breakpoint_load_by_fullkey: Loading a deleted breakpoint returns false.'), t('Breakpoints API'));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Tests for breakpoints admin interface.
|
|
*/
|
|
class BreakpointsAdminTestCase extends BreakpointsTestCase {
|
|
|
|
public static function getInfo() {
|
|
return array(
|
|
'name' => 'Breakpoints administration functionality',
|
|
'description' => 'Thoroughly test the administrative interface of the breakpoints module.',
|
|
'group' => 'Breakpoints',
|
|
);
|
|
}
|
|
|
|
function setUp() {
|
|
parent::setUp();
|
|
|
|
// Create user.
|
|
$this->admin_user = $this->drupalCreateUser(array(
|
|
'administer breakpoints',
|
|
));
|
|
|
|
$this->drupalLogin($this->admin_user);
|
|
}
|
|
|
|
/**
|
|
* Test breakpoint administration functionality
|
|
*/
|
|
function testBreakpointAdmin() {
|
|
// Add breakpoint.
|
|
$this->drupalGet('admin/config/media/breakpoints');
|
|
$name = $this->randomName();
|
|
$mediaquery = '(min-width: 600px)';
|
|
$edit = array(
|
|
'breakpoints[new][name]' => $name,
|
|
'breakpoints[new][machine_name]' => drupal_strtolower($name),
|
|
'breakpoints[new][breakpoint]' => $mediaquery,
|
|
);
|
|
|
|
$this->drupalPost(NULL, $edit, t('Save'));
|
|
|
|
$machine_name = BREAKPOINTS_SOURCE_TYPE_CUSTOM . '.user.' . drupal_strtolower($name);
|
|
// Verify the breakpoint was saved and verify default weight of the breakpoint.
|
|
$this->drupalGet('admin/config/media/breakpoints');
|
|
$this->assertFieldByName("breakpoints[$machine_name][weight]", 0, t('Breakpoint weight was saved.'));
|
|
|
|
// Change the weight of the breakpoint.
|
|
$edit = array(
|
|
"breakpoints[$machine_name][weight]" => 5,
|
|
);
|
|
$this->drupalPost(NULL, $edit, t('Save'));
|
|
$this->assertFieldByName("breakpoints[$machine_name][weight]", 5, t('Breakpoint weight was saved.'));
|
|
|
|
// Submit the form.
|
|
$this->drupalGet('admin/config/media/breakpoints');
|
|
$this->drupalPost(NULL, array(), t('Save'));
|
|
|
|
// Verify that the custom weight of the breakpoint has been retained.
|
|
$this->drupalGet('admin/config/media/breakpoints');
|
|
$this->assertFieldByName("breakpoints[$machine_name][weight]", 5, t('Breakpoint weight was retained.'));
|
|
|
|
// Change the multipliers of the breakpoint.
|
|
$edit = array(
|
|
"breakpoints[$machine_name][multipliers][1.5x]" => "1.5x",
|
|
);
|
|
$this->drupalPost(NULL, $edit, t('Save'));
|
|
$id = drupal_clean_css_identifier('edit-breakpoints-' . $machine_name . '-multipliers-');
|
|
$this->assertFieldChecked($id . '15x', t('Breakpoint multipliers were saved.'));
|
|
$this->assertNoFieldChecked($id . '2x', t('Breakpoint multipliers were saved.'));
|
|
|
|
// Submit the form.
|
|
$this->drupalGet('admin/config/media/breakpoints');
|
|
$this->drupalPost(NULL, array(), t('Save'));
|
|
|
|
// Verify that the custom weight of the breakpoint has been retained.
|
|
$this->drupalGet('admin/config/media/breakpoints');
|
|
$this->assertFieldChecked($id . '15x', t('Breakpoint multipliers were retained.'));
|
|
$this->assertNoFieldChecked($id . '2x', t('Breakpoint multipliers were retained.'));
|
|
|
|
// Disable breakpoint.
|
|
$this->assertLinkByHref('admin/config/media/breakpoints/disable/' . $machine_name);
|
|
$this->drupalGet('admin/config/media/breakpoints/disable/' . $machine_name);
|
|
$this->drupalPost(NULL, array(), t('Confirm'));
|
|
|
|
// Verify that the breakpoint is disabled.
|
|
$this->assertLinkByHref('admin/config/media/breakpoints/enable/' . $machine_name, 0, t('Breakpoint was disabled.'));
|
|
|
|
// Attempt to create a breakpoint with the same machine name as the disabled
|
|
// breakpoint but with a different human readable name.
|
|
$edit = array(
|
|
'breakpoints[new][name]' => 'New Breakpoint',
|
|
'breakpoints[new][machine_name]' => drupal_strtolower($name),
|
|
'breakpoints[new][breakpoint]' => $mediaquery,
|
|
'breakpoints[new][multipliers][1.5x]' => 0,
|
|
'breakpoints[new][multipliers][2x]' => 0,
|
|
);
|
|
$this->drupalPost(NULL, $edit, t('Save'));
|
|
$this->assertText('The machine-readable name is already in use. It must be unique.');
|
|
|
|
// Delete breakpoint.
|
|
$this->assertLinkByHref('admin/config/media/breakpoints/delete/' . $machine_name);
|
|
$this->drupalGet('admin/config/media/breakpoints/delete/' . $machine_name);
|
|
$this->drupalPost(NULL, array(), t('Confirm'));
|
|
|
|
// Verify that deleted breakpoint no longer exists.
|
|
$this->drupalGet('admin/config/media/breakpoints');
|
|
$this->assertNoFieldByName('breakpoints[' . $machine_name . '][name]', '', t('Deleted breakpoint no longer exists'));
|
|
}
|
|
|
|
/**
|
|
* Test breakpoint export/import functionality.
|
|
*/
|
|
function testBreakpointExportImport() {
|
|
$breakpoint = new stdClass();
|
|
$breakpoint->disabled = FALSE;
|
|
$breakpoint->api_version = 1;
|
|
$breakpoint->machine_name = 'custom.user.test';
|
|
$breakpoint->name = 'test';
|
|
$breakpoint->breakpoint = '(min-width: 600px)';
|
|
$breakpoint->source = 'user';
|
|
$breakpoint->source_type = 'custom';
|
|
$breakpoint->status = 1;
|
|
$breakpoint->weight = 0;
|
|
$breakpoint->multipliers = array(
|
|
'1.5x' => 0,
|
|
'2x' => 0,
|
|
);
|
|
|
|
// Import a breakpoint;
|
|
$importstring = array();
|
|
$importstring[] = '$breakpoint = new stdClass();';
|
|
$importstring[] = '$breakpoint->disabled = FALSE; /* Edit this to true to make a default breakpoint disabled initially */';
|
|
$importstring[] = '$breakpoint->api_version = 1;';
|
|
$importstring[] = '$breakpoint->machine_name = \'custom.user.test\';';
|
|
$importstring[] = '$breakpoint->name = \'test\';';
|
|
$importstring[] = '$breakpoint->breakpoint = \'(min-width: 600px)\';';
|
|
$importstring[] = '$breakpoint->source = \'user\';';
|
|
$importstring[] = '$breakpoint->source_type = \'custom\';';
|
|
$importstring[] = '$breakpoint->status = 1;';
|
|
$importstring[] = '$breakpoint->weight = 0;';
|
|
$importstring[] = '$breakpoint->multipliers = array(';
|
|
$importstring[] = ' \'1.5x\' => 0,';
|
|
$importstring[] = ' \'2x\' => 0,';
|
|
$importstring[] = ');';
|
|
|
|
$this->drupalGet('admin/config/media/breakpoints/groups/import-breakpoint');
|
|
$edit = array(
|
|
"import" => implode("\n", $importstring),
|
|
);
|
|
$this->drupalPost(NULL, $edit, t('Import'));
|
|
|
|
// Verify the breakpoint was imported.
|
|
$this->drupalGet('admin/config/media/breakpoints');
|
|
$this->assertField('breakpoints[' . $breakpoint->machine_name . '][name]', t('Breakpoint imported correctly.'));
|
|
|
|
// Verify the breakpoint is in the database, is loadable and has the correct data.
|
|
$this->verifyBreakpoint($breakpoint, FALSE);
|
|
|
|
// Verify the breakpoint exports correctly.
|
|
$this->drupalGet('admin/config/media/breakpoints/export/' . $breakpoint->machine_name);
|
|
foreach ($importstring as $importline) {
|
|
$importline = trim($importline);
|
|
if (!empty($importline)) {
|
|
// Text in a textarea is htmlencoded.
|
|
$this->assertRaw(check_plain($importline));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Base class for Breakpoint Group tests.
|
|
*/
|
|
abstract class BreakpointGroupTestCase extends DrupalWebTestCase {
|
|
function setUp() {
|
|
$modules = func_get_args();
|
|
if (isset($modules[0]) && is_array($modules[0])) {
|
|
$modules = $modules[0];
|
|
}
|
|
array_unshift($modules, 'breakpoints');
|
|
parent::setUp($modules);
|
|
}
|
|
|
|
/**
|
|
* Verify that a breakpoint is properly stored.
|
|
*/
|
|
function verifyBreakpointGroup($group, $in_database = TRUE) {
|
|
$t_args = array('%group' => $group->name);
|
|
$properties = array('name', 'machine_name', 'breakpoints');
|
|
if ($in_database) {
|
|
$properties[] = 'id';
|
|
}
|
|
$assert_group = t('Breakpoints API');
|
|
// Verify text format database record.
|
|
$db_group = db_select('breakpoint_group', 'bg')
|
|
->fields('bg')
|
|
->condition('machine_name', $group->machine_name)
|
|
->execute()
|
|
->fetchObject();
|
|
$db_group->breakpoints = unserialize($db_group->breakpoints);
|
|
foreach ($properties as $property) {
|
|
$this->assertEqual($db_group->{$property}, $group->{$property}, t('Database: Proper ' . $property . ' for breakpoint group %group.', $t_args), $assert_group);
|
|
}
|
|
|
|
// Verify breakpoints_breakpoint_group_load().
|
|
$load_group = breakpoints_breakpoint_group_load($group->machine_name);
|
|
foreach ($properties as $property) {
|
|
$this->assertEqual($load_group->{$property}, $group->{$property}, t('breakpoints_breakpoint_group_load: Proper ' . $property . ' for breakpoint group %group.', $t_args), $assert_group);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Tests for breakpoint group CRUD operations.
|
|
*/
|
|
class BreakpointGroupCRUDTestCase extends BreakpointGroupTestCase {
|
|
|
|
public static function getInfo() {
|
|
return array(
|
|
'name' => 'Breakpoint Group CRUD operations',
|
|
'description' => 'Test creation, loading, updating, deleting of breakpoint groups.',
|
|
'group' => 'Breakpoints',
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Test CRUD operations for breakpoint groups.
|
|
*/
|
|
function testBreakpointGroupCRUD() {
|
|
// Add breakpoints.
|
|
$breakpoints = array();
|
|
for ($i = 0; $i <= 3; $i++) {
|
|
$breakpoint = new stdClass();
|
|
$breakpoint->disabled = FALSE;
|
|
$breakpoint->api_version = 1;
|
|
$breakpoint->name = $this->randomName();
|
|
$width = ($i + 1) * 200;
|
|
$breakpoint->breakpoint = "(min-width: {$width}px)";
|
|
$breakpoint->source = 'user';
|
|
$breakpoint->source_type = 'custom';
|
|
$breakpoint->status = 1;
|
|
$breakpoint->weight = $i;
|
|
$breakpoint->multipliers = array(
|
|
'1.5x' => 0,
|
|
'2x' => 0,
|
|
);
|
|
breakpoints_breakpoint_save($breakpoint);
|
|
$breakpoints[$breakpoint->machine_name] = $breakpoint;
|
|
}
|
|
// Add a breakpoint group with minimum data only.
|
|
$group = new stdClass();
|
|
$group->name = $this->randomName();
|
|
$group->machine_name = drupal_strtolower($group->name);
|
|
$group->breakpoints = array();
|
|
breakpoints_breakpoint_group_save($group);
|
|
$this->verifyBreakpointGroup($group);
|
|
|
|
// Update the breakpoint group.
|
|
$group->breakpoints = array_keys($breakpoints);
|
|
breakpoints_breakpoint_group_save($group);
|
|
$this->verifyBreakpointGroup($group);
|
|
|
|
// Delete the breakpoint group.
|
|
breakpoints_breakpoint_group_delete($group);
|
|
$db_group = db_select('breakpoint_group', 'bg')->fields('bg')->condition('machine_name', $group->machine_name)->execute()->fetchObject();
|
|
$this->assertFalse($db_group, t('Database: Deleted breakpoint group no longer exists'), t('Breakpoints API'));
|
|
$this->assertFalse(breakpoints_breakpoint_group_load($group->machine_name), t('breakpoints_breakpoint_group_load: Loading a deleted breakpoint group returns false.'), t('Breakpoints API'));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Tests for breakpoint groups admin interface.
|
|
*/
|
|
class BreakpointGroupAdminTestCase extends BreakpointGroupTestCase {
|
|
|
|
public static function getInfo() {
|
|
return array(
|
|
'name' => 'Breakpoint Group administration functionality',
|
|
'description' => 'Thoroughly test the administrative interface of the breakpoints module.',
|
|
'group' => 'Breakpoints',
|
|
);
|
|
}
|
|
|
|
function setUp() {
|
|
parent::setUp();
|
|
|
|
// Create user.
|
|
$this->admin_user = $this->drupalCreateUser(array(
|
|
'administer breakpoints',
|
|
));
|
|
|
|
$this->drupalLogin($this->admin_user);
|
|
}
|
|
|
|
/**
|
|
* Test breakpoint administration functionality
|
|
*/
|
|
function testBreakpointGroupAdmin() {
|
|
// Add breakpoints.
|
|
$breakpoints = array();
|
|
for ($i = 0; $i <= 3; $i++) {
|
|
$breakpoint = new stdClass();
|
|
$breakpoint->disabled = FALSE;
|
|
$breakpoint->api_version = 1;
|
|
$breakpoint->name = $this->randomName();
|
|
$width = ($i + 1) * 200;
|
|
$breakpoint->breakpoint = "(min-width: {$width}px)";
|
|
$breakpoint->source = 'user';
|
|
$breakpoint->source_type = 'custom';
|
|
$breakpoint->status = 1;
|
|
$breakpoint->weight = $i;
|
|
$breakpoint->multipliers = array(
|
|
'1.5x' => 0,
|
|
'2x' => 0,
|
|
);
|
|
breakpoints_breakpoint_save($breakpoint);
|
|
$breakpoints[$breakpoint->machine_name] = $breakpoint;
|
|
}
|
|
// Add breakpoint group.
|
|
$this->drupalGet('admin/config/media/breakpoints/groups/add');
|
|
$name = $this->randomName();
|
|
$machine_name = drupal_strtolower($name);
|
|
$breakpoint = reset($breakpoints);
|
|
$edit = array(
|
|
'name' => $name,
|
|
'machine_name' => $machine_name,
|
|
'breakpoints[' . $breakpoint->machine_name . ']' => $breakpoint->machine_name,
|
|
);
|
|
|
|
$this->drupalPost(NULL, $edit, t('Save'));
|
|
|
|
// Verify the breakpoint was saved.
|
|
$this->drupalGet('admin/config/media/breakpoints/groups/' . $machine_name);
|
|
$this->assertResponse(200, t('Breakpoint group was saved.'));
|
|
|
|
// Verify the breakpoint was attached to the group.
|
|
$this->assertField('breakpoints[' . $breakpoint->machine_name . '][name]', t('The Breakpoint was added.'));
|
|
|
|
// Add breakpoints to the breakpoint group.
|
|
$this->drupalGet('admin/config/media/breakpoints/groups/' . $machine_name . '/edit');
|
|
$edit = array();
|
|
foreach ($breakpoints as $key => $breakpoint) {
|
|
$edit['breakpoints[' . $key . ']'] = $key;
|
|
}
|
|
$this->drupalPost(NULL, $edit, t('Save'));
|
|
|
|
// Verify the breakpoints were attached to the group.
|
|
$this->drupalGet('admin/config/media/breakpoints/groups/' . $machine_name);
|
|
foreach ($breakpoints as $key => $breakpoint) {
|
|
$this->assertField('breakpoints[' . $key . '][name]', t('The Breakpoint was added.'));
|
|
}
|
|
|
|
// Change the order breakpoints of the breakpoints within the breakpoint group.
|
|
$breakpoint = end($breakpoints);
|
|
$edit = array(
|
|
"breakpoints[{$breakpoint->machine_name}][weight]" => 0,
|
|
);
|
|
$this->drupalPost(NULL, $edit, t('Save'));
|
|
$this->assertFieldByName("breakpoints[{$breakpoint->machine_name}][weight]", 0, t('Breakpoint weight was saved.'));
|
|
|
|
// Submit the form.
|
|
$this->drupalGet('admin/config/media/breakpoints');
|
|
$this->drupalPost(NULL, array(), t('Save'));
|
|
|
|
// Verify that the custom weight of the breakpoint has been retained.
|
|
$this->drupalGet('admin/config/media/breakpoints/groups/' . $machine_name);
|
|
$this->assertFieldByName("breakpoints[{$breakpoint->machine_name}][weight]", 0, t('Breakpoint weight was retained.'));
|
|
|
|
// Verify that the weight has only changed within the group.
|
|
$this->drupalGet('admin/config/media/breakpoints');
|
|
$this->assertFieldByName("breakpoints[{$breakpoint->machine_name}][weight]", $breakpoint->weight, t('Breakpoint weight has only changed within the group.'));
|
|
|
|
// Change the multipliers of the breakpoint within the group.
|
|
$edit = array(
|
|
"breakpoints[{$breakpoint->machine_name}][multipliers][1.5x]" => "1.5x",
|
|
);
|
|
$this->drupalPost(NULL, $edit, t('Save'));
|
|
$id = drupal_clean_css_identifier('edit-breakpoints-' . $breakpoint->machine_name . '-multipliers-');
|
|
$this->assertFieldChecked($id . '15x', t('Breakpoint multipliers were saved.'));
|
|
$this->assertNoFieldChecked($id . '2x', t('Breakpoint multipliers were saved.'));
|
|
|
|
// Submit the form.
|
|
$this->drupalGet('admin/config/media/breakpoints/groups/' . $machine_name);
|
|
$this->drupalPost(NULL, array(), t('Save'));
|
|
|
|
// Verify that the multipliers of the breakpoint has been retained.
|
|
$this->drupalGet('admin/config/media/breakpoints/groups/' . $machine_name);
|
|
$this->assertFieldChecked($id . '15x', t('Breakpoint multipliers were retained.'));
|
|
$this->assertNoFieldChecked($id . '2x', t('Breakpoint multipliers were retained.'));
|
|
|
|
// Verify that the multipliers only changed within the group.
|
|
$this->drupalGet('admin/config/media/breakpoints');
|
|
$this->assertFieldChecked($id . '15x', t('Breakpoint multipliers were retained.'));
|
|
$this->assertNoFieldChecked($id . '2x', t('Breakpoint multipliers were retained.'));
|
|
|
|
// Attempt to create a breakpoint group of the same machine name as the disabled
|
|
// breakpoint but with a different human readable name.
|
|
// Add breakpoint group.
|
|
$this->drupalGet('admin/config/media/breakpoints/groups/add');
|
|
$breakpoint = reset($breakpoints);
|
|
$edit = array(
|
|
'name' => $this->randomName(),
|
|
'machine_name' => $machine_name,
|
|
'breakpoints[' . $breakpoint->machine_name . ']' => $breakpoint->machine_name,
|
|
);
|
|
|
|
$this->drupalPost(NULL, $edit, t('Save'));
|
|
$this->assertText('The machine-readable name is already in use. It must be unique.');
|
|
|
|
// Delete breakpoint.
|
|
$this->drupalGet('admin/config/media/breakpoints/groups/' . $machine_name . '/delete');
|
|
$this->drupalPost(NULL, array(), t('Confirm'));
|
|
|
|
// Verify that deleted breakpoint no longer exists.
|
|
$this->drupalGet('admin/config/media/breakpoints/groups/' . $machine_name);
|
|
$this->assertResponse(404, t('Breakpoint group was deleted.'));
|
|
}
|
|
|
|
/**
|
|
* Test breakpoint group export/import functionality.
|
|
*/
|
|
function testBreakpointGroupExportImport() {
|
|
/**
|
|
* Breakpoints.
|
|
*/
|
|
$breakpoints = array();
|
|
$breakpoint = new stdClass();
|
|
$breakpoint->disabled = FALSE;
|
|
$breakpoint->api_version = 1;
|
|
$breakpoint->machine_name = 'custom.user.mobile';
|
|
$breakpoint->name = 'mobile';
|
|
$breakpoint->breakpoint = '(min-width: 0px)';
|
|
$breakpoint->source = 'user';
|
|
$breakpoint->source_type = 'custom';
|
|
$breakpoint->status = 1;
|
|
$breakpoint->weight = 4;
|
|
$breakpoint->multipliers = array(
|
|
'1.5x' => 0,
|
|
'2x' => 0,
|
|
);
|
|
|
|
$breakpoints[$breakpoint->machine_name] = $breakpoint;
|
|
|
|
$breakpoint = new stdClass();
|
|
$breakpoint->disabled = FALSE;
|
|
$breakpoint->api_version = 1;
|
|
$breakpoint->machine_name = 'custom.user.narrow';
|
|
$breakpoint->name = 'narrow';
|
|
$breakpoint->breakpoint = '(min-width: 560px)';
|
|
$breakpoint->source = 'user';
|
|
$breakpoint->source_type = 'custom';
|
|
$breakpoint->status = 1;
|
|
$breakpoint->weight = 5;
|
|
$breakpoint->multipliers = array(
|
|
'1.5x' => 0,
|
|
'2x' => 0,
|
|
);
|
|
|
|
$breakpoints[$breakpoint->machine_name] = $breakpoint;
|
|
|
|
$breakpoint = new stdClass();
|
|
$breakpoint->disabled = FALSE;
|
|
$breakpoint->api_version = 1;
|
|
$breakpoint->machine_name = 'custom.user.wide';
|
|
$breakpoint->name = 'wide';
|
|
$breakpoint->breakpoint = '(min-width: 851px)';
|
|
$breakpoint->source = 'user';
|
|
$breakpoint->source_type = 'custom';
|
|
$breakpoint->status = 1;
|
|
$breakpoint->weight = 6;
|
|
$breakpoint->multipliers = array(
|
|
'1.5x' => 0,
|
|
'2x' => 0,
|
|
);
|
|
|
|
$breakpoints[$breakpoint->machine_name] = $breakpoint;
|
|
|
|
$breakpoint = new stdClass();
|
|
$breakpoint->disabled = FALSE;
|
|
$breakpoint->api_version = 1;
|
|
$breakpoint->machine_name = 'custom.user.tv';
|
|
$breakpoint->name = 'tv';
|
|
$breakpoint->breakpoint = 'only screen and (min-width: 3456px)';
|
|
$breakpoint->source = 'user';
|
|
$breakpoint->source_type = 'custom';
|
|
$breakpoint->status = 1;
|
|
$breakpoint->weight = 7;
|
|
$breakpoint->multipliers = array(
|
|
'1.5x' => 0,
|
|
'2x' => 0,
|
|
);
|
|
|
|
$breakpoints[$breakpoint->machine_name] = $breakpoint;
|
|
|
|
/**
|
|
* Breakpoint group.
|
|
*/
|
|
$breakpoint_group = new stdClass();
|
|
$breakpoint_group->disabled = FALSE; /* Edit this to true to make a default breakpoint_group disabled initially */
|
|
$breakpoint_group->api_version = 1;
|
|
$breakpoint_group->machine_name = 'customgroup';
|
|
$breakpoint_group->name = 'Customgroup';
|
|
$breakpoint_group->breakpoints = array_keys($breakpoints);
|
|
$breakpoint_group->type = 'custom';
|
|
$breakpoint_group->overridden = 0;
|
|
|
|
$importstring = array();
|
|
$importstring[] = '/**';
|
|
$importstring[] = ' * Breakpoints.';
|
|
$importstring[] = ' */';
|
|
$importstring[] = '$breakpoints = array();';
|
|
$importstring[] = '$breakpoint = new stdClass();';
|
|
$importstring[] = '$breakpoint->disabled = FALSE; /* Edit this to true to make a default breakpoint disabled initially */';
|
|
$importstring[] = '$breakpoint->api_version = 1;';
|
|
$importstring[] = '$breakpoint->machine_name = \'custom.user.mobile\';';
|
|
$importstring[] = '$breakpoint->name = \'mobile\';';
|
|
$importstring[] = '$breakpoint->breakpoint = \'(min-width: 0px)\';';
|
|
$importstring[] = '$breakpoint->source = \'user\';';
|
|
$importstring[] = '$breakpoint->source_type = \'custom\';';
|
|
$importstring[] = '$breakpoint->status = 1;';
|
|
$importstring[] = '$breakpoint->weight = 4;';
|
|
$importstring[] = '$breakpoint->multipliers = array(';
|
|
$importstring[] = ' \'1.5x\' => 0,';
|
|
$importstring[] = ' \'2x\' => 0,';
|
|
$importstring[] = ');';
|
|
$importstring[] = '';
|
|
$importstring[] = '$breakpoints[] = $breakpoint;';
|
|
$importstring[] = '';
|
|
$importstring[] = '$breakpoint = new stdClass();';
|
|
$importstring[] = '$breakpoint->disabled = FALSE; /* Edit this to true to make a default breakpoint disabled initially */';
|
|
$importstring[] = '$breakpoint->api_version = 1;';
|
|
$importstring[] = '$breakpoint->machine_name = \'custom.user.narrow\';';
|
|
$importstring[] = '$breakpoint->name = \'narrow\';';
|
|
$importstring[] = '$breakpoint->breakpoint = \'(min-width: 560px)\';';
|
|
$importstring[] = '$breakpoint->source = \'user\';';
|
|
$importstring[] = '$breakpoint->source_type = \'custom\';';
|
|
$importstring[] = '$breakpoint->status = 1;';
|
|
$importstring[] = '$breakpoint->weight = 5;';
|
|
$importstring[] = '$breakpoint->multipliers = array(';
|
|
$importstring[] = ' \'1.5x\' => 0,';
|
|
$importstring[] = ' \'2x\' => 0,';
|
|
$importstring[] = ');';
|
|
$importstring[] = '';
|
|
$importstring[] = '$breakpoints[] = $breakpoint;';
|
|
$importstring[] = '';
|
|
$importstring[] = '$breakpoint = new stdClass();';
|
|
$importstring[] = '$breakpoint->disabled = FALSE; /* Edit this to true to make a default breakpoint disabled initially */';
|
|
$importstring[] = '$breakpoint->api_version = 1;';
|
|
$importstring[] = '$breakpoint->machine_name = \'custom.user.wide\';';
|
|
$importstring[] = '$breakpoint->name = \'wide\';';
|
|
$importstring[] = '$breakpoint->breakpoint = \'(min-width: 851px)\';';
|
|
$importstring[] = '$breakpoint->source = \'user\';';
|
|
$importstring[] = '$breakpoint->source_type = \'custom\';';
|
|
$importstring[] = '$breakpoint->status = 1;';
|
|
$importstring[] = '$breakpoint->weight = 6;';
|
|
$importstring[] = '$breakpoint->multipliers = array(';
|
|
$importstring[] = ' \'1.5x\' => 0,';
|
|
$importstring[] = ' \'2x\' => 0,';
|
|
$importstring[] = ');';
|
|
$importstring[] = '';
|
|
$importstring[] = '$breakpoints[] = $breakpoint;';
|
|
$importstring[] = '';
|
|
$importstring[] = '$breakpoint = new stdClass();';
|
|
$importstring[] = '$breakpoint->disabled = FALSE; /* Edit this to true to make a default breakpoint disabled initially */';
|
|
$importstring[] = '$breakpoint->api_version = 1;';
|
|
$importstring[] = '$breakpoint->machine_name = \'custom.user.tv\';';
|
|
$importstring[] = '$breakpoint->name = \'tv\';';
|
|
$importstring[] = '$breakpoint->breakpoint = \'only screen and (min-width: 3456px)\';';
|
|
$importstring[] = '$breakpoint->source = \'user\';';
|
|
$importstring[] = '$breakpoint->source_type = \'custom\';';
|
|
$importstring[] = '$breakpoint->status = 1;';
|
|
$importstring[] = '$breakpoint->weight = 7;';
|
|
$importstring[] = '$breakpoint->multipliers = array(';
|
|
$importstring[] = ' \'1.5x\' => 0,';
|
|
$importstring[] = ' \'2x\' => 0,';
|
|
$importstring[] = ');';
|
|
$importstring[] = '';
|
|
$importstring[] = '$breakpoints[] = $breakpoint;';
|
|
$importstring[] = '';
|
|
$importstring[] = '/**';
|
|
$importstring[] = ' * Breakpoint group.';
|
|
$importstring[] = ' */';
|
|
$importstring[] = '$breakpoint_group = new stdClass();';
|
|
$importstring[] = '$breakpoint_group->disabled = FALSE; /* Edit this to true to make a default breakpoint_group disabled initially */';
|
|
$importstring[] = '$breakpoint_group->api_version = 1;';
|
|
$importstring[] = '$breakpoint_group->machine_name = \'customgroup\';';
|
|
$importstring[] = '$breakpoint_group->name = \'Customgroup\';';
|
|
$importstring[] = '$breakpoint_group->breakpoints = $breakpoints;';
|
|
$importstring[] = '$breakpoint_group->type = \'custom\';';
|
|
$importstring[] = '$breakpoint_group->overridden = 0;';
|
|
|
|
$this->drupalGet('admin/config/media/breakpoints/groups/import');
|
|
$edit = array(
|
|
"import" => implode("\n", $importstring),
|
|
);
|
|
$this->drupalPost(NULL, $edit, t('Import'));
|
|
|
|
// Verify the breakpoint group was imported.
|
|
$this->drupalGet('admin/config/media/breakpoints/groups/' . $breakpoint_group->machine_name);
|
|
$this->assertResponse(200, t('Breakpoint group imported correctly'));
|
|
|
|
// Verify the breakpoint group is in the database, is loadable and has the correct data.
|
|
$this->verifyBreakpointGroup($breakpoint_group, FALSE);
|
|
|
|
// Verify the breakpoint group exports correctly.
|
|
$this->drupalGet('admin/config/media/breakpoints/groups/' . $breakpoint_group->machine_name . '/export');
|
|
foreach ($importstring as $importline) {
|
|
$importline = trim($importline);
|
|
if (!empty($importline)) {
|
|
// Text in a textarea is htmlencoded.
|
|
$this->assertRaw(check_plain($importline));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Test breakpoints provided by themes.
|
|
*/
|
|
class BreakpointsThemeTestCase extends BreakpointGroupTestCase {
|
|
public static function getInfo() {
|
|
return array(
|
|
'name' => 'Breakpoint Theme functionality',
|
|
'description' => 'Thoroughly test the breakpoints provided by a theme.',
|
|
'group' => 'Breakpoints',
|
|
);
|
|
}
|
|
|
|
public function setUp() {
|
|
parent::setUp('breakpoints_theme_test');
|
|
theme_enable(array('breakpoints_test_theme'));
|
|
// Create user.
|
|
$this->admin_user = $this->drupalCreateUser(array(
|
|
'administer breakpoints',
|
|
));
|
|
|
|
$this->drupalLogin($this->admin_user);
|
|
}
|
|
|
|
/**
|
|
* Test the breakpoints provided by a theme.
|
|
*/
|
|
public function testThemeBreakpoints() {
|
|
// Verify the breakpoint group for breakpoints_test_theme was created.
|
|
$breakpoint_group = new stdClass();
|
|
$breakpoint_group->disabled = FALSE; /* Edit this to true to make a default breakpoint_group disabled initially */
|
|
$breakpoint_group->api_version = 1;
|
|
$breakpoint_group->machine_name = 'breakpoints_test_theme';
|
|
$breakpoint_group->name = 'Breakpoints test theme';
|
|
$breakpoint_group->breakpoints = array(
|
|
'breakpoints.theme.breakpoints_test_theme.mobile',
|
|
'breakpoints.theme.breakpoints_test_theme.narrow',
|
|
'breakpoints.theme.breakpoints_test_theme.wide',
|
|
'breakpoints.theme.breakpoints_test_theme.tv',
|
|
);
|
|
$breakpoint_group->type = 'theme';
|
|
$breakpoint_group->overridden = 0;
|
|
$this->verifyBreakpointGroup($breakpoint_group, FALSE);
|
|
|
|
// Override the breakpoints.
|
|
$this->drupalGet('admin/config/media/breakpoints/groups/' . $breakpoint_group->machine_name);
|
|
$this->drupalPost(NULL, array(), t('Override theme breakpoints'));
|
|
|
|
// Clear CTools cache, since drupalGet and drupalPost are different requests than the request
|
|
// this test is running in, the group object is still in the static cache, so we need to clear
|
|
// it manually.
|
|
ctools_export_load_object_reset('breakpoint_group');
|
|
|
|
// Verify the group is overridden.
|
|
$breakpoint_group->breakpoints = array(
|
|
'custom.breakpoints_test_theme.mobile',
|
|
'custom.breakpoints_test_theme.narrow',
|
|
'custom.breakpoints_test_theme.wide',
|
|
'custom.breakpoints_test_theme.tv',
|
|
);
|
|
$breakpoint_group->overridden = 1;
|
|
$this->verifyBreakpointGroup($breakpoint_group, FALSE);
|
|
|
|
// Verify there is no override button for this group anymore.
|
|
$this->drupalGet('admin/config/media/breakpoints/groups/' . $breakpoint_group->machine_name);
|
|
$this->assertNoFieldById('edit-override');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Test breakpoint multipliers.
|
|
*/
|
|
class BreakpointMultipliersTestCase extends DrupalWebTestCase {
|
|
|
|
public static function getInfo() {
|
|
return array(
|
|
'name' => 'Breakpoint Multiplier functionality',
|
|
'description' => 'Thoroughly test the breakpoint multiplier functionality (CRUD).',
|
|
'group' => 'Breakpoints',
|
|
);
|
|
}
|
|
|
|
public function setUp() {
|
|
parent::setUp('breakpoints', 'breakpoints_theme_test');
|
|
// Enable our test theme so we have breakpoints to test on.
|
|
theme_enable(array('breakpoints_test_theme'));
|
|
// Create user.
|
|
$this->admin_user = $this->drupalCreateUser(array(
|
|
'administer breakpoints',
|
|
));
|
|
|
|
$this->drupalLogin($this->admin_user);
|
|
}
|
|
|
|
/**
|
|
* Test breakpoints multipliers functionality.
|
|
*/
|
|
public function testBreakpointMultipliers() {
|
|
// Verify the default multipliers are visible.
|
|
$this->drupalGet('admin/config/media/breakpoints/multipliers');
|
|
$settings = breakpoints_settings();
|
|
foreach ($settings->multipliers as $multiplier) {
|
|
$this->assertRaw($multiplier, t('Default multiplier %multiplier found', array('%multiplier' => $multiplier)));
|
|
if ($multiplier != '1x') {
|
|
$this->assertFieldByName('multipliers[' . $multiplier . ']', $multiplier);
|
|
}
|
|
}
|
|
|
|
// Verify the '1x' multiplier can't be deleted.
|
|
$this->drupalGet('admin/config/media/breakpoints/multipliers/1x/delete');
|
|
$this->assertText(t('Multiplier 1x can not be deleted!'), t('Multiplier 1x can not be deleted'));
|
|
$this->assertNoFieldById('edit-submit');
|
|
|
|
// Add a multiplier.
|
|
$new_multiplier = drupal_strtolower($this->randomName());
|
|
$this->drupalGet('admin/config/media/breakpoints/multipliers');
|
|
$edit = array(
|
|
'multipliers[new]' => $new_multiplier,
|
|
);
|
|
$this->drupalPost(NULL, $edit, t('Save'));
|
|
|
|
// Verify the multiplier was added to the database.
|
|
$settings = breakpoints_settings();
|
|
$this->assertTrue(in_array($new_multiplier, $settings->multipliers), t('Multiplier %multiplier was added.', array('%multiplier' => $new_multiplier)));
|
|
|
|
// Verify the new multiplier is visible on the multiplier overview page.
|
|
$this->assertFieldByName('multipliers[' . $new_multiplier . ']', $new_multiplier);
|
|
|
|
// Update a multiplier.
|
|
$updated_multiplier = drupal_strtolower($this->randomName());
|
|
$edit = array(
|
|
'multipliers[' . $new_multiplier . ']' => $updated_multiplier,
|
|
);
|
|
$this->drupalPost(NULL, $edit, t('Save'));
|
|
|
|
// Verify the multiplier was updated in the database.
|
|
$settings = breakpoints_settings();
|
|
$this->assertFalse(in_array($new_multiplier, $settings->multipliers), t('Multiplier %multiplier was updated.', array('%multiplier' => $updated_multiplier)));
|
|
$this->assertTrue(in_array($updated_multiplier, $settings->multipliers), t('Multiplier %multiplier was updated.', array('%multiplier' => $updated_multiplier)));
|
|
|
|
// Verify the updated multiplier is visible on the multiplier overview page.
|
|
$this->assertNoFieldByName('multipliers[' . $new_multiplier . ']');
|
|
$this->assertFieldByName('multipliers[' . $updated_multiplier . ']', $updated_multiplier);
|
|
$new_multiplier = $updated_multiplier;
|
|
|
|
// Verify the default multipliers are visible on the global breakpoints page.
|
|
$this->drupalGet('admin/config/media/breakpoints');
|
|
foreach (breakpoints_breakpoint_load_all() as $breakpoint) {
|
|
foreach ($settings->multipliers as $multiplier) {
|
|
if ($multiplier != '1x') {
|
|
$this->assertFieldByName('breakpoints[' . $breakpoint->machine_name . '][multipliers][' . $multiplier . ']');
|
|
}
|
|
else {
|
|
// Multiplier 1x can not be disabled for any breakpoint.
|
|
$this->assertNoFieldByName('breakpoints[' . $breakpoint->machine_name . '][multipliers][' . $multiplier . ']');
|
|
}
|
|
}
|
|
}
|
|
|
|
// Enable a multiplier for a breakpoint and verify if it's enabled on all pages.
|
|
$edit = array(
|
|
'breakpoints[breakpoints.theme.breakpoints_test_theme.narrow][multipliers][1.5x]' => 1,
|
|
'breakpoints[breakpoints.theme.breakpoints_test_theme.narrow][multipliers][' . $new_multiplier . ']' => 1,
|
|
);
|
|
$this->drupalPost(NULL, $edit, t('Save'));
|
|
|
|
// Verify the checkbox for the enabled multipliers is checked on the global breakpoints page.
|
|
$this->assertFieldChecked('edit-breakpoints-breakpointsthemebreakpoints-test-themenarrow-multipliers-15x');
|
|
$this->assertFieldChecked('edit-breakpoints-breakpointsthemebreakpoints-test-themenarrow-multipliers-' . drupal_clean_css_identifier($new_multiplier));
|
|
|
|
// Verify the checkbox for the enabled multipliers is checked on the breakpoints page of a group.
|
|
$this->drupalGet('admin/config/media/breakpoints/groups/breakpoints_test_theme');
|
|
$this->assertFieldChecked('edit-breakpoints-breakpointsthemebreakpoints-test-themenarrow-multipliers-15x');
|
|
$this->assertFieldChecked('edit-breakpoints-breakpointsthemebreakpoints-test-themenarrow-multipliers-' . drupal_clean_css_identifier($new_multiplier));
|
|
|
|
// Delete a multiplier.
|
|
$this->drupalGet('admin/config/media/breakpoints/multipliers/' . $new_multiplier . '/delete');
|
|
$this->drupalPost(NULL, array(), t('Confirm'));
|
|
$this->assertText('Multiplier ' . $new_multiplier . ' was deleted');
|
|
|
|
// Verify the deleted multiplier is no longer visible on the multiplier overview page.
|
|
$this->drupalGet('admin/config/media/breakpoints/multipliers');
|
|
$this->assertNoFieldByName('multipliers[' . $new_multiplier . ']');
|
|
|
|
// Verify the deleted multiplier is deleted from the database.
|
|
$settings = breakpoints_settings();
|
|
$this->assertFalse(in_array($new_multiplier, $settings->multipliers), t('Multiplier %multiplier was deleted.', array('%multiplier' => $new_multiplier)));
|
|
|
|
// Verify the deleted multiplier is no longer visible on the breakpoints page.
|
|
$this->drupalGet('admin/config/media/breakpoints');
|
|
foreach (breakpoints_breakpoint_load_all() as $breakpoint) {
|
|
$this->assertNoFieldByName('breakpoints[' . $breakpoint->machine_name . '][multipliers][' . $new_multiplier . ']');
|
|
}
|
|
}
|
|
}
|