Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
5 changes: 5 additions & 0 deletions .github/workflows/php.yml
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,11 @@ jobs:
run: composer update --ignore-platform-reqs --prefer-dist --no-progress

- name: Run PHPUnit tests
if: matrix.php-versions != env.code-coverage-version
run: composer run-script phpunit -- --no-coverage

- name: Run PHPUnit tests with coverage
if: matrix.php-versions == env.code-coverage-version
run: composer run-script phpunit

- name: Run PHPStan
Expand Down
10 changes: 5 additions & 5 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,13 @@
},
"require-dev": {
"httpwg/structured-field-tests": "*@dev",
"paragonie/constant_time_encoding": "^2.6.3 || ^3.0.0",
"paragonie/constant_time_encoding": "^3.0.0",
"phpmd/phpmd": "^2.15",
"phpstan/phpstan": "^1.9",
"phpstan/phpstan-phpunit": "^1.3",
"phpunit/phpunit": "^9.5.27",
"phpstan/phpstan": "^1.12",
"phpstan/phpstan-phpunit": "^1.4",
"phpunit/phpunit": "^10.5",
"slevomat/coding-standard": "^8.15",
"squizlabs/php_codesniffer": "^3.7.1"
"squizlabs/php_codesniffer": "^3.11"
},
"config": {
"sort-packages": true,
Expand Down
3 changes: 3 additions & 0 deletions phpstan.neon.dist
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,6 @@ parameters:
- gapple\StructuredFields\Dictionary
- gapple\StructuredFields\Parameters

ignoreErrors:
- message: '#Class gapple\\Tests\\StructuredFields\\Rule has an uninitialized readonly property#'
path: tests/Rule.php
14 changes: 7 additions & 7 deletions phpunit.xml.dist
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>

<phpunit
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.5/phpunit.xsd"
failOnWarning="true"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.5/phpunit.xsd"

failOnWarning="true"
cacheDirectory="tmp/.phpunit.cache"
>
<testsuites>
<testsuite name="structured-fields tests">
<directory>./tests/</directory>
</testsuite>
</testsuites>

<coverage includeUncoveredFiles="true"
processUncoveredFiles="true">
<source>
<include>
<directory suffix=".php">src</directory>
</include>

</source>
<coverage includeUncoveredFiles="true">
<report>
<html outputDirectory="tmp/code-coverage"/>
<clover outputFile="tmp/code-coverage/clover.xml"/>
Expand Down
9 changes: 7 additions & 2 deletions tests/DateTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,14 @@
/**
* Additional Date parsing and serializing tests.
*/
class DateTest extends RulesetTest
class DateTest extends RulesetTestBase
{
protected function rulesetDataProvider(): array
use ParsingRulesetTrait;

/**
* {@inheritdoc}
*/
protected static function rulesetDataProvider(): array
{
return [
'date - large int' => [
Expand Down
10 changes: 8 additions & 2 deletions tests/Httpwg/BinaryTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@

namespace gapple\Tests\StructuredFields\Httpwg;

class BinaryTest extends HttpwgTest
use gapple\Tests\StructuredFields\ParsingRulesetTrait;
use gapple\Tests\StructuredFields\SerializingRulesetTrait;

class BinaryTest extends HttpwgTestBase
{
protected $ruleset = 'binary';
use ParsingRulesetTrait;
use SerializingRulesetTrait;

protected static string $ruleset = 'binary';
}
10 changes: 8 additions & 2 deletions tests/Httpwg/BooleanTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@

namespace gapple\Tests\StructuredFields\Httpwg;

class BooleanTest extends HttpwgTest
use gapple\Tests\StructuredFields\ParsingRulesetTrait;
use gapple\Tests\StructuredFields\SerializingRulesetTrait;

class BooleanTest extends HttpwgTestBase
{
protected $ruleset = 'boolean';
use ParsingRulesetTrait;
use SerializingRulesetTrait;

protected static string $ruleset = 'boolean';
}
10 changes: 8 additions & 2 deletions tests/Httpwg/DateTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@

namespace gapple\Tests\StructuredFields\Httpwg;

class DateTest extends HttpwgTest
use gapple\Tests\StructuredFields\ParsingRulesetTrait;
use gapple\Tests\StructuredFields\SerializingRulesetTrait;

class DateTest extends HttpwgTestBase
{
protected $ruleset = 'date';
use ParsingRulesetTrait;
use SerializingRulesetTrait;

protected static string $ruleset = 'date';
}
10 changes: 8 additions & 2 deletions tests/Httpwg/DictionaryTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@

namespace gapple\Tests\StructuredFields\Httpwg;

class DictionaryTest extends HttpwgTest
use gapple\Tests\StructuredFields\ParsingRulesetTrait;
use gapple\Tests\StructuredFields\SerializingRulesetTrait;

class DictionaryTest extends HttpwgTestBase
{
protected $ruleset = 'dictionary';
use ParsingRulesetTrait;
use SerializingRulesetTrait;

protected static string $ruleset = 'dictionary';
}
10 changes: 8 additions & 2 deletions tests/Httpwg/DisplayStringTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@

namespace gapple\Tests\StructuredFields\Httpwg;

class DisplayStringTest extends HttpwgTest
use gapple\Tests\StructuredFields\ParsingRulesetTrait;
use gapple\Tests\StructuredFields\SerializingRulesetTrait;

class DisplayStringTest extends HttpwgTestBase
{
protected $ruleset = 'display-string';
use ParsingRulesetTrait;
use SerializingRulesetTrait;

protected static string $ruleset = 'display-string';
}
10 changes: 8 additions & 2 deletions tests/Httpwg/ExamplesTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@

namespace gapple\Tests\StructuredFields\Httpwg;

class ExamplesTest extends HttpwgTest
use gapple\Tests\StructuredFields\ParsingRulesetTrait;
use gapple\Tests\StructuredFields\SerializingRulesetTrait;

class ExamplesTest extends HttpwgTestBase
{
protected $ruleset = 'examples';
use ParsingRulesetTrait;
use SerializingRulesetTrait;

protected static string $ruleset = 'examples';
}
37 changes: 15 additions & 22 deletions tests/Httpwg/HttpwgTest.php → tests/Httpwg/HttpwgTestBase.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,18 @@
namespace gapple\Tests\StructuredFields\Httpwg;

use gapple\Tests\StructuredFields\Rule;
use gapple\Tests\StructuredFields\RulesetTest;
use gapple\Tests\StructuredFields\RulesetTestBase;

abstract class HttpwgTest extends RulesetTest
abstract class HttpwgTestBase extends RulesetTestBase
{
protected static string $ruleset;

/**
* @var string
* @return array<string, array{Rule}>
*/
protected $ruleset;

protected function rulesetDataProvider(): array
protected static function rulesetDataProvider(): array
{
$path = __DIR__ . '/../../vendor/httpwg/structured-field-tests/' . $this->ruleset . '.json';
$path = __DIR__ . '/../../vendor/httpwg/structured-field-tests/' . static::$ruleset . '.json';
if (!file_exists($path)) {
throw new \RuntimeException('Ruleset file does not exist');
}
Expand All @@ -34,29 +34,22 @@ protected function rulesetDataProvider(): array
foreach ($rules as $rawRule) {
if (isset($rawRule->expected)) {
try {
switch ($rawRule->header_type) {
case 'item':
$rawRule->expected = HttpwgRuleExpectedConverter::item($rawRule->expected);
break;
case 'list':
$rawRule->expected = HttpwgRuleExpectedConverter::list($rawRule->expected);
break;
case 'dictionary':
$rawRule->expected = HttpwgRuleExpectedConverter::dictionary($rawRule->expected);
break;
default:
throw new \UnexpectedValueException('Unknown header type');
}
$rawRule->expected = match ($rawRule->header_type) {
'item' => HttpwgRuleExpectedConverter::item($rawRule->expected),
'list' => HttpwgRuleExpectedConverter::list($rawRule->expected),
'dictionary' => HttpwgRuleExpectedConverter::dictionary($rawRule->expected),
default => throw new \UnexpectedValueException('Unknown header type'),
};
} catch (\UnexpectedValueException | \AssertionError $e) {
// Skip rules that cannot be parsed.
continue;
}
}
$rule = Rule::fromClass($rawRule);
$rule = Rule::fromClass($rawRule); // @phpstan-ignore argument.type

if (isset($dataset[$rule->name])) {
user_error(
'Ruleset "' . $this->ruleset . '" contains duplicate rule name "' . $rule->name . '"',
'Ruleset "' . static::$ruleset . '" contains duplicate rule name "' . $rule->name . '"',
E_USER_WARNING
);
}
Expand Down
10 changes: 8 additions & 2 deletions tests/Httpwg/ItemTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@

namespace gapple\Tests\StructuredFields\Httpwg;

class ItemTest extends HttpwgTest
use gapple\Tests\StructuredFields\ParsingRulesetTrait;
use gapple\Tests\StructuredFields\SerializingRulesetTrait;

class ItemTest extends HttpwgTestBase
{
protected $ruleset = 'item';
use ParsingRulesetTrait;
use SerializingRulesetTrait;

protected static string $ruleset = 'item';
}
10 changes: 8 additions & 2 deletions tests/Httpwg/KeyGeneratedTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@

namespace gapple\Tests\StructuredFields\Httpwg;

class KeyGeneratedTest extends HttpwgTest
use gapple\Tests\StructuredFields\ParsingRulesetTrait;
use gapple\Tests\StructuredFields\SerializingRulesetTrait;

class KeyGeneratedTest extends HttpwgTestBase
{
protected $ruleset = 'key-generated';
use ParsingRulesetTrait;
use SerializingRulesetTrait;

protected static string $ruleset = 'key-generated';
}
10 changes: 8 additions & 2 deletions tests/Httpwg/LargeGeneratedTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@

namespace gapple\Tests\StructuredFields\Httpwg;

class LargeGeneratedTest extends HttpwgTest
use gapple\Tests\StructuredFields\ParsingRulesetTrait;
use gapple\Tests\StructuredFields\SerializingRulesetTrait;

class LargeGeneratedTest extends HttpwgTestBase
{
protected $ruleset = 'large-generated';
use ParsingRulesetTrait;
use SerializingRulesetTrait;

protected static string $ruleset = 'large-generated';
}
10 changes: 8 additions & 2 deletions tests/Httpwg/ListListTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@

namespace gapple\Tests\StructuredFields\Httpwg;

class ListListTest extends HttpwgTest
use gapple\Tests\StructuredFields\ParsingRulesetTrait;
use gapple\Tests\StructuredFields\SerializingRulesetTrait;

class ListListTest extends HttpwgTestBase
{
protected $ruleset = 'listlist';
use ParsingRulesetTrait;
use SerializingRulesetTrait;

protected static string $ruleset = 'listlist';
}
10 changes: 8 additions & 2 deletions tests/Httpwg/ListTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@

namespace gapple\Tests\StructuredFields\Httpwg;

class ListTest extends HttpwgTest
use gapple\Tests\StructuredFields\ParsingRulesetTrait;
use gapple\Tests\StructuredFields\SerializingRulesetTrait;

class ListTest extends HttpwgTestBase
{
protected $ruleset = 'list';
use ParsingRulesetTrait;
use SerializingRulesetTrait;

protected static string $ruleset = 'list';
}
10 changes: 8 additions & 2 deletions tests/Httpwg/NumberGeneratedTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@

namespace gapple\Tests\StructuredFields\Httpwg;

class NumberGeneratedTest extends HttpwgTest
use gapple\Tests\StructuredFields\ParsingRulesetTrait;
use gapple\Tests\StructuredFields\SerializingRulesetTrait;

class NumberGeneratedTest extends HttpwgTestBase
{
protected $ruleset = 'number-generated';
use ParsingRulesetTrait;
use SerializingRulesetTrait;

protected static string $ruleset = 'number-generated';
}
10 changes: 8 additions & 2 deletions tests/Httpwg/NumberTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@

namespace gapple\Tests\StructuredFields\Httpwg;

class NumberTest extends HttpwgTest
use gapple\Tests\StructuredFields\ParsingRulesetTrait;
use gapple\Tests\StructuredFields\SerializingRulesetTrait;

class NumberTest extends HttpwgTestBase
{
protected $ruleset = 'number';
use ParsingRulesetTrait;
use SerializingRulesetTrait;

protected static string $ruleset = 'number';
}
10 changes: 8 additions & 2 deletions tests/Httpwg/ParamDictTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@

namespace gapple\Tests\StructuredFields\Httpwg;

class ParamDictTest extends HttpwgTest
use gapple\Tests\StructuredFields\ParsingRulesetTrait;
use gapple\Tests\StructuredFields\SerializingRulesetTrait;

class ParamDictTest extends HttpwgTestBase
{
protected $ruleset = 'param-dict';
use ParsingRulesetTrait;
use SerializingRulesetTrait;

protected static string $ruleset = 'param-dict';
}
10 changes: 8 additions & 2 deletions tests/Httpwg/ParamListListTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@

namespace gapple\Tests\StructuredFields\Httpwg;

class ParamListListTest extends HttpwgTest
use gapple\Tests\StructuredFields\ParsingRulesetTrait;
use gapple\Tests\StructuredFields\SerializingRulesetTrait;

class ParamListListTest extends HttpwgTestBase
{
protected $ruleset = 'param-listlist';
use ParsingRulesetTrait;
use SerializingRulesetTrait;

protected static string $ruleset = 'param-listlist';
}
Loading
Loading