open videos on popup overlay

This commit is contained in:
2017-02-07 10:34:00 +01:00
parent cc959e62bc
commit 81f67414c8
187 changed files with 17025 additions and 28 deletions
@@ -0,0 +1,119 @@
<?php
/**
* @file
* Contains LibrariesAdminWebTest.
*
* Simpletest automatically discovers test files using PSR-4. We cannot,
* however, declare a namespace for this class, as that would require PHP 5.3.
* To prepare the PHP 5.3 requirement and the usage of PSR-4 in 7.x-3.x, we
* split each test class into its own file and use the correct base name, but
* for now use the 'test' extension and register them explicitly in
* libraries.info.
*
* @see simpletest_test_get_all()
*/
/**
* Tests the administrative interface for libraries.
*/
class LibrariesAdminWebTest extends LibrariesWebTestBase {
/**
* Provides metadata about this test.
*
* @return array
* An array of test metadata with the following keys:
* - name: The name of the test.
* - description: The description of the test.
* - group: The group of the test.
*/
public static function getInfo() {
return array(
'name' => 'Libraries administration',
'description' => 'Tests the administrative interface for libraries.',
'group' => 'Libraries API',
);
}
/**
* Tests the libraries report at /admin/reports/libraries.
*/
public function testLibrariesReportOverview() {
$this->getWithPermissions(array('access site reports'), 'admin/reports/libraries');
$this->assertRaw('Libraries');
// Make sure that all the libraries are listed.
$libraries = libraries_info();
$this->assertTrue($libraries);
foreach ($libraries as $library) {
$this->assertText($library['name']);
$this->assertLinkByHref('admin/reports/libraries/' . $library['machine name']);
}
// Make sure that all possible statuses are displayed.
$this->assertText('OK');
$this->assertText('Not found');
$this->assertText('Not detected');
$this->assertText('Not supported');
$this->assertText('Missing dependency');
$this->assertText('Incompatible dependency');
// Make sure that the providers are displayed.
$this->assertRaw('<em class="placeholder">Libraries test module</em> module');
$this->assertRaw('<em class="placeholder">Libraries test theme</em> theme');
$this->assertRaw('<em class="placeholder">example_info_file.libraries.info</em> info file');
// Make sure that homepage and download links are displayed.
$this->assertLinkByHref('http://example.com');
$this->assertLinkByHref('http://example.com/download');
}
/**
* Tests the libraries report for an installed library.
*/
public function testLibrariesReportInstalled() {
$this->getWithPermissions(array('access site reports'), 'admin/reports/libraries/example_files');
$this->assertRaw('Status report for library <em class="placeholder">Example files</em>');
$this->assertRaw('The <em class="placeholder">Example files</em> library is installed correctly.');
// Check that the information in the status report is displayed.
$this->assertText('Example files');
$this->assertText('example_files');
$this->assertRaw('<em class="placeholder">Libraries test module</em> module');
$this->assertText(drupal_get_path('module', 'libraries') . '/tests/libraries/example');
$this->assertText('1');
}
/**
* Tests the libraries report for a missing library.
*/
public function testLibrariesReportMissing() {
$this->getWithPermissions(array('access site reports'), 'admin/reports/libraries/example_missing');
$this->assertRaw('Status report for library <em class="placeholder">Example missing</em>');
$this->assertRaw('The <em class="placeholder">Example missing</em> library could not be found.');
// Check that the download link is being displayed.
$this->assertLinkByHref('http://example.com/download');
}
/**
* Tests the libraries report for a missing library.
*/
public function testLibrariesReportNotDetected() {
$this->getWithPermissions(array('access site reports'), 'admin/reports/libraries/example_undetected_version');
$this->assertRaw('Status report for library <em class="placeholder">Example undetected version</em>');
$this->assertRaw('The version of the <em class="placeholder">Example undetected version</em> library could not be detected.');
}
/**
* Tests the libraries report for a missing library.
*/
public function testLibrariesReportNotSupported() {
$this->getWithPermissions(array('access site reports'), 'admin/reports/libraries/example_unsupported_version');
$this->assertRaw('Status report for library <em class="placeholder">Example unsupported version</em>');
$this->assertRaw('The installed version <em class="placeholder">1</em> of the <em class="placeholder">Example unsupported version</em> library is not supported.');
// Check that the download link is being displayed.
$this->assertLinkByHref('http://example.com/download');
}
}
@@ -0,0 +1,543 @@
<?php
/**
* @file
* Contains LibrariesLoadWebTest.
*
* Simpletest automatically discovers test files using PSR-4. We cannot,
* however, declare a namespace for this class, as that would require PHP 5.3.
* To prepare the PHP 5.3 requirement and the usage of PSR-4 in 7.x-3.x, we
* place the test files in the correct directory already, but for now register
* them explicitly in libraries.info
*/
/**
* Tests basic detection and loading of libraries.
*/
class LibrariesLoadWebTest extends LibrariesWebTestBase {
/**
* Provides metadata about this test.
*
* @return array
* An array of test metadata with the following keys:
* - name: The name of the test.
* - description: The description of the test.
* - group: The group of the test.
*/
public static function getInfo() {
return array(
'name' => 'Libraries detection and loading',
'description' => 'Tests detection and loading of libraries.',
'group' => 'Libraries API',
);
}
/**
* Tests libraries_detect_dependencies().
*/
public 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->verbose('Library:<pre>' . var_export($library, TRUE) . '</pre>');
$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->verbose('Library:<pre>' . var_export($library, TRUE) . '</pre>');
$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().
*/
public function testLibrariesScanInfoFiles() {
$expected = array('example_info_file' => (object) array(
'uri' => drupal_get_path('module', 'libraries') . '/tests/libraries/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().
*/
public function testLibrariesInfo() {
// Test that modules can provide and alter library information.
$info = libraries_info();
$this->assertTrue(isset($info['example_module']));
$this->verbose('Library:<pre>' . var_export($info['example_module'], TRUE) . '</pre>');
$this->assertEqual($info['example_module']['info type'], 'module');
$this->assertEqual($info['example_module']['module'], 'libraries_test_module');
$this->assertTrue($info['example_module']['module_altered']);
// Test that themes can provide and alter library information.
$this->assertTrue(isset($info['example_theme']));
$this->verbose('Library:<pre>' . var_export($info['example_theme'], TRUE) . '</pre>');
$this->assertEqual($info['example_theme']['info type'], 'theme');
$this->assertEqual($info['example_theme']['theme'], 'libraries_test_theme');
$this->assertTrue($info['example_theme']['theme_altered']);
// Test that library information is found correctly.
$expected = array(
'name' => 'Example files',
'library path' => drupal_get_path('module', 'libraries') . '/tests/libraries/example',
'version' => '1',
'files' => array(
'js' => array('example_1.js' => array()),
'css' => array('example_1.css' => array()),
'php' => array('example_1.php' => array()),
),
'info type' => 'module',
'module' => 'libraries_test_module',
);
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 type' => 'info file',
'info file' => drupal_get_path('module', 'libraries') . '/tests/libraries/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().
*/
public 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_detect() without a $name parameter.
*/
public function testLibrariesDetectAll() {
// Test that an array with all library information is returned and that the
// libraries are properly detected.
$libraries = libraries_detect();
$this->verbose('<pre>' . var_export($libraries, TRUE) . '</pre>');
$this->assertEqual($libraries['example_missing']['error'], 'not found');
$this->assertEqual($libraries['example_undetected_version']['error'], 'not detected');
$this->assertEqual($libraries['example_unsupported_version']['error'], 'not supported');
$this->assertEqual($libraries['example_supported_version']['installed'], TRUE);
}
/**
* Tests libraries_load().
*/
public 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');
// Test that PHP files that have a local $path variable do not break library
// loading.
// @see _libraries_require_once()
$library = libraries_load('example_path_variable_override');
$this->assertEqual($library['loaded'], 2, 'PHP files cannot break library loading.');
}
/**
* Tests the applying of callbacks.
*/
public function testCallbacks() {
$expected = array(
'name' => 'Example callback',
'library path' => drupal_get_path('module', 'libraries') . '/tests/libraries/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-dependencies-load 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-dependencies-load 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-dependencies-load callback' => 'not applied',
'pre-load callback' => 'not applied',
'post-load callback' => 'not applied',
),
),
'callbacks' => array(
'info' => array('_libraries_test_module_info_callback'),
'pre-detect' => array('_libraries_test_module_pre_detect_callback'),
'post-detect' => array('_libraries_test_module_post_detect_callback'),
'pre-dependencies-load' => array('_libraries_test_module_pre_dependencies_load_callback'),
'pre-load' => array('_libraries_test_module_pre_load_callback'),
'post-load' => array('_libraries_test_module_post_load_callback'),
),
'info callback' => 'not applied',
'pre-detect callback' => 'not applied',
'post-detect callback' => 'not applied',
'pre-dependencies-load callback' => 'not applied',
'pre-load callback' => 'not applied',
'post-load callback' => 'not applied',
'info type' => 'module',
'module' => 'libraries_test_module',
);
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-dependencies-load', '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-dependencies-load callback'] = 'applied (top-level)';
$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_module_load()
*/
public function testLibrariesOutput() {
// Test loading of a simple library with a top-level files property.
$this->drupalGet('libraries-test-module/files');
$this->assertLibraryFiles('example_1', 'File loading');
// Test loading of integration files.
$this->drupalGet('libraries-test-module/module-integration-files');
$this->assertRaw('libraries_test_module.js', 'Integration file loading: libraries_test_module.js found');
$this->assertRaw('libraries_test_module.css', 'Integration file loading: libraries_test_module.css found');
$this->assertRaw('libraries_test_module.inc', 'Integration file loading: libraries_test_module.inc found');
$this->drupalGet('libraries-test-module/theme-integration-files');
$this->assertRaw('libraries_test_theme.js', 'Integration file loading: libraries_test_theme.js found');
$this->assertRaw('libraries_test_theme.css', 'Integration file loading: libraries_test_theme.css found');
$this->assertRaw('libraries_test_theme.inc', 'Integration file loading: libraries_test_theme.inc found');
// Test loading of post-load integration files.
$this->drupalGet('libraries-test-module/module-integration-files-post-load');
// If the files were not loaded correctly, a fatal error occurs.
$this->assertResponse(200, 'Post-load integration files are loaded correctly.');
// Test version overloading.
$this->drupalGet('libraries-test-module/versions');
$this->assertLibraryFiles('example_2', 'Version overloading');
// Test variant loading.
$this->drupalGet('libraries-test-module/variant');
$this->assertLibraryFiles('example_3', 'Variant loading');
// Test version overloading and variant loading.
$this->drupalGet('libraries-test-module/versions-and-variants');
$this->assertLibraryFiles('example_4', 'Concurrent version and variant overloading');
// Test caching.
variable_set('libraries_test_module_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-module/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-module/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_module_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').
*/
public 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') . "/tests/libraries/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.");
}
}
}
}
}
@@ -0,0 +1,78 @@
<?php
/**
* @file
* Contains LibrariesUnitTest.
*
* Simpletest automatically discovers test files using PSR-4. We cannot,
* however, declare a namespace for this class, as that would require PHP 5.3.
* To prepare the PHP 5.3 requirement and the usage of PSR-4 in 7.x-3.x, we
* place the test files in the correct directory already, but for now register
* them explicitly in libraries.info.
*/
/**
* Tests basic Libraries API functions.
*/
class LibrariesUnitTest extends DrupalUnitTestCase {
/**
* Provides metadata about this test.
*
* @return array
* An array of test metadata with the following keys:
* - name: The name of the test.
* - description: The description of the test.
* - group: The group of the test.
*/
public static function getInfo() {
return array(
'name' => 'Libraries API unit tests',
'description' => 'Tests basic functions provided by Libraries API.',
'group' => 'Libraries API',
);
}
/**
* {@inheritdoc}
*/
protected function setUp() {
drupal_load('module', 'libraries');
parent::setUp();
}
/**
* Tests libraries_get_path().
*/
public 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().
*/
public 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.');
}
}
@@ -0,0 +1,64 @@
<?php
/**
* @file
* Contains LibrariesWebTestBase.
*
* Simpletest automatically discovers test files using PSR-4. We cannot,
* however, declare a namespace for this class, as that would require PHP 5.3.
* To prepare the PHP 5.3 requirement and the usage of PSR-4 in 7.x-3.x, we
* place the test files in the correct directory already, but for now register
* them explicitly in libraries.info
*/
/**
* Base class for Libraries API web tests.
*/
abstract class LibrariesWebTestBase extends DrupalWebTestCase {
/**
* {@inheritdoc}
*/
protected $profile = 'testing';
/**
* {@inheritdoc}
*/
protected function setUp() {
parent::setUp('libraries', 'libraries_test_module');
theme_enable(array('libraries_test_theme'));
}
/**
* Retrieves a path making sure a set of permissions is required to access it.
*
* After calling this method, a user with the given permissions is logged in
* and the retrieved page is loaded into the internal browser.
*
* @param array $permissions
* An array of permission names to assign to user. Note that the user always
* has the default permissions derived from the "authenticated users" role.
* @param string $path
* Drupal path or URL to load into the internal browser.
* @param array $options
* Options to be forwarded to url().
* @param array $headers
* An array containing additional HTTP request headers, each formatted as
* "name: value".
*
* @return string
* The retrieved HTML string, also available as $this->drupalGetContent().
*
* @see \DrupalWebTestCase::drupalGet()
* @see \DrupalWebTestCase::drupalCreateUser()
*/
protected function getWithPermissions(array $permissions, $path, array $options = array(), array $headers = array()) {
$this->drupalGet($path, $options, $headers);
$this->assertResponse(403);
$this->drupalLogin($this->drupalCreateUser($permissions));
$this->drupalGet($path, $options, $headers);
$this->assertResponse(200);
}
}
@@ -0,0 +1,43 @@
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_module.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_module: 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_module.js, libraries_test_module.css,
libraries_test_module.inc and are located in the test module's directory
alongside libraries_test_module.info (i.e. they are not in the same directory as
this file).
@@ -0,0 +1,12 @@
/**
* @file
* Test CSS file for Libraries loading.
*
* Color the 'libraries-test-module-css' div red. See README.txt for more
* information.
*/
.libraries-test-module-css {
color: red;
}
@@ -0,0 +1,18 @@
/**
* @file
* Test JavaScript file for Libraries loading.
*
* Replace the text in the 'libraries-test-module-js' div. See README.txt for
* more information.
*/
(function ($) {
Drupal.behaviors.librariesTest = {
attach: function(context, settings) {
$('.libraries-test-module-js').text('If this text shows up, example_1.js was loaded successfully.')
}
};
})(jQuery);
@@ -0,0 +1,15 @@
<?php
/**
* @file
* Test PHP file for Libraries loading.
*/
// @see _libraries_require_once()
$path = 'abc';
/**
* Dummy function to see if this file was loaded.
*/
function _libraries_test_module_example_1() {
}
@@ -0,0 +1,12 @@
/**
* @file
* Test CSS file for Libraries loading.
*
* Color the 'libraries-test-module-css' div green. See README.txt for more
* information.
*/
.libraries-test-module-css {
color: green;
}
@@ -0,0 +1,18 @@
/**
* @file
* Test JavaScript file for Libraries loading.
*
* Replace the text in the 'libraries-test-module-js' div. See README.txt for
* more information.
*/
(function ($) {
Drupal.behaviors.librariesTest = {
attach: function(context, settings) {
$('.libraries-test-module-js').text('If this text shows up, example_2.js was loaded successfully.')
}
};
})(jQuery);
@@ -0,0 +1,15 @@
<?php
/**
* @file
* Test PHP file for Libraries loading.
*/
// @see _libraries_require_once()
$path = 'abc';
/**
* Dummy function to see if this file was loaded.
*/
function _libraries_test_module_example_2() {
}
@@ -0,0 +1,12 @@
/**
* @file
* Test CSS file for Libraries loading.
*
* Color the 'libraries-test-module-css' div orange. See README.txt for more
* information.
*/
.libraries-test-module-css {
color: orange;
}
@@ -0,0 +1,18 @@
/**
* @file
* Test JavaScript file for Libraries loading.
*
* Replace the text in the 'libraries-test-module-js' div. See README.txt for
* more information.
*/
(function ($) {
Drupal.behaviors.librariesTest = {
attach: function(context, settings) {
$('.libraries-test-module-js').text('If this text shows up, example_3.js was loaded successfully.')
}
};
})(jQuery);
@@ -0,0 +1,12 @@
<?php
/**
* @file
* Test PHP file for Libraries loading.
*/
/**
* Dummy function to see if this file was loaded.
*/
function _libraries_test_module_example_3() {
}
@@ -0,0 +1,12 @@
/**
* @file
* Test CSS file for Libraries loading.
*
* Color the 'libraries-test-module-css' div blue. See README.txt for more
* information.
*/
.libraries-test-module-css {
color: blue;
}
@@ -0,0 +1,18 @@
/**
* @file
* Test JavaScript file for Libraries loading.
*
* Replace the text in the 'libraries-test-module-js' div. See README.txt for
* more information.
*/
(function ($) {
Drupal.behaviors.librariesTest = {
attach: function(context, settings) {
$('.libraries-test-module-js').text('If this text shows up, example_4.js was loaded successfully.')
}
};
})(jQuery);
@@ -0,0 +1,12 @@
<?php
/**
* @file
* Test PHP file for Libraries loading.
*/
/**
* Dummy function to see if this file was loaded.
*/
function _libraries_test_module_example_4() {
}
@@ -0,0 +1,10 @@
; 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 2016-05-12
version = "7.x-2.3"
core = "7.x"
project = "libraries"
datestamp = "1463077450"
@@ -0,0 +1,12 @@
/**
* @file
* Test CSS file for Libraries loading.
*
* Color the 'libraries-test-module-css' div purple. See README.txt for more
* information.
*/
.libraries-test-module-css {
color: purple;
}
@@ -0,0 +1,11 @@
<?php
/**
* @file
* Test PHP file for Libraries loading.
/**
* Dummy function to see if this file was loaded.
*/
function _libraries_test_module_integration_file() {
}
@@ -0,0 +1,13 @@
name = Libraries test module
description = Tests library detection and loading.
core = 7.x
package = Testing
dependencies[] = libraries
hidden = TRUE
; Information added by Drupal.org packaging script on 2016-05-12
version = "7.x-2.3"
core = "7.x"
project = "libraries"
datestamp = "1463077450"
@@ -0,0 +1,18 @@
/**
* @file
* Test JavaScript file for Libraries loading.
*
* Replace the text in the 'libraries-test-module-js' div. See README.txt for
* more information.
*/
(function ($) {
Drupal.behaviors.librariesTest = {
attach: function(context, settings) {
$('.libraries-test-module-js').text('If this text shows up, libraries_test_module.js was loaded successfully.')
}
};
})(jQuery);
@@ -0,0 +1,631 @@
<?php
/**
* @file
* Tests the library detection and loading.
*/
/**
* Implements hook_libraries_info().
*/
function libraries_test_module_libraries_info() {
// Test library information gathering.
$libraries['example_module'] = array(
'name' => 'Example module',
'module_altered' => FALSE,
);
// Test library detection.
$libraries['example_missing'] = array(
'name' => 'Example missing',
// Provide a vendor and download URL to test that the UI links to it.
'vendor url' => 'http://example.com',
'download url' => 'http://example.com/download',
'library path' => drupal_get_path('module', 'libraries') . '/tests/libraries/missing',
);
$libraries['example_undetected_version'] = array(
'name' => 'Example undetected version',
'library path' => drupal_get_path('module', 'libraries') . '/tests/libraries/example',
'version callback' => '_libraries_test_module_return_version',
'version arguments' => array(FALSE),
);
$libraries['example_unsupported_version'] = array(
'name' => 'Example unsupported version',
// Provide a download URL to test that the UI links to it.
'download url' => 'http://example.com/download',
'library path' => drupal_get_path('module', 'libraries') . '/tests/libraries/example',
'version callback' => '_libraries_test_module_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/libraries/example',
'version callback' => '_libraries_test_module_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/libraries/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/libraries/example',
// Version 1
'version callback' => '_libraries_test_module_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/libraries/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_module_integration_files'] = array(
'name' => 'Example module integration files',
'library path' => drupal_get_path('module', 'libraries') . '/tests/libraries/example',
'version' => '1',
'integration files' => array(
'libraries_test_module' => array(
'js' => array('libraries_test_module.js'),
'css' => array('libraries_test_module.css'),
'php' => array('libraries_test_module.inc'),
),
),
);
// Test loading of integration files after library files.
// We test the correct loading order by calling a function that is defined in
// example_1.php in libraries_test_module_post_load.inc.
$libraries['example_module_integration_files_post_load'] = array(
'name' => 'Example module post-load integration files',
'library path' => drupal_get_path('module', 'libraries') . '/tests/libraries/example',
'version' => '1',
'files' => array(
'php' => array('example_1.php'),
),
'integration files' => array(
'libraries_test_module' => array(
'php' => array('libraries_test_module_post_load.inc'),
),
),
'post-load integration files' => TRUE,
);
// Test version overloading.
$libraries['example_versions'] = array(
'name' => 'Example versions',
'library path' => drupal_get_path('module', 'libraries') . '/tests/libraries/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/libraries/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_module_return_installed',
'variant arguments' => array(FALSE),
),
),
);
$libraries['example_variant'] = array(
'name' => 'Example variant',
'library path' => drupal_get_path('module', 'libraries') . '/tests/libraries/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_module_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/libraries/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_module_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_module_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_module_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_module_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/libraries/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/libraries/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/libraries/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/libraries/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/libraries/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-dependencies-load 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-dependencies-load 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-dependencies-load callback' => 'not applied',
'pre-load callback' => 'not applied',
'post-load callback' => 'not applied',
),
),
'callbacks' => array(
'info' => array('_libraries_test_module_info_callback'),
'pre-detect' => array('_libraries_test_module_pre_detect_callback'),
'post-detect' => array('_libraries_test_module_post_detect_callback'),
'pre-dependencies-load' => array('_libraries_test_module_pre_dependencies_load_callback'),
'pre-load' => array('_libraries_test_module_pre_load_callback'),
'post-load' => array('_libraries_test_module_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-dependencies-load callback' => 'not applied',
'pre-load callback' => 'not applied',
'post-load callback' => 'not applied',
);
$libraries['example_path_variable_override'] = array(
'name' => 'Example path variable override',
'library path' => drupal_get_path('module', 'libraries') . '/tests/libraries/example',
'version' => '1',
'files' => array(
'php' => array('example_1.php', 'example_2.php'),
),
);
return $libraries;
}
/**
* Implements hook_libraries_info_alter().
*/
function libraries_test_module_libraries_info_alter(&$libraries) {
$libraries['example_module']['module_altered'] = TRUE;
}
/**
* Implements hook_libraries_info_file_paths()
*/
function libraries_test_module_libraries_info_file_paths() {
return array(drupal_get_path('module', 'libraries') . '/tests/libraries');
}
/**
* 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_module_return_installed(),
* because of the different arguments that are passed automatically.
*/
function _libraries_test_module_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_module_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_module_return_version(), because of
* the different arguments that are passed automatically.
*/
function _libraries_test_module_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_module_callback()
*/
function _libraries_test_module_info_callback(&$library, $version, $variant) {
_libraries_test_module_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_module_callback()
*/
function _libraries_test_module_pre_detect_callback(&$library, $version, $variant) {
_libraries_test_module_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_module_callback()
*/
function _libraries_test_module_post_detect_callback(&$library, $version, $variant) {
_libraries_test_module_callback($library, $version, $variant, 'post-detect');
}
/**
* Sets the 'pre-dependencies-load callback' key.
*
* This function is used as a test callback for the 'pre-dependencies-load'
* callback group.
*
* @see _libraries_test_module_callback()
*/
function _libraries_test_module_pre_dependencies_load_callback(&$library, $version, $variant) {
_libraries_test_module_callback($library, $version, $variant, 'pre-dependencies-load');
}
/**
* Sets the 'pre-load callback' key.
*
* This function is used as a test callback for the 'pre-load' callback group.
*
* @see _libraries_test_module_callback()
*/
function _libraries_test_module_pre_load_callback(&$library, $version, $variant) {
_libraries_test_module_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_module_callback()
*/
function _libraries_test_module_post_load_callback(&$library, $version, $variant) {
_libraries_test_module_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_module_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_module_cache', FALSE)) {
drupal_set_message("The <em>$group</em> callback group was invoked.");
}
}
/**
* Implements hook_menu().
*/
function libraries_test_module_menu() {
$base = array(
'page callback' => '_libraries_test_module_load',
'access callback' => TRUE,
);
$items['libraries-test-module/files'] = $base + array(
'title' => 'Test files',
'page arguments' => array('example_files'),
);
$items['libraries-test-module/module-integration-files'] = $base + array(
'title' => 'Test module integration files',
'page arguments' => array('example_module_integration_files'),
);
$items['libraries-test-module/module-integration-files-post-load'] = $base + array(
'title' => 'Test module post-load integration files',
'page arguments' => array('example_module_integration_files_post_load'),
);
$items['libraries-test-module/theme-integration-files'] = $base + array(
'title' => 'Test theme integration files',
'page arguments' => array('example_theme_integration_files'),
);
$items['libraries-test-module/versions'] = $base + array(
'title' => 'Test version loading',
'page arguments' => array('example_versions'),
);
$items['libraries-test-module/variant'] = $base + array(
'title' => 'Test variant loading',
'page arguments' => array('example_variant', 'example_variant'),
);
$items['libraries-test-module/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-module/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_module_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-module-js">';
$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-module-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_module: purple</li>';
$output .= '<li>libraries_test_theme: turquoise</li>';
$output .= '</ul>';
$output .= '</div>';
$output .= '<h2>PHP</h2>';
$output .= '<div class="libraries-test-module-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.module') && !strpos($file, 'template.php')) {
$output .= '<li>' . str_replace(DRUPAL_ROOT . '/', '', $file) . '</li>';
}
}
$output .= '</ul>';
$output .= '</div>';
return $output;
}
/**
* Implements hook_system_theme_info().
*/
function libraries_test_module_system_theme_info() {
$themes = array();
$themes['libraries_test_theme'] = drupal_get_path('module', 'libraries') . '/tests/themes/libraries_test_theme/libraries_test_theme.info';
return $themes;
}
@@ -0,0 +1,15 @@
<?php
/**
* @file
* Test PHP file for Libraries loading.
/**
* Dummy function to see if this file was loaded.
*/
function _libraries_test_module_integration_file_post_load() {
}
// Call a function that is defined in the library file, to ensure that was
// loaded prior to this file.
_libraries_test_module_example_1();
@@ -0,0 +1,12 @@
/**
* @file
* Test CSS file for Libraries loading.
*
* Color the 'libraries-test-module-css' div purple. See README.txt for more
* information.
*/
.libraries-test-module-css {
color: turquoise;
}
@@ -0,0 +1,11 @@
<?php
/**
* @file
* Test PHP file for Libraries loading.
/**
* Dummy function to see if this file was loaded.
*/
function _libraries_test_theme_integration_file() {
}
@@ -0,0 +1,11 @@
name = Libraries test theme
description = Tests that themes can provide and alter library information.
core = 7.x
hidden = TRUE
; Information added by Drupal.org packaging script on 2016-05-12
version = "7.x-2.3"
core = "7.x"
project = "libraries"
datestamp = "1463077450"
@@ -0,0 +1,18 @@
/**
* @file
* Test JavaScript file for Libraries loading.
*
* Replace the text in the 'libraries-test-module-js' div. See README.txt for
* more information.
*/
(function ($) {
Drupal.behaviors.librariesTest = {
attach: function(context, settings) {
$('.libraries-test-module-js').text('If this text shows up, libraries_test_theme.js was loaded successfully.')
}
};
})(jQuery);
@@ -0,0 +1,36 @@
<?php
/**
* @file
* Libraries test theme.
*/
/**
* Implements hook_libraries_info().
*/
function libraries_test_theme_libraries_info() {
$libraries['example_theme'] = array(
'name' => 'Example theme',
'theme_altered' => FALSE,
);
$libraries['example_theme_integration_files'] = array(
'name' => 'Example theme integration file',
'library path' => drupal_get_path('module', 'libraries') . '/tests/libraries/example',
'version' => '1',
'integration files' => array(
'libraries_test_theme' => array(
'js' => array('libraries_test_theme.js'),
'css' => array('libraries_test_theme.css'),
'php' => array('libraries_test_theme.inc'),
),
),
);
return $libraries;
}
/**
* Implements hook_libraries_info_alter().
*/
function libraries_test_theme_libraries_info_alter(&$libraries) {
$libraries['example_theme']['theme_altered'] = TRUE;
}