Bachir Soussi Chiadmi 1bc61b12ad first import
2015-04-08 11:40:19 +02:00

385 lines
12 KiB
Plaintext

<?php
/**
* @file
* Main OpenLayers Test file
*
* This file contains the tests for the openlayers
* module. Please note that since this module
* depends heavily on Javascript, these tests are
* limited in ensuring that the OpenLayers module
* functions 100% correctly.
*
* For reference, @see:
* http://api.drupal.org/api/drupal/modules--simpletest--drupal_web_test_case.php/class/DrupalWebTestCase/7
*
* @ingroup openlayers
*/
/**
* Test the OpenLayers core functionality.
*/
class OpenLayersCore extends DrupalWebTestCase {
public static function getInfo() {
return array(
'name' => 'OpenLayers Core',
'description' => 'Tests OpenLayers core functions.',
'group' => 'OpenLayers',
);
}
function setUp() {
// Install modules
parent::setUp('openlayers', 'ctools', 'openlayers_ui', 'openlayers_test');
}
/**
* Test openlayers_include
*/
function testInclude() {
$user = $this->drupalCreateUser(array('administer openlayers'));
$this->drupalLogin($user);
// Go to test page and ensure includes happened.
$this->drupalGet('admin/structure/openlayers/test');
$this->assertRaw('openlayers.css', t('The OpenLayers CSS file was included'));
$this->assertRaw('openlayers.js', t('The OpenLayers JS file was included'));
}
/**
* Test map rendering
*/
function testRender() {
$rendered = openlayers_render_map();
//$this->verbose('Map output: ' . var_export($rendered, TRUE));
// Check output
$this->assertTrue((stripos($rendered, 'default') !== FALSE), t('Default name found'));
$this->assertTrue((stripos($rendered, 'id="openlayers-container-openlayers-map') !== FALSE),
t('Container ID found'));
$this->assertTrue((stripos($rendered, 'id="openlayers-map') !== FALSE),
t('Map ID found'));
$this->assertTrue((stripos($rendered, 'class="openlayers-map') !== FALSE),
t('Map Class found'));
}
}
/**
* Test OpenLayers basic UI
*/
class OpenLayersUI extends DrupalWebTestCase {
public static function getInfo() {
return array(
'name' => 'OpenLayers UI',
'description' => 'Tests OpenLayers basic UI.',
'group' => 'OpenLayers',
);
}
function setUp() {
// Install modules
parent::setUp('openlayers', 'ctools', 'openlayers_ui', 'openlayers_test');
}
/**
* Ensure that the source can be updated
*/
function testSourceChange() {
$user = $this->drupalCreateUser(array('administer openlayers'));
$this->drupalLogin($user);
// Update source settings
$new_openlayers_source = 'http://openlayers.org/nightly/OpenLayers.js';
$openlayers_settings = array('openlayers_source' => $new_openlayers_source);
$this->drupalPost('admin/structure/openlayers', $openlayers_settings, t('Save configuration'));
// Go to map page
$this->drupalGet('admin/structure/openlayers');
$this->assertResponse(200, t('User can reach the settings page.'));
// Check that the new source change is represented
$this->drupalGet('admin/structure/openlayers');
$this->assertRaw($new_openlayers_source, t('The OpenLayers source was changed'));
}
}
/**
* Test OpenLayers maps.
*/
class OpenLayersMaps extends DrupalWebTestCase {
public static function getInfo() {
return array(
'name' => 'OpenLayers Maps',
'description' => 'Tests the OpenLayers maps system.',
'group' => 'OpenLayers',
);
}
function setUp() {
// Install modules
parent::setUp('openlayers', 'ctools', 'openlayers_ui', 'openlayers_test');
}
/**
* Ensure that the map shows up in the interface
*/
function testOpenLayersMaps() {
$user = $this->drupalCreateUser(array('administer openlayers'));
$this->drupalLogin($user);
// Go to map page
$this->drupalGet('admin/structure/openlayers/maps');
$this->assertResponse(200, t('User can reach map list.'));
// Ensure that the default test is listed
$this->assertText(t('Default Map'),
t('Assert that the default map\'s title appears.'));
// Maps
$this->drupalGet('admin/structure/openlayers/maps/default/export');
$this->assertResponse(200, t('User can reach default map export page.'));
$this->drupalGet('admin/structure/openlayers/maps/clone/default');
$this->assertResponse(200, t('User can reach default map clone page.'));
$this->drupalGet('admin/structure/openlayers/maps/add');
$this->assertResponse(200, t('User can reach map add page.'));
}
/**
* Add a new map
*/
function testMapAdd() {
$user = $this->drupalCreateUser(array('administer openlayers'));
$this->drupalLogin($user);
// Add new map. Add scaleline so we can look for it later
$map_settings = array(
'name' => 'testing_map',
'title' => t('Testing Map'),
'description' => t('Testing Map description.'),
'behaviors[openlayers_behavior_scaleline][enabled]' => TRUE,
);
$this->drupalPost('admin/structure/openlayers/maps/add', $map_settings, t('Save'));
$this->assertText(t('Map saved.'), t('The map was successfully saved.'));
// Remove Map
$this->drupalPost('admin/structure/openlayers/maps/list/' . $map_settings['name'] . '/delete',
array(), t('Delete'));
$this->assertText('Map was deleted.', t('Map removed succesfully.'));
}
}
/**
* Test OpenLayers styles.
*/
class OpenLayersStyles extends DrupalWebTestCase {
public static function getInfo() {
return array(
'name' => 'OpenLayers Styles',
'description' => 'Tests the OpenLayers Styles system.',
'group' => 'OpenLayers',
);
}
function setUp() {
// Install modules
parent::setUp('openlayers', 'ctools', 'openlayers_ui', 'openlayers_test');
}
function testOpenLayersStyles() {
$user = $this->drupalCreateUser(array('administer openlayers'));
$this->drupalLogin($user);
// New style.
$new_style = array(
'name' => 'unitstyle',
'title' => 'Unit Style',
'description' => 'Unit Style for Drupal',
);
// Check basic navigation.
$this->drupalGet('admin/structure/openlayers/styles/list/default/export');
$this->assertResponse(200, t('User can reach default style export page.'));
$this->drupalGet('admin/structure/openlayers/styles/add');
$this->assertResponse(200, t('User can reach style add page.'));
// Add new style.
$this->drupalPost('admin/structure/openlayers/styles/add', $new_style, t('Save'));
$this->assertText(t('Style saved.'),
t('The style was successfully saved.'));
// Test that the style shows up in the style list.
$this->drupalGet('admin/structure/openlayers/styles');
$this->assertRaw(t('Unit Style'),
t('A new style has been added by the test'));
// Test removing style.
$this->drupalPost('admin/structure/openlayers/styles/list/unitstyle/delete',
array(), t('Delete'));
$this->assertText('Style was deleted.',
t('Style removed succesfully.'));
}
}
/**
* Test OpenLayers layers.
*/
class OpenLayersLayers extends DrupalWebTestCase {
public static function getInfo() {
return array(
'name' => 'OpenLayers Layers',
'description' => 'Tests the OpenLayers Layers system.',
'group' => 'OpenLayers',
);
}
function setUp() {
// Install modules
parent::setUp('openlayers', 'ctools', 'openlayers_ui', 'openlayers_test');
}
function testOpenLayersLayers() {
$user = $this->drupalCreateUser(array('administer openlayers'));
$this->drupalLogin($user);
// New layers to add
$layer_inputs = array(
'openlayers_layer_type_osm' => array(
'name' => 'unitlayerosm',
'title' => 'Unit Layer',
'description' => 'Unit Layer for Drupal',
),
'openlayers_layer_type_xyz' => array(
'name' => 'unitlayerxyz',
'title' => 'Unit Layer',
'description' => 'Unit Layer for Drupal',
),
'openlayers_layer_type_kml' => array(
'name' => 'unitlayerkml',
'title' => 'Unit Layer',
'description' => 'Unit Layer for Drupal',
),
'openlayers_layer_type_wms' => array(
'name' => 'unitlayerwms',
'title' => 'Unit Layer',
'description' => 'Unit Layer for Drupal',
),
'openlayers_layer_type_cloudmade' => array(
'name' => 'unitlayercloudmade',
'title' => 'Unit Layer',
'description' => 'Unit Layer for Drupal',
),
'openlayers_layer_type_yahoo' => array(
'name' => 'unitlayeryahoo',
'title' => 'Unit Layer',
'description' => 'Unit Layer for Drupal',
),
'openlayers_layer_type_bing' => array(
'name' => 'unitlayerbing',
'title' => 'Unit Layer',
'description' => 'Unit Layer for Drupal',
),
'openlayers_layer_type_google' => array(
'name' => 'unitlayergoogle',
'title' => 'Unit Layer',
'description' => 'Unit Layer for Drupal',
)
);
// Basic navigation.
$this->drupalGet('admin/structure/openlayers/layers/add');
$this->assertResponse(200, t('User can reach layer add page.'));
// Go through each new layer for testing.
foreach ($layer_inputs as $layer_type => $input_data) {
// Test saving new layer.
$input_data['layer_type'] = $layer_type;
$this->drupalPost('admin/structure/openlayers/layers/add',
$input_data, t('Save'));
$this->assertText(t('Layer saved.'),
t('The layer was successfully saved.'));
// Ensure that the layer shows up in the list.
$this->drupalGet('admin/structure/openlayers/layers');
$this->assertRaw($input_data['title'],
t('A new layer of layer type %type_name has been added by the test',
array('%type_name' => $layer_type)));
// Test removing layer.
$this->drupalPost('admin/structure/openlayers/layers/list/' .
$input_data['name'] . '/delete', array(), t('Delete'));
$this->assertText('Layer was deleted.',
t('Layer removed succesfully.'));
}
}
}
/**
* Test Case for Map Alters
*/
class OpenLayersMapAlters extends DrupalWebTestCase {
public static function getInfo() {
return array(
'name' => 'OpenLayers Map Alters',
'description' => 'Tests the OpenLayers map alter hooks.',
'group' => 'OpenLayers',
);
}
function setUp() {
// Install modules
parent::setUp('openlayers', 'ctools', 'openlayers_ui', 'openlayers_test');
}
function testOpenLayersMapAlters() {
$user = $this->drupalCreateUser(array('administer openlayers'));
$this->drupalLogin($user);
// Styles
$this->drupalGet('admin/structure/openlayers/test');
$this->assertText(t('OpenLayers preprocess map alter hook fired.'),
t('Map preprocess alter fired correctly.'));
$this->assertText(t('OpenLayers map alter hook fired.'),
t('Map alter fired correctly.'));
}
}
/**
* OpenLayers Unit Tests
*
* Do not use t() in Unit tests.
* https://drupal.org/node/811254
*
* Unit tests do not bootstrap Drupal very
* far which makes them a bit useless if
* we are utilizing Drupal API functions.
*/
class OpenLayersUnitTests extends DrupalUnitTestCase {
public static function getInfo() {
return array(
'name' => 'OpenLayers Unit Tests',
'description' => 'Tests functions for OpenLayers.',
'group' => 'OpenLayers',
);
}
function testOpenLayersStylePath() {
module_load_include('inc', 'openlayers', 'includes/openlayers.render');
global $base_url;
// Full URL
$path = 'http://example.org/sites/all/modules/openlayers/example/${path}.jpg';
$styled_path = openlayers_style_path($path);
$this->assertTrue($styled_path === $path, 'OpenLayers Style Path function with full URL.');
// Just replacement value
$path = '${path}';
$styled_path = openlayers_style_path($path);
$this->assertTrue($styled_path === $path, 'OpenLayers Style Path function with just replacement value.');
// Relative URL
$path = 'sites/all/modules/openlayers/example/${path}.jpg';
$styled_path = openlayers_style_path($path);
$this->assertTrue($styled_path === $base_url . '/' . $path, 'OpenLayers Style Path function with relative URL.');
}
}