diff --git a/.gitignore b/.gitignore index cac762f1d47dd2ec606f4d3fccc831e713c9da6b..408b1a22e06866a20f17ee48109b062f1dbdc6a1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ /vendor/ /.idea/ +/.php_cs*cache +.phpunit.result.cache diff --git a/.php_cs.dist b/.php_cs.dist new file mode 100644 index 0000000000000000000000000000000000000000..1cc83a0223199f51eac76d6e705177ea6debdc55 --- /dev/null +++ b/.php_cs.dist @@ -0,0 +1,12 @@ +<?php + +$finder = PhpCsFixer\Finder::create() + ->exclude('vendor') + ->files() + ->name('*.php') + ->in('.'); + +return Irstea\CS\Config::create() + ->setIndent(' ') + ->setLineEnding("\n") + ->setFinder($finder); diff --git a/composer.json b/composer.json index dd63782c05795b8195f572134a0a1f228045ea93..2a023a4f89928473d0e9b8c0eb6261f5fe8a30a6 100644 --- a/composer.json +++ b/composer.json @@ -33,12 +33,12 @@ }, "autoload": { "psr-4": { - "\\Irstea\\MyProject\\": "src/" + "Irstea\\MyProject\\": "src/" } }, "autoload-dev": { "psr-4": { - "\\Irstea\\MyProject\\": "tests/" + "Irstea\\MyProject\\Tests\\": "tests/" } }, "scripts": { @@ -52,9 +52,10 @@ "@test:phpcpd", "@test:phpmd", "@test:phpstan", + "@test:phpunit", + "@test:composer-validate", "@test:composer-require", - "@test:security", - "@test:phpunit" + "@test:security" ], "phploc": [ "vendor/bin/phploc src tests" @@ -70,10 +71,16 @@ "vendor/bin/phpcpd --fuzzy src tests" ], "test:phpmd": [ - "vendor/bin/phpmd src,tests text vendor/irstea/phpmd-config/strict.xml" + "vendor/bin/phpmd src,tests text ./phpmd-ruleset.xml" ], "test:phpstan": [ - "vendor/bin/phpstan analyse" + "vendor/bin/phpstan analyse --ansi --no-progress src tests" + ], + "test:phpunit": [ + "vendor/bin/phpunit" + ], + "test:composer-validate": [ + "composer validate" ], "test:composer-require": [ "vendor/bin/composer-require-checker check" @@ -83,14 +90,16 @@ ] }, "scripts-descriptions": { - "test": "Exécute tous les tests en série.", "fix-cs": "Applique les corrections automatiques de style.", "phploc": "Calcule des stats sur les sources.", + "test": "Exécute tous les tests en série.", "test:lint": "Vérifie la syntaxe et le style des sources.", "test:phpcpd": "Détecte les blocs de code similaires.", - "test:phpmd": "Détecte des défauts de ", + "test:phpmd": "Détecte des défauts de codage.", "test:phpstan": "Détecte des erreurs de programmation grâce au typage.", + "test:phpunit": "Exécute les tests dynamiques.", + "test:composer-validate": "Vérifie la validité du composer.json.", "test:composer-require": "Vérifie que les sources n'utilise que des librairies listés dans les dépendances directes.", - "test:security": "Vérifie qu'aucun paquet utilisé n'ait de faille de sécurité signalée." + "test:securit": "Vérifie qu'aucun paquet utilisé n'ait de faille de sécurité signalée." } } diff --git a/phpmd-ruleset.xml b/phpmd-ruleset.xml new file mode 100644 index 0000000000000000000000000000000000000000..96ca0fa73801f0bb8db0919ba665974930ec5624 --- /dev/null +++ b/phpmd-ruleset.xml @@ -0,0 +1,9 @@ +<?xml version="1.0"?> +<ruleset name="SYGADE PHPMD rule set" + xmlns="http://pmd.sf.net/ruleset/1.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd" + xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd"> + + <rule ref="vendor/irstea/phpmd-config/strict.xml"/> +</ruleset> diff --git a/phpstan.neon b/phpstan.neon new file mode 100644 index 0000000000000000000000000000000000000000..d1a1435aa96cd0c3cfd3e6c71542c6073d3506c2 --- /dev/null +++ b/phpstan.neon @@ -0,0 +1,5 @@ +includes: + - vendor/irstea/phpstan-config/strict.neon + - vendor/irstea/phpstan-config/phpunit.neon + + diff --git a/phpunit.xml b/phpunit.xml new file mode 100644 index 0000000000000000000000000000000000000000..3f2207ac71b1faed027b5cb04381eb1fa9aa8a6a --- /dev/null +++ b/phpunit.xml @@ -0,0 +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/8.1/phpunit.xsd" + bootstrap="vendor/autoload.php" + executionOrder="depends,defects" + forceCoversAnnotation="true" + beStrictAboutCoversAnnotation="true" + beStrictAboutOutputDuringTests="true" + beStrictAboutTodoAnnotatedTests="true" + verbose="true"> + <testsuites> + <testsuite name="default"> + <directory suffix="Test.php">tests</directory> + </testsuite> + </testsuites> + + <filter> + <whitelist processUncoveredFilesFromWhitelist="true"> + <directory suffix=".php">src</directory> + </whitelist> + </filter> +</phpunit> diff --git a/src/.gitkeep b/src/.gitkeep deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/src/MyClass.php b/src/MyClass.php new file mode 100644 index 0000000000000000000000000000000000000000..a6f632377c3400adb51c4b31c5fd404b84c43f60 --- /dev/null +++ b/src/MyClass.php @@ -0,0 +1,20 @@ +<?php declare(strict_types=1); +/* + * Create and customize a file named .docheader at the root of the project to change this message. + */ + +namespace Irstea\MyProject; + +/** + * La classe MyClass. + */ +class MyClass +{ + /** + * @return int + */ + public function getResponse(): int + { + return 42; + } +} diff --git a/tests/.gitkeep b/tests/.gitkeep deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/tests/MyClassTest.php b/tests/MyClassTest.php new file mode 100644 index 0000000000000000000000000000000000000000..4b222ee60040a386b6724b4338f35cd5f6159cbe --- /dev/null +++ b/tests/MyClassTest.php @@ -0,0 +1,22 @@ +<?php declare(strict_types=1); +/* + * Create and customize a file named .docheader at the root of the project to change this message. + */ + +namespace Irstea\MyProject\Tests; + +use Irstea\MyProject\MyClass; +use PHPUnit\Framework\TestCase; + +/** + * Les tests de la classe MyClass. + */ +class MyClassTest extends TestCase +{ + public function testGetResponse(): void + { + $subject = new MyClass(); + + self::assertEquals(42, $subject->getResponse()); + } +}