Added an annoying consistency check for BlockFactory

This test is intended to enforce that the BlockFactory always has the same blocks in it from one commit to the next. Since there are a lot of changes going on right now around this, it's important that this is checked because bugs can go under the radar when large changes are happening.

The consistency check will need to be regenerated whenever a new block is registered, new states are found or when things are removed.
This commit is contained in:
Dylan K. Taylor 2019-02-24 13:56:55 +00:00
parent 6edd4fd9c7
commit 023fecabac
3 changed files with 50 additions and 0 deletions

View File

@ -24,6 +24,8 @@ declare(strict_types=1);
namespace pocketmine\block;
use PHPUnit\Framework\TestCase;
use function file_get_contents;
use function json_decode;
class BlockTest extends TestCase{
@ -138,4 +140,15 @@ class BlockTest extends TestCase{
self::assertGreaterThan(0, $value, "Light filter value for $id must be larger than 0");
}
}
public function testConsistency() : void{
$list = json_decode(file_get_contents(__DIR__ . '/block_factory_consistency_check.json'), true);
$states = BlockFactory::getAllKnownStates();
foreach($states as $k => $state){
self::assertArrayHasKey($k, $list, "New block state $k (" . $state->getName() . ") - consistency check may need regenerating");
}
foreach($list as $k => $name){
self::assertArrayHasKey($k, $states, "Missing previously-known block state $k ($name)");
}
}
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,36 @@
<?php
/*
*
* ____ _ _ __ __ _ __ __ ____
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* @author PocketMine Team
* @link http://www.pocketmine.net/
*
*
*/
declare(strict_types=1);
require dirname(__DIR__, 3) . '/vendor/autoload.php';
/* This script needs to be re-run after any intentional blockfactory change (adding or removing a block state). */
\pocketmine\block\BlockFactory::init();
file_put_contents(__DIR__ . '/block_factory_consistency_check.json', json_encode(
array_map(
function(\pocketmine\block\Block $block) : string{
return $block->getName();
},
\pocketmine\block\BlockFactory::getAllKnownStates()
)
));