Chris@14: , Sebastian Heuer , Sebastian Bergmann Chris@14: * Chris@14: * For the full copyright and license information, please view the LICENSE Chris@14: * file that was distributed with this source code. Chris@14: */ Chris@14: Chris@14: namespace PharIo\Manifest; Chris@14: Chris@14: use PharIo\Version\Version; Chris@14: use PharIo\Version\AnyVersionConstraint; Chris@14: use PHPUnit\Framework\TestCase; Chris@14: Chris@14: /** Chris@14: * @covers \PharIo\Manifest\Manifest Chris@14: * Chris@14: * @uses \PharIo\Manifest\ApplicationName Chris@14: * @uses \PharIo\Manifest\Author Chris@14: * @uses \PharIo\Manifest\AuthorCollection Chris@14: * @uses \PharIo\Manifest\BundledComponent Chris@14: * @uses \PharIo\Manifest\BundledComponentCollection Chris@14: * @uses \PharIo\Manifest\CopyrightInformation Chris@14: * @uses \PharIo\Manifest\Email Chris@14: * @uses \PharIo\Manifest\License Chris@14: * @uses \PharIo\Manifest\RequirementCollection Chris@14: * @uses \PharIo\Manifest\PhpVersionRequirement Chris@14: * @uses \PharIo\Manifest\Type Chris@14: * @uses \PharIo\Manifest\Application Chris@14: * @uses \PharIo\Manifest\Url Chris@14: * @uses \PharIo\Version\Version Chris@14: * @uses \PharIo\Version\VersionConstraint Chris@14: */ Chris@14: class ManifestTest extends TestCase { Chris@14: /** Chris@14: * @var ApplicationName Chris@14: */ Chris@14: private $name; Chris@14: Chris@14: /** Chris@14: * @var Version Chris@14: */ Chris@14: private $version; Chris@14: Chris@14: /** Chris@14: * @var Type Chris@14: */ Chris@14: private $type; Chris@14: Chris@14: /** Chris@14: * @var CopyrightInformation Chris@14: */ Chris@14: private $copyrightInformation; Chris@14: Chris@14: /** Chris@14: * @var RequirementCollection Chris@14: */ Chris@14: private $requirements; Chris@14: Chris@14: /** Chris@14: * @var BundledComponentCollection Chris@14: */ Chris@14: private $bundledComponents; Chris@14: Chris@14: /** Chris@14: * @var Manifest Chris@14: */ Chris@14: private $manifest; Chris@14: Chris@14: protected function setUp() { Chris@14: $this->version = new Version('5.6.5'); Chris@14: Chris@14: $this->type = Type::application(); Chris@14: Chris@14: $author = new Author('Joe Developer', new Email('user@example.com')); Chris@14: $license = new License('BSD-3-Clause', new Url('https://github.com/sebastianbergmann/phpunit/blob/master/LICENSE')); Chris@14: Chris@14: $authors = new AuthorCollection; Chris@14: $authors->add($author); Chris@14: Chris@14: $this->copyrightInformation = new CopyrightInformation($authors, $license); Chris@14: Chris@14: $this->requirements = new RequirementCollection; Chris@14: $this->requirements->add(new PhpVersionRequirement(new AnyVersionConstraint)); Chris@14: Chris@14: $this->bundledComponents = new BundledComponentCollection; Chris@14: $this->bundledComponents->add(new BundledComponent('phpunit/php-code-coverage', new Version('4.0.2'))); Chris@14: Chris@14: $this->name = new ApplicationName('phpunit/phpunit'); Chris@14: Chris@14: $this->manifest = new Manifest( Chris@14: $this->name, Chris@14: $this->version, Chris@14: $this->type, Chris@14: $this->copyrightInformation, Chris@14: $this->requirements, Chris@14: $this->bundledComponents Chris@14: ); Chris@14: } Chris@14: Chris@14: public function testCanBeCreated() { Chris@14: $this->assertInstanceOf(Manifest::class, $this->manifest); Chris@14: } Chris@14: Chris@14: public function testNameCanBeRetrieved() { Chris@14: $this->assertEquals($this->name, $this->manifest->getName()); Chris@14: } Chris@14: Chris@14: public function testVersionCanBeRetrieved() { Chris@14: $this->assertEquals($this->version, $this->manifest->getVersion()); Chris@14: } Chris@14: Chris@14: public function testTypeCanBeRetrieved() { Chris@14: $this->assertEquals($this->type, $this->manifest->getType()); Chris@14: } Chris@14: Chris@14: public function testTypeCanBeQueried() { Chris@14: $this->assertTrue($this->manifest->isApplication()); Chris@14: $this->assertFalse($this->manifest->isLibrary()); Chris@14: $this->assertFalse($this->manifest->isExtension()); Chris@14: } Chris@14: Chris@14: public function testCopyrightInformationCanBeRetrieved() { Chris@14: $this->assertEquals($this->copyrightInformation, $this->manifest->getCopyrightInformation()); Chris@14: } Chris@14: Chris@14: public function testRequirementsCanBeRetrieved() { Chris@14: $this->assertEquals($this->requirements, $this->manifest->getRequirements()); Chris@14: } Chris@14: Chris@14: public function testBundledComponentsCanBeRetrieved() { Chris@14: $this->assertEquals($this->bundledComponents, $this->manifest->getBundledComponents()); Chris@14: } Chris@14: Chris@14: /** Chris@14: * @uses \PharIo\Manifest\Extension Chris@14: */ Chris@14: public function testExtendedApplicationCanBeQueriedForExtension() Chris@14: { Chris@14: $appName = new ApplicationName('foo/bar'); Chris@14: $manifest = new Manifest( Chris@14: new ApplicationName('foo/foo'), Chris@14: new Version('1.0.0'), Chris@14: Type::extension($appName, new AnyVersionConstraint), Chris@14: $this->copyrightInformation, Chris@14: new RequirementCollection, Chris@14: new BundledComponentCollection Chris@14: ); Chris@14: Chris@14: $this->assertTrue($manifest->isExtensionFor($appName)); Chris@14: } Chris@14: Chris@14: public function testNonExtensionReturnsFalseWhenQueriesForExtension() { Chris@14: $appName = new ApplicationName('foo/bar'); Chris@14: $manifest = new Manifest( Chris@14: new ApplicationName('foo/foo'), Chris@14: new Version('1.0.0'), Chris@14: Type::library(), Chris@14: $this->copyrightInformation, Chris@14: new RequirementCollection, Chris@14: new BundledComponentCollection Chris@14: ); Chris@14: Chris@14: $this->assertFalse($manifest->isExtensionFor($appName)); Chris@14: } Chris@14: Chris@14: /** Chris@14: * @uses \PharIo\Manifest\Extension Chris@14: */ Chris@14: public function testExtendedApplicationCanBeQueriedForExtensionWithVersion() Chris@14: { Chris@14: $appName = new ApplicationName('foo/bar'); Chris@14: $manifest = new Manifest( Chris@14: new ApplicationName('foo/foo'), Chris@14: new Version('1.0.0'), Chris@14: Type::extension($appName, new AnyVersionConstraint), Chris@14: $this->copyrightInformation, Chris@14: new RequirementCollection, Chris@14: new BundledComponentCollection Chris@14: ); Chris@14: Chris@14: $this->assertTrue($manifest->isExtensionFor($appName, new Version('1.2.3'))); Chris@14: } Chris@14: Chris@14: }