Skip to content

Commit

Permalink
Add ignore property for each Mutator in JSON schema.
Browse files Browse the repository at this point in the history
Fixes #698

Add tests to prevent such issues in the future for any new mutators.
Add `helmich/phpunit-json-assert` for convenient JSON schema testing in PHPUnit
  • Loading branch information
maks-rafalko committed Jun 9, 2019
1 parent a774020 commit 8b35579
Show file tree
Hide file tree
Showing 4 changed files with 177 additions and 1 deletion.
1 change: 1 addition & 0 deletions composer.json
Expand Up @@ -60,6 +60,7 @@
"symfony/process": "3.4.2"
},
"require-dev": {
"helmich/phpunit-json-assert": "^2.1",
"phpunit/phpunit": "^7.5"
},
"config": {
Expand Down
87 changes: 86 additions & 1 deletion composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions resources/schema.json
Expand Up @@ -126,6 +126,7 @@
"type": "object",
"additionalProperties": false,
"properties": {
"ignore": {"type": "array", "items": {"type": "string"}},
"settings": {
"type": "object",
"additionalProperties": false,
Expand Down Expand Up @@ -155,6 +156,7 @@
"type": "object",
"additionalProperties": false,
"properties": {
"ignore": {"type": "array", "items": {"type": "string"}},
"settings": {
"type": "object",
"additionalProperties": false,
Expand Down Expand Up @@ -203,6 +205,7 @@
"type": "object",
"additionalProperties": false,
"properties": {
"ignore": {"type": "array", "items": {"type": "string"}},
"settings": {
"type": "object",
"additionalProperties": false,
Expand Down
87 changes: 87 additions & 0 deletions tests/resources/InfectionConfigJsonSchemaTest.php
@@ -0,0 +1,87 @@
<?php
/**
* This code is licensed under the BSD 3-Clause License.
*
* Copyright (c) 2017-2019, Maks Rafalko
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* * Neither the name of the copyright holder nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

declare(strict_types=1);

namespace Infection\Tests\resources;

use Helmich\JsonAssert\JsonAssertions;
use PHPUnit\Framework\TestCase;

class InfectionConfigJsonSchemaTest extends TestCase
{
use JsonAssertions;

private const SCHEMA_FILE = __DIR__ . '/../../resources/schema.json';

/**
* @var array|null
*/
private static $schema;

/**
* @dataProvider mutatorsProvider
*/
public function test_all_mutators_support_ignore_key(string $mutator): void
{
$infectionJson = <<<"JSON"
{
"timeout": 1,
"source": {"directories": ["src"]},
"mutators": {
"$mutator": {
"ignore": ["Foo\\\\Bar::baz"]
}
}
}
JSON;

self::assertJsonDocumentMatchesSchema($infectionJson, self::getSchema());
}

public function mutatorsProvider(): \Generator
{
foreach (array_keys(self::getSchema()['properties']['mutators']['properties']) as $mutator) {
yield $mutator => [$mutator];
}
}

private static function getSchema()
{
if (self::$schema !== null) {
return self::$schema;
}

return self::$schema = json_decode(file_get_contents(self::SCHEMA_FILE), true);
}
}

0 comments on commit 8b35579

Please sign in to comment.