Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Font Library: unregister font collection #54701

Merged
merged 28 commits into from
Jan 8, 2024
Merged
Show file tree
Hide file tree
Changes from 18 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
fb475a2
remove font collection
matiasbenedetto Sep 21, 2023
a50a2de
add wp_unregister_font_collection function
matiasbenedetto Sep 21, 2023
8b90373
format php
matiasbenedetto Sep 21, 2023
2968267
fix function comment
matiasbenedetto Sep 21, 2023
42a61c5
add tests for unregister_font_collection
matiasbenedetto Sep 21, 2023
27102fa
removig unused variable
matiasbenedetto Sep 21, 2023
da35119
Merge branch 'trunk' into try/unregister-font-collection
matiasbenedetto Oct 10, 2023
7830ff7
update wording on comments
matiasbenedetto Oct 10, 2023
2d6dcd2
Merge branch 'try/unregister-font-collection' of github.com:WordPress…
matiasbenedetto Oct 10, 2023
b7c9113
keep track of unregistered font collection ids in an array
matiasbenedetto Oct 11, 2023
cb28b82
add tests to assure that get_font_collections returns an empty array …
matiasbenedetto Oct 11, 2023
eee0a8d
fix tests
matiasbenedetto Oct 11, 2023
e489991
test the initial empty value of the font library collections
matiasbenedetto Oct 11, 2023
177aa58
format
matiasbenedetto Oct 11, 2023
06a10ea
simplify unregistering of font collections and add _doing_it_wrong call
matiasbenedetto Oct 11, 2023
4d16323
add translation domain
matiasbenedetto Oct 11, 2023
6f2ba86
adding _doing_it_wrong if you are registering collections with the sa…
matiasbenedetto Oct 12, 2023
d9ee03a
updating tests
matiasbenedetto Oct 12, 2023
a07e9fb
replace 6.4.0 by 6.5.0 in comments
matiasbenedetto Oct 12, 2023
e9f7b44
update version
matiasbenedetto Nov 14, 2023
e864318
Merge branch 'trunk' into try/unregister-font-collection
matiasbenedetto Dec 21, 2023
6ca8662
consolidate code as only one function to avoid code repetition
matiasbenedetto Dec 21, 2023
5a2c1ff
create base test case
matiasbenedetto Dec 21, 2023
83525bf
format php
matiasbenedetto Dec 21, 2023
a42fa3f
assertWPError
matiasbenedetto Dec 21, 2023
771e760
check that collection was not unregistered by mistake
matiasbenedetto Dec 21, 2023
5d38c57
calling parent test class mehtods
matiasbenedetto Dec 21, 2023
dcd9770
format php
matiasbenedetto Dec 21, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 46 additions & 4 deletions lib/experimental/fonts/font-library/class-wp-font-library.php
Original file line number Diff line number Diff line change
Expand Up @@ -63,15 +63,57 @@ public static function get_expected_font_mime_types_per_php_version( $php_versio
*/
public static function register_font_collection( $config ) {
$new_collection = new WP_Font_Collection( $config );

if ( isset( self::$collections[ $config['id'] ] ) ) {
return new WP_Error( 'font_collection_registration_error', 'Font collection already registered.' );
if ( self::is_collection_registered( $config['id'] ) ) {
$error_message = sprintf(
/* translators: %s: Font collection id. */
__( 'Font collection with id: "%s" is already registered.', 'default' ),
$config['id']
);
_doing_it_wrong(
__METHOD__,
$error_message,
'6.4.0'
matiasbenedetto marked this conversation as resolved.
Show resolved Hide resolved
);
return new WP_Error( 'font_collection_registration_error', $error_message );
}

self::$collections[ $config['id'] ] = $new_collection;
return $new_collection;
}

/**
* Unregisters a previously registered font collection.
*
* @since 6.4.0
matiasbenedetto marked this conversation as resolved.
Show resolved Hide resolved
*
* @param string $collection_id Font collection ID.
* @return bool True if the font collection was unregistered successfully and false otherwise.
*/
public static function unregister_font_collection( $collection_id ) {
if ( ! self::is_collection_registered( $collection_id ) ) {
_doing_it_wrong(
__METHOD__,
/* translators: %s: Font collection id. */
sprintf( __( 'Font collection "%s" not found.', 'default' ), $collection_id ),
'6.4.0'
matiasbenedetto marked this conversation as resolved.
Show resolved Hide resolved
);
return false;
}
unset( self::$collections[ $collection_id ] );
return true;
}

/**
* Checks if a font collection is registered.
*
* @since 6.4.0
matiasbenedetto marked this conversation as resolved.
Show resolved Hide resolved
*
* @param string $collection_id Font collection ID.
* @return bool True if the font collection is registered and false otherwise.
*/
private static function is_collection_registered( $collection_id ) {
return array_key_exists( $collection_id, self::$collections );
}

/**
* Gets all the font collections available.
*
Expand Down
13 changes: 13 additions & 0 deletions lib/experimental/fonts/font-library/font-library.php
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,19 @@ function wp_register_font_collection( $config ) {
}
}

if ( ! function_exists( 'wp_unregister_font_collection' ) ) {
/**
* Unregisters a font collection from the Font Library.
*
* @since 6.4.0
matiasbenedetto marked this conversation as resolved.
Show resolved Hide resolved
*
* @param string $collection_id The font collection ID.
*/
function wp_unregister_font_collection( $collection_id ) {
WP_Font_Library::unregister_font_collection( $collection_id );
}

}

$default_font_collection = array(
'id' => 'default-font-collection',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,33 +12,40 @@
*/
class Tests_Fonts_WpFontLibrary_GetFontCollections extends WP_UnitTestCase {

public static function set_up_before_class() {
$font_library = new WP_Font_Library();
public function set_up() {
// Resets the private static property WP_Font_Library::$collections to empty array.
$reflection = new ReflectionClass( 'WP_Font_Library' );
$property = $reflection->getProperty( 'collections' );
$property->setAccessible( true );
$property->setValue( array() );
}

public function tear_down() {
// Resets the private static property WP_Font_Library::$collections to empty array.
$reflection = new ReflectionClass( 'WP_Font_Library' );
$property = $reflection->getProperty( 'collections' );
$property->setAccessible( true );
$property->setValue( array() );
}
matiasbenedetto marked this conversation as resolved.
Show resolved Hide resolved

public function test_should_get_an_empty_list() {
$font_collections = WP_Font_Library::get_font_collections();
$this->assertEmpty( $font_collections, 'Should return an empty array.' );
}

public function test_should_get_mock_font_collection() {
$my_font_collection_config = array(
'id' => 'my-font-collection',
'name' => 'My Font Collection',
'description' => 'Demo about how to a font collection to your WordPress Font Library.',
'src' => path_join( __DIR__, 'my-font-collection-data.json' ),
);

$font_library::register_font_collection( $my_font_collection_config );
}
WP_Font_Library::register_font_collection( $my_font_collection_config );

public function test_should_get_the_default_font_collection() {
$font_collections = WP_Font_Library::get_font_collections();
$this->assertArrayHasKey( 'default-font-collection', $font_collections, 'Default Google Fonts collection should be registered' );
$this->assertInstanceOf( 'WP_Font_Collection', $font_collections['default-font-collection'], 'The value of the array $font_collections[id] should be an instance of WP_Font_Collection class.' );
}

public function test_should_get_the_right_number_of_collections() {
$font_collections = WP_Font_Library::get_font_collections();
$this->assertNotEmpty( $font_collections, 'Sould return an array of font collections.' );
$this->assertCount( 2, $font_collections, 'Should return an array with one font collection.' );
}

public function test_should_get_mock_font_collection() {
$font_collections = WP_Font_Library::get_font_collections();
$this->assertCount( 1, $font_collections, 'Should return an array with one font collection.' );
$this->assertArrayHasKey( 'my-font-collection', $font_collections, 'The array should have the key of the registered font collection id.' );
$this->assertInstanceOf( 'WP_Font_Collection', $font_collections['my-font-collection'], 'The value of the array $font_collections[id] should be an instance of WP_Font_Collection class.' );
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ public function test_should_return_error_if_id_is_repeated() {
$collection1 = WP_Font_Library::register_font_collection( $config1 );
$this->assertInstanceOf( 'WP_Font_Collection', $collection1, 'A collection should be registered.' );

// Expects a _doing_it_wrong notice.
$this->setExpectedIncorrectUsage( 'WP_Font_Library::register_font_collection' );
// Try to register a second collection with same id.
$collection2 = WP_Font_Library::register_font_collection( $config2 );
$this->assertWPError( $collection2, 'Second collection with the same id should fail.' );
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
<?php
/**
* Test WP_Font_Library::unregister_font_collection().
*
* @package WordPress
* @subpackage Font Library
*
* @group fonts
* @group font-library
*
* @covers WP_Font_Library::unregister_font_collection
*/
class Tests_Fonts_WpFontLibrary_UnregisterFontCollection extends WP_UnitTestCase {

public function set_up() {
// Resets the private static property WP_Font_Library::$collections to empty array.
$reflection = new ReflectionClass( 'WP_Font_Library' );
$property = $reflection->getProperty( 'collections' );
$property->setAccessible( true );
$property->setValue( array() );

// Registers two mock font collections.
$config = array(
'id' => 'mock-font-collection-1',
'name' => 'Mock Collection to be unregistered',
'description' => 'A mock font collection to be unregistered.',
'src' => 'my-collection-data.json',
);
WP_Font_Library::register_font_collection( $config );

$config = array(
'id' => 'mock-font-collection-2',
'name' => 'Mock Collection',
'description' => 'A mock font collection.',
'src' => 'my-mock-data.json',
);
WP_Font_Library::register_font_collection( $config );
matiasbenedetto marked this conversation as resolved.
Show resolved Hide resolved
}

public function test_should_unregister_font_collection() {
// Unregister mock font collection.
WP_Font_Library::unregister_font_collection( 'mock-font-collection-1' );
$collections = WP_Font_Library::get_font_collections();
$this->assertArrayNotHasKey( 'mock-font-collection-1', $collections, 'Font collection was not unregistered.' );

matiasbenedetto marked this conversation as resolved.
Show resolved Hide resolved
// Unregisters remaining mock font collection.
WP_Font_Library::unregister_font_collection( 'mock-font-collection-2' );
$collections = WP_Font_Library::get_font_collections();
$this->assertArrayNotHasKey( 'mock-font-collection-2', $collections, 'Mock font collection was not unregistered.' );

// Checks that all font collections were unregistered.
$this->assertEmpty( $collections, 'Font collections were not unregistered.' );
}

public function unregister_non_existing_collection() {
// Unregisters non existing font collection.
WP_Font_Library::unregister_font_collection( 'non-existing-collection' );
$collections = WP_Font_Library::get_font_collections();
$this->assertEmpty( $collections, 'Should not be registered collections.' );
}
}
Loading