first import
This commit is contained in:
42
sites/all/modules/libraries/tests/example/README.txt
Normal file
42
sites/all/modules/libraries/tests/example/README.txt
Normal file
@@ -0,0 +1,42 @@
|
||||
|
||||
Example library
|
||||
|
||||
Version 1
|
||||
|
||||
This file is an example file to test version detection.
|
||||
|
||||
The various other files in this directory are to test the loading of JavaScript,
|
||||
CSS and PHP files.
|
||||
- JavaScript: The filenames of the JavaScript files are asserted to be in the
|
||||
raw HTML via SimpleTest. Since the filename could appear, for instance, in an
|
||||
error message, this is not very robust. Explicit testing of JavaScript,
|
||||
though, is not yet possible with SimpleTest. To allow for easier debugging, we
|
||||
place the following text on the page:
|
||||
"If this text shows up, no JavaScript test file was loaded."
|
||||
This text is replaced via JavaScript by a text of the form:
|
||||
"If this text shows up, [[file] was loaded successfully."
|
||||
[file] is either 'example_1.js', 'example_2.js', 'example_3.js',
|
||||
'example_4.js' or 'libraries_test.js'. If you have SimpleTest's verbose mode
|
||||
enabled and see the above text in one of the debug pages, the noted JavaScript
|
||||
file was loaded successfully.
|
||||
- CSS: The filenames of the CSS files are asserted to be in the raw HTML via
|
||||
SimpleTest. Since the filename could appear, for instance, in an error
|
||||
message, this is not very robust. Explicit testing of CSS, though, is not yet
|
||||
possible with SimpleTest. Hence, the CSS files, if loaded, make the following
|
||||
text a certain color:
|
||||
"If one of the CSS test files has been loaded, this text will be colored:
|
||||
- example_1: red
|
||||
- example_2: green
|
||||
- example_3: orange
|
||||
- example_4: blue
|
||||
- libraries_test: purple"
|
||||
If you have SimpleTest's verbose mode enabled, and see the above text in a
|
||||
certain color (i.e. not in black), a CSS file was loaded successfully. Which
|
||||
file depends on the color as referenced in the text above.
|
||||
- PHP: The loading of PHP files is tested by defining a dummy function in the
|
||||
PHP files and then checking whether this function was defined using
|
||||
function_exists(). This can be checked programatically with SimpleTest.
|
||||
The loading of integration files is tested with the same method. The integration
|
||||
files are libraries_test.js, libraries_test.css, libraries_test.inc and are
|
||||
located in the tests directory alongside libraries_test.module (i.e. they are
|
||||
not in the same directory as this file).
|
11
sites/all/modules/libraries/tests/example/example_1.css
Normal file
11
sites/all/modules/libraries/tests/example/example_1.css
Normal file
@@ -0,0 +1,11 @@
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Test CSS file for Libraries loading.
|
||||
*
|
||||
* Color the 'libraries-test-css' div red. See README.txt for more information.
|
||||
*/
|
||||
|
||||
.libraries-test-css {
|
||||
color: red;
|
||||
}
|
18
sites/all/modules/libraries/tests/example/example_1.js
Normal file
18
sites/all/modules/libraries/tests/example/example_1.js
Normal file
@@ -0,0 +1,18 @@
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Test JavaScript file for Libraries loading.
|
||||
*
|
||||
* Replace the text in the 'libraries-test-javascript' div. See README.txt for
|
||||
* more information.
|
||||
*/
|
||||
|
||||
(function ($) {
|
||||
|
||||
Drupal.behaviors.librariesTest = {
|
||||
attach: function(context, settings) {
|
||||
$('.libraries-test-javascript').text('If this text shows up, example_1.js was loaded successfully.')
|
||||
}
|
||||
};
|
||||
|
||||
})(jQuery);
|
12
sites/all/modules/libraries/tests/example/example_1.php
Normal file
12
sites/all/modules/libraries/tests/example/example_1.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Test PHP file for Libraries loading.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Dummy function to see if this file was loaded.
|
||||
*/
|
||||
function _libraries_test_example_1() {
|
||||
}
|
11
sites/all/modules/libraries/tests/example/example_2.css
Normal file
11
sites/all/modules/libraries/tests/example/example_2.css
Normal file
@@ -0,0 +1,11 @@
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Test CSS file for Libraries loading.
|
||||
*
|
||||
* Color the 'libraries-test-css' div green. See README.txt for more information.
|
||||
*/
|
||||
|
||||
.libraries-test-css {
|
||||
color: green;
|
||||
}
|
18
sites/all/modules/libraries/tests/example/example_2.js
Normal file
18
sites/all/modules/libraries/tests/example/example_2.js
Normal file
@@ -0,0 +1,18 @@
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Test JavaScript file for Libraries loading.
|
||||
*
|
||||
* Replace the text in the 'libraries-test-javascript' div. See README.txt for
|
||||
* more information.
|
||||
*/
|
||||
|
||||
(function ($) {
|
||||
|
||||
Drupal.behaviors.librariesTest = {
|
||||
attach: function(context, settings) {
|
||||
$('.libraries-test-javascript').text('If this text shows up, example_2.js was loaded successfully.')
|
||||
}
|
||||
};
|
||||
|
||||
})(jQuery);
|
12
sites/all/modules/libraries/tests/example/example_2.php
Normal file
12
sites/all/modules/libraries/tests/example/example_2.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Test PHP file for Libraries loading.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Dummy function to see if this file was loaded.
|
||||
*/
|
||||
function _libraries_test_example_2() {
|
||||
}
|
11
sites/all/modules/libraries/tests/example/example_3.css
Normal file
11
sites/all/modules/libraries/tests/example/example_3.css
Normal file
@@ -0,0 +1,11 @@
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Test CSS file for Libraries loading.
|
||||
*
|
||||
* Color the 'libraries-test-css' div orange. See README.txt for more information.
|
||||
*/
|
||||
|
||||
.libraries-test-css {
|
||||
color: orange;
|
||||
}
|
18
sites/all/modules/libraries/tests/example/example_3.js
Normal file
18
sites/all/modules/libraries/tests/example/example_3.js
Normal file
@@ -0,0 +1,18 @@
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Test JavaScript file for Libraries loading.
|
||||
*
|
||||
* Replace the text in the 'libraries-test-javascript' div. See README.txt for
|
||||
* more information.
|
||||
*/
|
||||
|
||||
(function ($) {
|
||||
|
||||
Drupal.behaviors.librariesTest = {
|
||||
attach: function(context, settings) {
|
||||
$('.libraries-test-javascript').text('If this text shows up, example_3.js was loaded successfully.')
|
||||
}
|
||||
};
|
||||
|
||||
})(jQuery);
|
12
sites/all/modules/libraries/tests/example/example_3.php
Normal file
12
sites/all/modules/libraries/tests/example/example_3.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Test PHP file for Libraries loading.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Dummy function to see if this file was loaded.
|
||||
*/
|
||||
function _libraries_test_example_3() {
|
||||
}
|
11
sites/all/modules/libraries/tests/example/example_4.css
Normal file
11
sites/all/modules/libraries/tests/example/example_4.css
Normal file
@@ -0,0 +1,11 @@
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Test CSS file for Libraries loading.
|
||||
*
|
||||
* Color the 'libraries-test-css' div blue. See README.txt for more information.
|
||||
*/
|
||||
|
||||
.libraries-test-css {
|
||||
color: blue;
|
||||
}
|
18
sites/all/modules/libraries/tests/example/example_4.js
Normal file
18
sites/all/modules/libraries/tests/example/example_4.js
Normal file
@@ -0,0 +1,18 @@
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Test JavaScript file for Libraries loading.
|
||||
*
|
||||
* Replace the text in the 'libraries-test-javascript' div. See README.txt for
|
||||
* more information.
|
||||
*/
|
||||
|
||||
(function ($) {
|
||||
|
||||
Drupal.behaviors.librariesTest = {
|
||||
attach: function(context, settings) {
|
||||
$('.libraries-test-javascript').text('If this text shows up, example_4.js was loaded successfully.')
|
||||
}
|
||||
};
|
||||
|
||||
})(jQuery);
|
12
sites/all/modules/libraries/tests/example/example_4.php
Normal file
12
sites/all/modules/libraries/tests/example/example_4.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Test PHP file for Libraries loading.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Dummy function to see if this file was loaded.
|
||||
*/
|
||||
function _libraries_test_example_4() {
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
|
||||
; This is an example info file of a library used for testing purposes.
|
||||
name = Example info file
|
||||
|
||||
|
||||
; Information added by drupal.org packaging script on 2012-09-06
|
||||
version = "7.x-2.0+5-dev"
|
||||
core = "7.x"
|
||||
project = "libraries"
|
||||
datestamp = "1346891879"
|
||||
|
530
sites/all/modules/libraries/tests/libraries.test
Normal file
530
sites/all/modules/libraries/tests/libraries.test
Normal file
@@ -0,0 +1,530 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Tests for Libraries API.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Tests basic Libraries API functions.
|
||||
*/
|
||||
class LibrariesUnitTestCase extends DrupalUnitTestCase {
|
||||
public static function getInfo() {
|
||||
return array(
|
||||
'name' => 'Libraries API unit tests',
|
||||
'description' => 'Tests basic functions provided by Libraries API.',
|
||||
'group' => 'Libraries API',
|
||||
);
|
||||
}
|
||||
|
||||
function setUp() {
|
||||
drupal_load('module', 'libraries');
|
||||
parent::setUp();
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests libraries_get_path().
|
||||
*/
|
||||
function testLibrariesGetPath() {
|
||||
// Note that, even though libraries_get_path() doesn't find the 'example'
|
||||
// library, we are able to make it 'installed' by specifying the 'library
|
||||
// path' up-front. This is only used for testing purposed and is strongly
|
||||
// discouraged as it defeats the purpose of Libraries API in the first
|
||||
// place.
|
||||
$this->assertEqual(libraries_get_path('example'), FALSE, 'libraries_get_path() returns FALSE for a missing library.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests libraries_prepare_files().
|
||||
*/
|
||||
function testLibrariesPrepareFiles() {
|
||||
$expected = array(
|
||||
'files' => array(
|
||||
'js' => array('example.js' => array()),
|
||||
'css' => array('example.css' => array()),
|
||||
'php' => array('example.php' => array()),
|
||||
),
|
||||
);
|
||||
$library = array(
|
||||
'files' => array(
|
||||
'js' => array('example.js'),
|
||||
'css' => array('example.css'),
|
||||
'php' => array('example.php'),
|
||||
),
|
||||
);
|
||||
libraries_prepare_files($library, NULL, NULL);
|
||||
$this->assertEqual($expected, $library, 'libraries_prepare_files() works correctly.');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests basic detection and loading of libraries.
|
||||
*/
|
||||
class LibrariesTestCase extends DrupalWebTestCase {
|
||||
protected $profile = 'testing';
|
||||
|
||||
public static function getInfo() {
|
||||
return array(
|
||||
'name' => 'Libraries detection and loading',
|
||||
'description' => 'Tests detection and loading of libraries.',
|
||||
'group' => 'Libraries API',
|
||||
);
|
||||
}
|
||||
|
||||
function setUp() {
|
||||
parent::setUp('libraries', 'libraries_test');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests libraries_detect_dependencies().
|
||||
*/
|
||||
function testLibrariesDetectDependencies() {
|
||||
$library = array(
|
||||
'name' => 'Example',
|
||||
'dependencies' => array('example_missing'),
|
||||
);
|
||||
libraries_detect_dependencies($library);
|
||||
$this->assertEqual($library['error'], 'missing dependency', 'libraries_detect_dependencies() detects missing dependency');
|
||||
$error_message = t('The %dependency library, which the %library library depends on, is not installed.', array(
|
||||
'%dependency' => 'Example missing',
|
||||
'%library' => $library['name'],
|
||||
));
|
||||
$this->verbose("Expected:<br>$error_message");
|
||||
$this->verbose('Actual:<br>' . $library['error message']);
|
||||
$this->assertEqual($library['error message'], $error_message, 'Correct error message for a missing dependency');
|
||||
// Test versioned dependencies.
|
||||
$version = '1.1';
|
||||
$compatible = array(
|
||||
'1.1',
|
||||
'<=1.1',
|
||||
'>=1.1',
|
||||
'<1.2',
|
||||
'<2.0',
|
||||
'>1.0',
|
||||
'>1.0-rc1',
|
||||
'>1.0-beta2',
|
||||
'>1.0-alpha3',
|
||||
'>0.1',
|
||||
'<1.2, >1.0',
|
||||
'>0.1, <=1.1',
|
||||
);
|
||||
$incompatible = array(
|
||||
'1.2',
|
||||
'2.0',
|
||||
'<1.1',
|
||||
'>1.1',
|
||||
'<=1.0',
|
||||
'<=1.0-rc1',
|
||||
'<=1.0-beta2',
|
||||
'<=1.0-alpha3',
|
||||
'>=1.2',
|
||||
'<1.1, >0.9',
|
||||
'>=0.1, <1.1',
|
||||
);
|
||||
$library = array(
|
||||
'name' => 'Example',
|
||||
);
|
||||
foreach ($compatible as $version_string) {
|
||||
$library['dependencies'][0] = "example_dependency ($version_string)";
|
||||
// libraries_detect_dependencies() is a post-detect callback, so
|
||||
// 'installed' is already set, when it is called. It sets the value to
|
||||
// FALSE for missing or incompatible dependencies.
|
||||
$library['installed'] = TRUE;
|
||||
libraries_detect_dependencies($library);
|
||||
$this->assertTrue($library['installed'], "libraries_detect_dependencies() detects compatible version string: '$version_string' is compatible with '$version'");
|
||||
}
|
||||
foreach ($incompatible as $version_string) {
|
||||
$library['dependencies'][0] = "example_dependency ($version_string)";
|
||||
$library['installed'] = TRUE;
|
||||
unset($library['error'], $library['error message']);
|
||||
libraries_detect_dependencies($library);
|
||||
$this->assertEqual($library['error'], 'incompatible dependency', "libraries_detect_dependencies() detects incompatible version strings: '$version_string' is incompatible with '$version'");
|
||||
}
|
||||
// Instead of repeating this assertion for each version string, we just
|
||||
// re-use the $library variable from the foreach loop.
|
||||
$error_message = t('The version %dependency_version of the %dependency library is not compatible with the %library library.', array(
|
||||
'%dependency_version' => $version,
|
||||
'%dependency' => 'Example dependency',
|
||||
'%library' => $library['name'],
|
||||
));
|
||||
$this->verbose("Expected:<br>$error_message");
|
||||
$this->verbose('Actual:<br>' . $library['error message']);
|
||||
$this->assertEqual($library['error message'], $error_message, 'Correct error message for an incompatible dependency');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests libraries_scan_info_files().
|
||||
*/
|
||||
function testLibrariesScanInfoFiles() {
|
||||
$expected = array('example_info_file' => (object) array(
|
||||
'uri' => drupal_get_path('module', 'libraries') . '/tests/example/example_info_file.libraries.info',
|
||||
'filename' => 'example_info_file.libraries.info',
|
||||
'name' => 'example_info_file.libraries',
|
||||
));
|
||||
$this->assertEqual(libraries_scan_info_files(), $expected, 'libraries_scan_info_files() correctly finds the example info file.');
|
||||
$this->verbose('<pre>' . var_export(libraries_scan_info_files(), TRUE) . '</pre>');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests libraries_info().
|
||||
*/
|
||||
function testLibrariesInfo() {
|
||||
// Test that library information is found correctly.
|
||||
$expected = array(
|
||||
'name' => 'Example files',
|
||||
'library path' => drupal_get_path('module', 'libraries') . '/tests/example',
|
||||
'version' => '1',
|
||||
'files' => array(
|
||||
'js' => array('example_1.js' => array()),
|
||||
'css' => array('example_1.css' => array()),
|
||||
'php' => array('example_1.php' => array()),
|
||||
),
|
||||
'module' => 'libraries_test',
|
||||
);
|
||||
libraries_info_defaults($expected, 'example_files');
|
||||
$library = libraries_info('example_files');
|
||||
$this->verbose('Expected:<pre>' . var_export($expected, TRUE) . '</pre>');
|
||||
$this->verbose('Actual:<pre>' . var_export($library, TRUE) . '</pre>');
|
||||
$this->assertEqual($library, $expected, 'Library information is correctly gathered.');
|
||||
|
||||
// Test a library specified with an .info file gets detected.
|
||||
$expected = array(
|
||||
'name' => 'Example info file',
|
||||
'info file' => drupal_get_path('module', 'libraries_test') . '/example/example_info_file.libraries.info',
|
||||
);
|
||||
libraries_info_defaults($expected, 'example_info_file');
|
||||
$library = libraries_info('example_info_file');
|
||||
// If this module was downloaded from Drupal.org, the Drupal.org packaging
|
||||
// system has corrupted the test info file.
|
||||
// @see http://drupal.org/node/1606606
|
||||
unset($library['core'], $library['datestamp'], $library['project'], $library['version']);
|
||||
$this->verbose('Expected:<pre>' . var_export($expected, TRUE) . '</pre>');
|
||||
$this->verbose('Actual:<pre>' . var_export($library, TRUE) . '</pre>');
|
||||
$this->assertEqual($library, $expected, 'Library specified with an .info file found');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests libraries_detect().
|
||||
*/
|
||||
function testLibrariesDetect() {
|
||||
// Test missing library.
|
||||
$library = libraries_detect('example_missing');
|
||||
$this->verbose('<pre>' . var_export($library, TRUE) . '</pre>');
|
||||
$this->assertEqual($library['error'], 'not found', 'Missing library not found.');
|
||||
$error_message = t('The %library library could not be found.', array(
|
||||
'%library' => $library['name'],
|
||||
));
|
||||
$this->assertEqual($library['error message'], $error_message, 'Correct error message for a missing library.');
|
||||
|
||||
// Test unknown library version.
|
||||
$library = libraries_detect('example_undetected_version');
|
||||
$this->verbose('<pre>' . var_export($library, TRUE) . '</pre>');
|
||||
$this->assertEqual($library['error'], 'not detected', 'Undetected version detected as such.');
|
||||
$error_message = t('The version of the %library library could not be detected.', array(
|
||||
'%library' => $library['name'],
|
||||
));
|
||||
$this->assertEqual($library['error message'], $error_message, 'Correct error message for a library with an undetected version.');
|
||||
|
||||
// Test unsupported library version.
|
||||
$library = libraries_detect('example_unsupported_version');
|
||||
$this->verbose('<pre>' . var_export($library, TRUE) . '</pre>');
|
||||
$this->assertEqual($library['error'], 'not supported', 'Unsupported version detected as such.');
|
||||
$error_message = t('The installed version %version of the %library library is not supported.', array(
|
||||
'%version' => $library['version'],
|
||||
'%library' => $library['name'],
|
||||
));
|
||||
$this->assertEqual($library['error message'], $error_message, 'Correct error message for a library with an unsupported version.');
|
||||
|
||||
// Test supported library version.
|
||||
$library = libraries_detect('example_supported_version');
|
||||
$this->verbose('<pre>' . var_export($library, TRUE) . '</pre>');
|
||||
$this->assertEqual($library['installed'], TRUE, 'Supported library version found.');
|
||||
|
||||
// Test libraries_get_version().
|
||||
$library = libraries_detect('example_default_version_callback');
|
||||
$this->verbose('<pre>' . var_export($library, TRUE) . '</pre>');
|
||||
$this->assertEqual($library['version'], '1', 'Expected version returned by default version callback.');
|
||||
|
||||
// Test a multiple-parameter version callback.
|
||||
$library = libraries_detect('example_multiple_parameter_version_callback');
|
||||
$this->verbose('<pre>' . var_export($library, TRUE) . '</pre>');
|
||||
$this->assertEqual($library['version'], '1', 'Expected version returned by multiple parameter version callback.');
|
||||
|
||||
// Test a top-level files property.
|
||||
$library = libraries_detect('example_files');
|
||||
$files = array(
|
||||
'js' => array('example_1.js' => array()),
|
||||
'css' => array('example_1.css' => array()),
|
||||
'php' => array('example_1.php' => array()),
|
||||
);
|
||||
$this->verbose('<pre>' . var_export($library, TRUE) . '</pre>');
|
||||
$this->assertEqual($library['files'], $files, 'Top-level files property works.');
|
||||
|
||||
// Test version-specific library files.
|
||||
$library = libraries_detect('example_versions');
|
||||
$files = array(
|
||||
'js' => array('example_2.js' => array()),
|
||||
'css' => array('example_2.css' => array()),
|
||||
'php' => array('example_2.php' => array()),
|
||||
);
|
||||
$this->verbose('<pre>' . var_export($library, TRUE) . '</pre>');
|
||||
$this->assertEqual($library['files'], $files, 'Version-specific library files found.');
|
||||
|
||||
// Test missing variant.
|
||||
$library = libraries_detect('example_variant_missing');
|
||||
$this->verbose('<pre>' . var_export($library, TRUE) . '</pre>');
|
||||
$this->assertEqual($library['variants']['example_variant']['error'], 'not found', 'Missing variant not found');
|
||||
$error_message = t('The %variant variant of the %library library could not be found.', array(
|
||||
'%variant' => 'example_variant',
|
||||
'%library' => 'Example variant missing',
|
||||
));
|
||||
$this->assertEqual($library['variants']['example_variant']['error message'], $error_message, 'Correct error message for a missing variant.');
|
||||
|
||||
// Test existing variant.
|
||||
$library = libraries_detect('example_variant');
|
||||
$this->verbose('<pre>' . var_export($library, TRUE) . '</pre>');
|
||||
$this->assertEqual($library['variants']['example_variant']['installed'], TRUE, 'Existing variant found.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests libraries_load().
|
||||
*/
|
||||
function testLibrariesLoad() {
|
||||
// Test dependencies.
|
||||
$library = libraries_load('example_dependency_missing');
|
||||
$this->verbose('<pre>' . var_export($library, TRUE) . '</pre>');
|
||||
$this->assertFalse($library['loaded'], 'Library with missing dependency cannot be loaded');
|
||||
$library = libraries_load('example_dependency_incompatible');
|
||||
$this->verbose('<pre>' . var_export($library, TRUE) . '</pre>');
|
||||
$this->assertFalse($library['loaded'], 'Library with incompatible dependency cannot be loaded');
|
||||
$library = libraries_load('example_dependency_compatible');
|
||||
$this->verbose('<pre>' . var_export($library, TRUE) . '</pre>');
|
||||
$this->assertEqual($library['loaded'], 1, 'Library with compatible dependency is loaded');
|
||||
$loaded = &drupal_static('libraries_load');
|
||||
$this->verbose('<pre>' . var_export($loaded, TRUE) . '</pre>');
|
||||
$this->assertEqual($loaded['example_dependency']['loaded'], 1, 'Dependency library is also loaded');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the applying of callbacks.
|
||||
*/
|
||||
function testCallbacks() {
|
||||
$expected = array(
|
||||
'name' => 'Example callback',
|
||||
'library path' => drupal_get_path('module', 'libraries') . '/tests/example',
|
||||
'version' => '1',
|
||||
'versions' => array(
|
||||
'1' => array(
|
||||
'variants' => array(
|
||||
'example_variant' => array(
|
||||
'info callback' => 'not applied',
|
||||
'pre-detect callback' => 'not applied',
|
||||
'post-detect callback' => 'not applied',
|
||||
'pre-load callback' => 'not applied',
|
||||
'post-load callback' => 'not applied',
|
||||
),
|
||||
),
|
||||
'info callback' => 'not applied',
|
||||
'pre-detect callback' => 'not applied',
|
||||
'post-detect callback' => 'not applied',
|
||||
'pre-load callback' => 'not applied',
|
||||
'post-load callback' => 'not applied',
|
||||
),
|
||||
),
|
||||
'variants' => array(
|
||||
'example_variant' => array(
|
||||
'info callback' => 'not applied',
|
||||
'pre-detect callback' => 'not applied',
|
||||
'post-detect callback' => 'not applied',
|
||||
'pre-load callback' => 'not applied',
|
||||
'post-load callback' => 'not applied',
|
||||
),
|
||||
),
|
||||
'callbacks' => array(
|
||||
'info' => array('_libraries_test_info_callback'),
|
||||
'pre-detect' => array('_libraries_test_pre_detect_callback'),
|
||||
'post-detect' => array('_libraries_test_post_detect_callback'),
|
||||
'pre-load' => array('_libraries_test_pre_load_callback'),
|
||||
'post-load' => array('_libraries_test_post_load_callback'),
|
||||
),
|
||||
'info callback' => 'not applied',
|
||||
'pre-detect callback' => 'not applied',
|
||||
'post-detect callback' => 'not applied',
|
||||
'pre-load callback' => 'not applied',
|
||||
'post-load callback' => 'not applied',
|
||||
'module' => 'libraries_test',
|
||||
);
|
||||
libraries_info_defaults($expected, 'example_callback');
|
||||
|
||||
// Test a callback in the 'info' group.
|
||||
$expected['info callback'] = 'applied (top-level)';
|
||||
$expected['versions']['1']['info callback'] = 'applied (version 1)';
|
||||
$expected['versions']['1']['variants']['example_variant']['info callback'] = 'applied (version 1, variant example_variant)';
|
||||
$expected['variants']['example_variant']['info callback'] = 'applied (variant example_variant)';
|
||||
$library = libraries_info('example_callback');
|
||||
$this->verbose('Expected:<pre>' . var_export($expected, TRUE) . '</pre>');
|
||||
$this->verbose('Actual:<pre>' . var_export($library, TRUE) . '</pre>');
|
||||
$this->assertEqual($library, $expected, 'Prepare callback was applied correctly.');
|
||||
|
||||
// Test a callback in the 'pre-detect' and 'post-detect' phases.
|
||||
// Successfully detected libraries should only contain version information
|
||||
// for the detected version and thus, be marked as installed.
|
||||
unset($expected['versions']);
|
||||
$expected['installed'] = TRUE;
|
||||
// Additionally, version-specific properties of the detected version are
|
||||
// supposed to override the corresponding top-level properties.
|
||||
$expected['info callback'] = 'applied (version 1)';
|
||||
$expected['variants']['example_variant']['installed'] = TRUE;
|
||||
$expected['variants']['example_variant']['info callback'] = 'applied (version 1, variant example_variant)';
|
||||
// Version-overloading takes place after the 'pre-detect' callbacks have
|
||||
// been applied.
|
||||
$expected['pre-detect callback'] = 'applied (version 1)';
|
||||
$expected['post-detect callback'] = 'applied (top-level)';
|
||||
$expected['variants']['example_variant']['pre-detect callback'] = 'applied (version 1, variant example_variant)';
|
||||
$expected['variants']['example_variant']['post-detect callback'] = 'applied (variant example_variant)';
|
||||
$library = libraries_detect('example_callback');
|
||||
$this->verbose('Expected:<pre>' . var_export($expected, TRUE) . '</pre>');
|
||||
$this->verbose('Actual:<pre>' . var_export($library, TRUE) . '</pre>');
|
||||
$this->assertEqual($library, $expected, 'Detect callback was applied correctly.');
|
||||
|
||||
// Test a callback in the 'pre-load' and 'post-load' phases.
|
||||
// Successfully loaded libraries should only contain information about the
|
||||
// already loaded variant.
|
||||
unset($expected['variants']);
|
||||
$expected['loaded'] = 0;
|
||||
$expected['pre-load callback'] = 'applied (top-level)';
|
||||
$expected['post-load callback'] = 'applied (top-level)';
|
||||
$library = libraries_load('example_callback');
|
||||
$this->verbose('Expected:<pre>' . var_export($expected, TRUE) . '</pre>');
|
||||
$this->verbose('Actual:<pre>' . var_export($library, TRUE) . '</pre>');
|
||||
$this->assertEqual($library, $expected, 'Pre-load and post-load callbacks were applied correctly.');
|
||||
// This is not recommended usually and is only used for testing purposes.
|
||||
drupal_static_reset('libraries_load');
|
||||
// Successfully loaded library variants are supposed to contain the specific
|
||||
// variant information only.
|
||||
$expected['info callback'] = 'applied (version 1, variant example_variant)';
|
||||
$expected['pre-detect callback'] = 'applied (version 1, variant example_variant)';
|
||||
$expected['post-detect callback'] = 'applied (variant example_variant)';
|
||||
$library = libraries_load('example_callback', 'example_variant');
|
||||
$this->verbose('Expected:<pre>' . var_export($expected, TRUE) . '</pre>');
|
||||
$this->verbose('Actual:<pre>' . var_export($library, TRUE) . '</pre>');
|
||||
$this->assertEqual($library, $expected, 'Pre-detect and post-detect callbacks were applied correctly to a variant.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that library files are properly added to the page output.
|
||||
*
|
||||
* We check for JavaScript and CSS files directly in the DOM and add a list of
|
||||
* included PHP files manually to the page output.
|
||||
*
|
||||
* @see _libraries_test_load()
|
||||
*/
|
||||
function testLibrariesOutput() {
|
||||
// Test loading of a simple library with a top-level files property.
|
||||
$this->drupalGet('libraries_test/files');
|
||||
$this->assertLibraryFiles('example_1', 'File loading');
|
||||
|
||||
// Test loading of integration files.
|
||||
$this->drupalGet('libraries_test/integration_files');
|
||||
$this->assertRaw('libraries_test.js', 'Integration file loading: libraries_test.js found');
|
||||
$this->assertRaw('libraries_test.css', 'Integration file loading: libraries_test.css found');
|
||||
$this->assertRaw('libraries_test.inc', 'Integration file loading: libraries_test.inc found');
|
||||
|
||||
// Test version overloading.
|
||||
$this->drupalGet('libraries_test/versions');
|
||||
$this->assertLibraryFiles('example_2', 'Version overloading');
|
||||
|
||||
// Test variant loading.
|
||||
$this->drupalGet('libraries_test/variant');
|
||||
$this->assertLibraryFiles('example_3', 'Variant loading');
|
||||
|
||||
// Test version overloading and variant loading.
|
||||
$this->drupalGet('libraries_test/versions_and_variants');
|
||||
$this->assertLibraryFiles('example_4', 'Concurrent version and variant overloading');
|
||||
|
||||
// Test caching.
|
||||
variable_set('libraries_test_cache', TRUE);
|
||||
cache_clear_all('example_callback', 'cache_libraries');
|
||||
// When the library information is not cached, all callback groups should be
|
||||
// invoked.
|
||||
$this->drupalGet('libraries_test/cache');
|
||||
$this->assertRaw('The <em>info</em> callback group was invoked.', 'Info callback invoked for uncached libraries.');
|
||||
$this->assertRaw('The <em>pre-detect</em> callback group was invoked.', 'Pre-detect callback invoked for uncached libraries.');
|
||||
$this->assertRaw('The <em>post-detect</em> callback group was invoked.', 'Post-detect callback invoked for uncached libraries.');
|
||||
$this->assertRaw('The <em>pre-load</em> callback group was invoked.', 'Pre-load callback invoked for uncached libraries.');
|
||||
$this->assertRaw('The <em>post-load</em> callback group was invoked.', 'Post-load callback invoked for uncached libraries.');
|
||||
// When the library information is cached only the 'pre-load' and
|
||||
// 'post-load' callback groups should be invoked.
|
||||
$this->drupalGet('libraries_test/cache');
|
||||
$this->assertNoRaw('The <em>info</em> callback group was not invoked.', 'Info callback not invoked for cached libraries.');
|
||||
$this->assertNoRaw('The <em>pre-detect</em> callback group was not invoked.', 'Pre-detect callback not invoked for cached libraries.');
|
||||
$this->assertNoRaw('The <em>post-detect</em> callback group was not invoked.', 'Post-detect callback not invoked for cached libraries.');
|
||||
$this->assertRaw('The <em>pre-load</em> callback group was invoked.', 'Pre-load callback invoked for cached libraries.');
|
||||
$this->assertRaw('The <em>post-load</em> callback group was invoked.', 'Post-load callback invoked for cached libraries.');
|
||||
variable_set('libraries_test_cache', FALSE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to assert that a library was correctly loaded.
|
||||
*
|
||||
* Asserts that all the correct files were loaded and all the incorrect ones
|
||||
* were not.
|
||||
*
|
||||
* @param $name
|
||||
* The name of the files that should be loaded. The current testing system
|
||||
* knows of 'example_1', 'example_2', 'example_3' and 'example_4'. Each name
|
||||
* has an associated JavaScript, CSS and PHP file that will be asserted. All
|
||||
* other files will be asserted to not be loaded. See
|
||||
* tests/example/README.txt for more information on how the loading of the
|
||||
* files is tested.
|
||||
* @param $label
|
||||
* (optional) A label to prepend to the assertion messages, to make them
|
||||
* less ambiguous.
|
||||
* @param $extensions
|
||||
* (optional) The expected file extensions of $name. Defaults to
|
||||
* array('js', 'css', 'php').
|
||||
*/
|
||||
function assertLibraryFiles($name, $label = '', $extensions = array('js', 'css', 'php')) {
|
||||
$label = ($label !== '' ? "$label: " : '');
|
||||
|
||||
// Test that the wrong files are not loaded...
|
||||
$names = array(
|
||||
'example_1' => FALSE,
|
||||
'example_2' => FALSE,
|
||||
'example_3' => FALSE,
|
||||
'example_4' => FALSE,
|
||||
);
|
||||
// ...and the correct ones are.
|
||||
$names[$name] = TRUE;
|
||||
|
||||
// Test for the specific HTML that the different file types appear as in the
|
||||
// DOM.
|
||||
$html = array(
|
||||
'js' => array('<script type="text/javascript" src="', '"></script>'),
|
||||
'css' => array('@import url("', '");'),
|
||||
// PHP files do not get added to the DOM directly.
|
||||
// @see _libraries_test_load()
|
||||
'php' => array('<li>', '</li>'),
|
||||
);
|
||||
|
||||
foreach ($names as $name => $expected) {
|
||||
foreach ($extensions as $extension) {
|
||||
$filepath = drupal_get_path('module', 'libraries_test') . "/example/$name.$extension";
|
||||
// JavaScript and CSS files appear as full URLs and with an appended
|
||||
// query string.
|
||||
if (in_array($extension, array('js', 'css'))) {
|
||||
$filepath = url('', array('absolute' => TRUE)) . $filepath . '?' . variable_get('css_js_query_string');
|
||||
}
|
||||
$raw = $html[$extension][0] . $filepath . $html[$extension][1];
|
||||
if ($expected) {
|
||||
$this->assertRaw($raw, "$label$name.$extension found.");
|
||||
}
|
||||
else {
|
||||
$this->assertNoRaw($raw, "$label$name.$extension not found.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
12
sites/all/modules/libraries/tests/libraries_test.css
Normal file
12
sites/all/modules/libraries/tests/libraries_test.css
Normal file
@@ -0,0 +1,12 @@
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Test CSS file for Libraries loading.
|
||||
*
|
||||
* Color the 'libraries-test-css' div purple. See README.txt for more
|
||||
* information.
|
||||
*/
|
||||
|
||||
.libraries-test-css {
|
||||
color: purple;
|
||||
}
|
11
sites/all/modules/libraries/tests/libraries_test.inc
Normal file
11
sites/all/modules/libraries/tests/libraries_test.inc
Normal file
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Test PHP file for Libraries loading.
|
||||
|
||||
/**
|
||||
* Dummy function to see if this file was loaded.
|
||||
*/
|
||||
function _libraries_test_integration_file() {
|
||||
}
|
12
sites/all/modules/libraries/tests/libraries_test.info
Normal file
12
sites/all/modules/libraries/tests/libraries_test.info
Normal file
@@ -0,0 +1,12 @@
|
||||
name = Libraries test module
|
||||
description = Tests library detection and loading.
|
||||
core = 7.x
|
||||
dependencies[] = libraries
|
||||
hidden = TRUE
|
||||
|
||||
; Information added by drupal.org packaging script on 2012-09-06
|
||||
version = "7.x-2.0+5-dev"
|
||||
core = "7.x"
|
||||
project = "libraries"
|
||||
datestamp = "1346891879"
|
||||
|
18
sites/all/modules/libraries/tests/libraries_test.js
Normal file
18
sites/all/modules/libraries/tests/libraries_test.js
Normal file
@@ -0,0 +1,18 @@
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Test JavaScript file for Libraries loading.
|
||||
*
|
||||
* Replace the text in the 'libraries-test-javascript' div. See README.txt for
|
||||
* more information.
|
||||
*/
|
||||
|
||||
(function ($) {
|
||||
|
||||
Drupal.behaviors.librariesTest = {
|
||||
attach: function(context, settings) {
|
||||
$('.libraries-test-javascript').text('If this text shows up, libraries_test.js was loaded successfully.')
|
||||
}
|
||||
};
|
||||
|
||||
})(jQuery);
|
552
sites/all/modules/libraries/tests/libraries_test.module
Normal file
552
sites/all/modules/libraries/tests/libraries_test.module
Normal file
@@ -0,0 +1,552 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Tests the library detection and loading.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Implements hook_libraries_info().
|
||||
*/
|
||||
function libraries_test_libraries_info() {
|
||||
// Test library detection.
|
||||
$libraries['example_missing'] = array(
|
||||
'name' => 'Example missing',
|
||||
'library path' => drupal_get_path('module', 'libraries') . '/tests/missing',
|
||||
);
|
||||
$libraries['example_undetected_version'] = array(
|
||||
'name' => 'Example undetected version',
|
||||
'library path' => drupal_get_path('module', 'libraries') . '/tests',
|
||||
'version callback' => '_libraries_test_return_version',
|
||||
'version arguments' => array(FALSE),
|
||||
);
|
||||
$libraries['example_unsupported_version'] = array(
|
||||
'name' => 'Example unsupported version',
|
||||
'library path' => drupal_get_path('module', 'libraries') . '/tests',
|
||||
'version callback' => '_libraries_test_return_version',
|
||||
'version arguments' => array('1'),
|
||||
'versions' => array(
|
||||
'2' => array(),
|
||||
),
|
||||
);
|
||||
|
||||
$libraries['example_supported_version'] = array(
|
||||
'name' => 'Example supported version',
|
||||
'library path' => drupal_get_path('module', 'libraries') . '/tests',
|
||||
'version callback' => '_libraries_test_return_version',
|
||||
'version arguments' => array('1'),
|
||||
'versions' => array(
|
||||
'1' => array(),
|
||||
),
|
||||
);
|
||||
|
||||
// Test the default version callback.
|
||||
$libraries['example_default_version_callback'] = array(
|
||||
'name' => 'Example default version callback',
|
||||
'library path' => drupal_get_path('module', 'libraries') . '/tests/example',
|
||||
'version arguments' => array(
|
||||
'file' => 'README.txt',
|
||||
// Version 1
|
||||
'pattern' => '/Version (\d+)/',
|
||||
'lines' => 5,
|
||||
),
|
||||
);
|
||||
|
||||
// Test a multiple-parameter version callback.
|
||||
$libraries['example_multiple_parameter_version_callback'] = array(
|
||||
'name' => 'Example multiple parameter version callback',
|
||||
'library path' => drupal_get_path('module', 'libraries') . '/tests/example',
|
||||
// Version 1
|
||||
'version callback' => '_libraries_test_get_version',
|
||||
'version arguments' => array('README.txt', '/Version (\d+)/', 5),
|
||||
);
|
||||
|
||||
// Test a top-level files property.
|
||||
$libraries['example_files'] = array(
|
||||
'name' => 'Example files',
|
||||
'library path' => drupal_get_path('module', 'libraries') . '/tests/example',
|
||||
'version' => '1',
|
||||
'files' => array(
|
||||
'js' => array('example_1.js'),
|
||||
'css' => array('example_1.css'),
|
||||
'php' => array('example_1.php'),
|
||||
),
|
||||
);
|
||||
|
||||
// Test loading of integration files.
|
||||
// Normally added by the corresponding module via hook_libraries_info_alter(),
|
||||
// these files should be automatically loaded when the library is loaded.
|
||||
$libraries['example_integration_files'] = array(
|
||||
'name' => 'Example integration files',
|
||||
'library path' => drupal_get_path('module', 'libraries') . '/tests/example',
|
||||
'version' => '1',
|
||||
'integration files' => array(
|
||||
'libraries_test' => array(
|
||||
'js' => array('libraries_test.js'),
|
||||
'css' => array('libraries_test.css'),
|
||||
'php' => array('libraries_test.inc'),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
// Test version overloading.
|
||||
$libraries['example_versions'] = array(
|
||||
'name' => 'Example versions',
|
||||
'library path' => drupal_get_path('module', 'libraries') . '/tests/example',
|
||||
'version' => '2',
|
||||
'versions' => array(
|
||||
'1' => array(
|
||||
'files' => array(
|
||||
'js' => array('example_1.js'),
|
||||
'css' => array('example_1.css'),
|
||||
'php' => array('example_1.php'),
|
||||
),
|
||||
),
|
||||
'2' => array(
|
||||
'files' => array(
|
||||
'js' => array('example_2.js'),
|
||||
'css' => array('example_2.css'),
|
||||
'php' => array('example_2.php'),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
// Test variant detection.
|
||||
$libraries['example_variant_missing'] = array(
|
||||
'name' => 'Example variant missing',
|
||||
'library path' => drupal_get_path('module', 'libraries') . '/tests/example',
|
||||
'version' => '1',
|
||||
'variants' => array(
|
||||
'example_variant' => array(
|
||||
'files' => array(
|
||||
'js' => array('example_3.js'),
|
||||
'css' => array('example_3.css'),
|
||||
'php' => array('example_3.php'),
|
||||
),
|
||||
'variant callback' => '_libraries_test_return_installed',
|
||||
'variant arguments' => array(FALSE),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
$libraries['example_variant'] = array(
|
||||
'name' => 'Example variant',
|
||||
'library path' => drupal_get_path('module', 'libraries') . '/tests/example',
|
||||
'version' => '1',
|
||||
'variants' => array(
|
||||
'example_variant' => array(
|
||||
'files' => array(
|
||||
'js' => array('example_3.js'),
|
||||
'css' => array('example_3.css'),
|
||||
'php' => array('example_3.php'),
|
||||
),
|
||||
'variant callback' => '_libraries_test_return_installed',
|
||||
'variant arguments' => array(TRUE),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
// Test correct behaviour with multiple versions and multiple variants.
|
||||
$libraries['example_versions_and_variants'] = array(
|
||||
'name' => 'Example versions and variants',
|
||||
'library path' => drupal_get_path('module', 'libraries') . '/tests/example',
|
||||
'version' => '2',
|
||||
'versions' => array(
|
||||
'1' => array(
|
||||
'variants' => array(
|
||||
'example_variant_1' => array(
|
||||
'files' => array(
|
||||
'js' => array('example_1.js'),
|
||||
'css' => array('example_1.css'),
|
||||
'php' => array('example_1.php'),
|
||||
),
|
||||
'variant callback' => '_libraries_test_return_installed',
|
||||
'variant arguments' => array(TRUE),
|
||||
),
|
||||
'example_variant_2' => array(
|
||||
'files' => array(
|
||||
'js' => array('example_2.js'),
|
||||
'css' => array('example_2.css'),
|
||||
'php' => array('example_2.php'),
|
||||
),
|
||||
'variant callback' => '_libraries_test_return_installed',
|
||||
'variant arguments' => array(TRUE),
|
||||
),
|
||||
),
|
||||
),
|
||||
'2' => array(
|
||||
'variants' => array(
|
||||
'example_variant_1' => array(
|
||||
'files' => array(
|
||||
'js' => array('example_3.js'),
|
||||
'css' => array('example_3.css'),
|
||||
'php' => array('example_3.php'),
|
||||
),
|
||||
'variant callback' => '_libraries_test_return_installed',
|
||||
'variant arguments' => array(TRUE),
|
||||
),
|
||||
'example_variant_2' => array(
|
||||
'files' => array(
|
||||
'js' => array('example_4.js'),
|
||||
'css' => array('example_4.css'),
|
||||
'php' => array('example_4.php'),
|
||||
),
|
||||
'variant callback' => '_libraries_test_return_installed',
|
||||
'variant arguments' => array(TRUE),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
// Test dependency loading.
|
||||
// We add one file to each library to be able to verify if it was loaded with
|
||||
// libraries_load().
|
||||
// This library acts as a dependency for the libraries below.
|
||||
$libraries['example_dependency'] = array(
|
||||
'name' => 'Example dependency',
|
||||
'library path' => drupal_get_path('module', 'libraries') . '/tests/example',
|
||||
'version' => '1.1',
|
||||
'files' => array('js' => array('example_1.js')),
|
||||
);
|
||||
$libraries['example_dependency_missing'] = array(
|
||||
'name' => 'Example dependency missing',
|
||||
'library path' => drupal_get_path('module', 'libraries') . '/tests/example',
|
||||
'version' => '1',
|
||||
'dependencies' => array('example_missing'),
|
||||
'files' => array('js' => array('example_1.js')),
|
||||
);
|
||||
$libraries['example_dependency_incompatible'] = array(
|
||||
'name' => 'Example dependency incompatible',
|
||||
'library path' => drupal_get_path('module', 'libraries') . '/tests/example',
|
||||
'version' => '1',
|
||||
'dependencies' => array('example_dependency (>1.1)'),
|
||||
'files' => array('js' => array('example_1.js')),
|
||||
);
|
||||
$libraries['example_dependency_compatible'] = array(
|
||||
'name' => 'Example dependency compatible',
|
||||
'library path' => drupal_get_path('module', 'libraries') . '/tests/example',
|
||||
'version' => '1',
|
||||
'dependencies' => array('example_dependency (>=1.1)'),
|
||||
'files' => array('js' => array('example_1.js')),
|
||||
);
|
||||
|
||||
// Test the applying of callbacks.
|
||||
$libraries['example_callback'] = array(
|
||||
'name' => 'Example callback',
|
||||
'library path' => drupal_get_path('module', 'libraries') . '/tests/example',
|
||||
'version' => '1',
|
||||
'versions' => array(
|
||||
'1' => array(
|
||||
'variants' => array(
|
||||
'example_variant' => array(
|
||||
// These keys are for testing purposes only.
|
||||
'info callback' => 'not applied',
|
||||
'pre-detect callback' => 'not applied',
|
||||
'post-detect callback' => 'not applied',
|
||||
'pre-load callback' => 'not applied',
|
||||
'post-load callback' => 'not applied',
|
||||
),
|
||||
),
|
||||
// These keys are for testing purposes only.
|
||||
'info callback' => 'not applied',
|
||||
'pre-detect callback' => 'not applied',
|
||||
'post-detect callback' => 'not applied',
|
||||
'pre-load callback' => 'not applied',
|
||||
'post-load callback' => 'not applied',
|
||||
),
|
||||
),
|
||||
'variants' => array(
|
||||
'example_variant' => array(
|
||||
// These keys are for testing purposes only.
|
||||
'info callback' => 'not applied',
|
||||
'pre-detect callback' => 'not applied',
|
||||
'post-detect callback' => 'not applied',
|
||||
'pre-load callback' => 'not applied',
|
||||
'post-load callback' => 'not applied',
|
||||
),
|
||||
),
|
||||
'callbacks' => array(
|
||||
'info' => array('_libraries_test_info_callback'),
|
||||
'pre-detect' => array('_libraries_test_pre_detect_callback'),
|
||||
'post-detect' => array('_libraries_test_post_detect_callback'),
|
||||
'pre-load' => array('_libraries_test_pre_load_callback'),
|
||||
'post-load' => array('_libraries_test_post_load_callback'),
|
||||
),
|
||||
// These keys are for testing purposes only.
|
||||
'info callback' => 'not applied',
|
||||
'pre-detect callback' => 'not applied',
|
||||
'post-detect callback' => 'not applied',
|
||||
'pre-load callback' => 'not applied',
|
||||
'post-load callback' => 'not applied',
|
||||
);
|
||||
|
||||
return $libraries;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_libraries_info_file_paths()
|
||||
*/
|
||||
function libraries_test_libraries_info_file_paths() {
|
||||
return array(drupal_get_path('module', 'libraries_test') . '/example');
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the version of an example library.
|
||||
*
|
||||
* Returns exactly the version string entered as the $version parameter. This
|
||||
* function cannot be collapsed with _libraries_test_return_installed(), because
|
||||
* of the different arguments that are passed automatically.
|
||||
*/
|
||||
function _libraries_test_return_version($library, $version) {
|
||||
return $version;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the version information from an arbitrary library.
|
||||
*
|
||||
* Test function for a version callback with multiple arguments. This is an
|
||||
* exact copy of libraries_get_version(), which uses a single $option argument,
|
||||
* except for the fact that it uses multiple arguments. Since we support both
|
||||
* type of version callbacks, detecting the version of a test library with this
|
||||
* function ensures that the arguments are passed correctly. This function might
|
||||
* be a useful reference for a custom version callback that uses multiple
|
||||
* parameters.
|
||||
*
|
||||
* @param $library
|
||||
* An associative array containing all information about the library.
|
||||
* @param $file
|
||||
* The filename to parse for the version, relative to the library path. For
|
||||
* example: 'docs/changelog.txt'.
|
||||
* @param pattern
|
||||
* A string containing a regular expression (PCRE) to match the library
|
||||
* version. For example: '/@version (\d+)\.(\d+)/'.
|
||||
* @param lines
|
||||
* (optional) The maximum number of lines to search the pattern in. Defaults
|
||||
* to 20.
|
||||
* @param cols
|
||||
* (optional) The maximum number of characters per line to take into account.
|
||||
* Defaults to 200. In case of minified or compressed files, this prevents
|
||||
* reading the entire file into memory.
|
||||
*
|
||||
* @return
|
||||
* A string containing the version of the library.
|
||||
*
|
||||
* @see libraries_get_version()
|
||||
*/
|
||||
function _libraries_test_get_version($library, $file, $pattern, $lines = 20, $cols = 200) {
|
||||
|
||||
$file = DRUPAL_ROOT . '/' . $library['library path'] . '/' . $file;
|
||||
if (!file_exists($file)) {
|
||||
return;
|
||||
}
|
||||
$file = fopen($file, 'r');
|
||||
while ($lines && $line = fgets($file, $cols)) {
|
||||
if (preg_match($pattern, $line, $version)) {
|
||||
fclose($file);
|
||||
return $version[1];
|
||||
}
|
||||
$lines--;
|
||||
}
|
||||
fclose($file);
|
||||
}
|
||||
|
||||
/**
|
||||
* Detects the variant of an example library.
|
||||
*
|
||||
* Returns exactly the value of $installed, either TRUE or FALSE. This function
|
||||
* cannot be collapsed with _libraries_test_return_version(), because of the
|
||||
* different arguments that are passed automatically.
|
||||
*/
|
||||
function _libraries_test_return_installed($library, $name, $installed) {
|
||||
return $installed;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the 'info callback' key.
|
||||
*
|
||||
* This function is used as a test callback for the 'info' callback group.
|
||||
*
|
||||
* @see _libraries_test_callback()
|
||||
*/
|
||||
function _libraries_test_info_callback(&$library, $version, $variant) {
|
||||
_libraries_test_callback($library, $version, $variant, 'info');
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the 'pre-detect callback' key.
|
||||
*
|
||||
* This function is used as a test callback for the 'pre-detect' callback group.
|
||||
*
|
||||
* @see _libraries_test_callback()
|
||||
*/
|
||||
function _libraries_test_pre_detect_callback(&$library, $version, $variant) {
|
||||
_libraries_test_callback($library, $version, $variant, 'pre-detect');
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the 'post-detect callback' key.
|
||||
*
|
||||
* This function is used as a test callback for the 'post-detect callback group.
|
||||
*
|
||||
* @see _libraries_test_callback()
|
||||
*/
|
||||
function _libraries_test_post_detect_callback(&$library, $version, $variant) {
|
||||
_libraries_test_callback($library, $version, $variant, 'post-detect');
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the 'pre-load callback' key.
|
||||
*
|
||||
* This function is used as a test callback for the 'pre-load' callback group.
|
||||
*
|
||||
* @see _libraries_test_callback()
|
||||
*/
|
||||
function _libraries_test_pre_load_callback(&$library, $version, $variant) {
|
||||
_libraries_test_callback($library, $version, $variant, 'pre-load');
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the 'post-load callback' key.
|
||||
*
|
||||
* This function is used as a test callback for the 'post-load' callback group.
|
||||
*
|
||||
* @see _libraries_test_callback()
|
||||
*/
|
||||
function _libraries_test_post_load_callback(&$library, $version, $variant) {
|
||||
_libraries_test_callback($library, $version, $variant, 'post-load');
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the '[group] callback' key, where [group] is prepare, detect, or load.
|
||||
*
|
||||
* This function is used as a test callback for the all callback groups.
|
||||
*
|
||||
* It sets the '[group] callback' (see above) key to 'applied ([part])' where
|
||||
* [part] is either 'top-level', 'version x.y' (where x.y is the passed-in
|
||||
* version string), 'variant example' (where example is the passed-in variant
|
||||
* name), or 'version x.y, variant example' (see above), depending on the part
|
||||
* of the library the passed-in library information belongs to.
|
||||
*
|
||||
* @param $library
|
||||
* An array of library information, which may be version- or variant-specific.
|
||||
* Passed by reference.
|
||||
* @param $version
|
||||
* The version the library information passed in $library belongs to, or NULL
|
||||
* if the passed library information is not version-specific.
|
||||
* @param $variant
|
||||
* The variant the library information passed in $library belongs to, or NULL
|
||||
* if the passed library information is not variant-specific.
|
||||
*/
|
||||
function _libraries_test_callback(&$library, $version, $variant, $group) {
|
||||
$string = 'applied';
|
||||
if (isset($version) && isset($variant)) {
|
||||
$string .= " (version $version, variant $variant)";
|
||||
}
|
||||
elseif (isset($version)) {
|
||||
$string .= " (version $version)";
|
||||
}
|
||||
elseif (isset($variant)) {
|
||||
$string .= " (variant $variant)";
|
||||
}
|
||||
else {
|
||||
$string .= ' (top-level)';
|
||||
}
|
||||
$library["$group callback"] = $string;
|
||||
|
||||
// The following is used to test caching of library information.
|
||||
// Only set the message for the top-level library to prevent confusing,
|
||||
// duplicate messages.
|
||||
if (!isset($version) && !isset($variant) && variable_get('libraries_test_cache', FALSE)) {
|
||||
drupal_set_message("The <em>$group</em> callback group was invoked.");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_menu().
|
||||
*/
|
||||
function libraries_test_menu() {
|
||||
$base = array(
|
||||
'page callback' => '_libraries_test_load',
|
||||
'access callback' => TRUE,
|
||||
);
|
||||
$items['libraries_test/files'] = $base + array(
|
||||
'title' => 'Test files',
|
||||
'page arguments' => array('example_files'),
|
||||
);
|
||||
$items['libraries_test/integration_files'] = $base + array(
|
||||
'title' => 'Test integration files',
|
||||
'page arguments' => array('example_integration_files'),
|
||||
);
|
||||
$items['libraries_test/versions'] = $base + array(
|
||||
'title' => 'Test version loading',
|
||||
'page arguments' => array('example_versions'),
|
||||
);
|
||||
$items['libraries_test/variant'] = $base + array(
|
||||
'title' => 'Test variant loading',
|
||||
'page arguments' => array('example_variant', 'example_variant'),
|
||||
);
|
||||
$items['libraries_test/versions_and_variants'] = $base + array(
|
||||
'title' => 'Test concurrent version and variant loading',
|
||||
'page arguments' => array('example_versions_and_variants', 'example_variant_2'),
|
||||
);
|
||||
$items['libraries_test/cache'] = $base + array(
|
||||
'title' => 'Test caching of library information',
|
||||
'page arguments' => array('example_callback'),
|
||||
);
|
||||
return $items;
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads a specified library (variant) for testing.
|
||||
*
|
||||
* JavaScript and CSS files can be checked directly by SimpleTest, so we only
|
||||
* need to manually check for PHP files. We provide information about the loaded
|
||||
* JavaScript and CSS files for easier debugging. See example/README.txt for
|
||||
* more information.
|
||||
*/
|
||||
function _libraries_test_load($library, $variant = NULL) {
|
||||
libraries_load($library, $variant);
|
||||
// JavaScript and CSS files can be checked directly by SimpleTest, so we only
|
||||
// need to manually check for PHP files.
|
||||
$output = '';
|
||||
|
||||
// For easer debugging of JS loading, a text is shown that the JavaScript will
|
||||
// replace.
|
||||
$output .= '<h2>JavaScript</h2>';
|
||||
$output .= '<div class="libraries-test-javascript">';
|
||||
$output .= 'If this text shows up, no JavaScript test file was loaded.';
|
||||
$output .= '</div>';
|
||||
|
||||
// For easier debugging of CSS loading, the loaded CSS files will color the
|
||||
// following text.
|
||||
$output .= '<h2>CSS</h2>';
|
||||
$output .= '<div class="libraries-test-css">';
|
||||
$output .= 'If one of the CSS test files has been loaded, this text will be colored:';
|
||||
$output .= '<ul>';
|
||||
// Do not reference the actual CSS files (i.e. including '.css'), because that
|
||||
// breaks testing.
|
||||
$output .= '<li>example_1: red</li>';
|
||||
$output .= '<li>example_2: green</li>';
|
||||
$output .= '<li>example_3: orange</li>';
|
||||
$output .= '<li>example_4: blue</li>';
|
||||
$output .= '<li>libraries_test: purple</li>';
|
||||
$output .= '</ul>';
|
||||
$output .= '</div>';
|
||||
|
||||
$output .= '<h2>PHP</h2>';
|
||||
$output .= '<div class="libraries-test-php">';
|
||||
$output .= 'The following is a list of all loaded test PHP files:';
|
||||
$output .= '<ul>';
|
||||
$files = get_included_files();
|
||||
foreach ($files as $file) {
|
||||
if (strpos($file, 'libraries/test') && !strpos($file, 'libraries_test.module')) {
|
||||
$output .= '<li>' . str_replace(DRUPAL_ROOT . '/', '', $file) . '</li>';
|
||||
}
|
||||
}
|
||||
$output .= '</ul>';
|
||||
$output .= '</div>';
|
||||
|
||||
return $output;
|
||||
}
|
Reference in New Issue
Block a user