Issue #2594669 by Wim Leers, borisson_, catch, dawehner: LibraryDependencyResolver::getMinimalRepresentativeSubset() accepts a set as the input but doesn't complain if it's not actually a set

merge-requests/1654/head
Alex Pott 2018-05-07 21:11:35 +01:00
parent 246a31c42f
commit b8c09bea47
No known key found for this signature in database
GPG Key ID: 31905460D4A69276
3 changed files with 12 additions and 2 deletions

View File

@ -65,6 +65,8 @@ class LibraryDependencyResolver implements LibraryDependencyResolverInterface {
* {@inheritdoc} * {@inheritdoc}
*/ */
public function getMinimalRepresentativeSubset(array $libraries) { public function getMinimalRepresentativeSubset(array $libraries) {
assert(count($libraries) === count(array_unique($libraries)), '$libraries can\'t contain duplicate items.');
$minimal = []; $minimal = [];
// Determine each library's dependencies. // Determine each library's dependencies.

View File

@ -766,10 +766,10 @@ function system_js_settings_alter(&$settings, AttachedAssetsInterface $assets) {
} }
// Provide the page with information about the individual asset libraries // Provide the page with information about the individual asset libraries
// used, information not otherwise available when aggregation is enabled. // used, information not otherwise available when aggregation is enabled.
$minimal_libraries = $library_dependency_resolver->getMinimalRepresentativeSubset(array_merge( $minimal_libraries = $library_dependency_resolver->getMinimalRepresentativeSubset(array_unique(array_merge(
$assets->getLibraries(), $assets->getLibraries(),
$assets->getAlreadyLoadedLibraries() $assets->getAlreadyLoadedLibraries()
)); )));
sort($minimal_libraries); sort($minimal_libraries);
$settings['ajaxPageState']['libraries'] = implode(',', $minimal_libraries); $settings['ajaxPageState']['libraries'] = implode(',', $minimal_libraries);
} }

View File

@ -169,4 +169,12 @@ class LibraryDependencyResolverTest extends UnitTestCase {
$this->assertEquals($expected, $this->libraryDependencyResolver->getMinimalRepresentativeSubset($libraries)); $this->assertEquals($expected, $this->libraryDependencyResolver->getMinimalRepresentativeSubset($libraries));
} }
/**
* @covers ::getMinimalRepresentativeSubset
*/
public function testGetMinimalRepresentativeSubsetInvalidInput() {
$this->setExpectedException(\AssertionError::class, '$libraries can\'t contain duplicate items.');
$this->libraryDependencyResolver->getMinimalRepresentativeSubset(['test/no_deps_a', 'test/no_deps_a']);
}
} }