breakpoints.test in Breakpoints 7
Tests for breakpoints.module
File
breakpoints.testView source
<?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 . ']');
}
}
}
Classes
Name | Description |
---|---|
BreakpointGroupAdminTestCase | Tests for breakpoint groups admin interface. |
BreakpointGroupCRUDTestCase | Tests for breakpoint group CRUD operations. |
BreakpointGroupTestCase | Base class for Breakpoint Group tests. |
BreakpointMultipliersTestCase | Test breakpoint multipliers. |
BreakpointsAdminTestCase | Tests for breakpoints admin interface. |
BreakpointsCRUDTestCase | Tests for breakpoints CRUD operations. |
BreakpointsTestCase | Base class for Breakpoint tests. |
BreakpointsThemeTestCase | Test breakpoints provided by themes. |