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\AnyVersionConstraint; Chris@14: use PharIo\Version\Version; Chris@14: use PharIo\Version\VersionConstraint; Chris@14: use PharIo\Version\VersionConstraintParser; Chris@14: use PHPUnit\Framework\TestCase; Chris@14: Chris@14: /** Chris@14: * @covers \PharIo\Manifest\Extension Chris@14: * @covers \PharIo\Manifest\Type Chris@14: * Chris@14: * @uses \PharIo\Version\VersionConstraint Chris@14: * @uses \PharIo\Manifest\ApplicationName Chris@14: */ Chris@14: class ExtensionTest extends TestCase { Chris@14: /** Chris@14: * @var Extension Chris@14: */ Chris@14: private $type; Chris@14: Chris@14: /** Chris@14: * @var ApplicationName|\PHPUnit_Framework_MockObject_MockObject Chris@14: */ Chris@14: private $name; Chris@14: Chris@14: protected function setUp() { Chris@14: $this->name = $this->createMock(ApplicationName::class); Chris@14: $this->type = Type::extension($this->name, new AnyVersionConstraint); Chris@14: } Chris@14: Chris@14: public function testCanBeCreated() { Chris@14: $this->assertInstanceOf(Extension::class, $this->type); Chris@14: } Chris@14: Chris@14: public function testIsNotApplication() { Chris@14: $this->assertFalse($this->type->isApplication()); Chris@14: } Chris@14: Chris@14: public function testIsNotLibrary() { Chris@14: $this->assertFalse($this->type->isLibrary()); Chris@14: } Chris@14: Chris@14: public function testIsExtension() { Chris@14: $this->assertTrue($this->type->isExtension()); Chris@14: } Chris@14: Chris@14: public function testApplicationCanBeRetrieved() Chris@14: { Chris@14: $this->assertInstanceOf(ApplicationName::class, $this->type->getApplicationName()); Chris@14: } Chris@14: Chris@14: public function testVersionConstraintCanBeRetrieved() { Chris@14: $this->assertInstanceOf( Chris@14: VersionConstraint::class, Chris@14: $this->type->getVersionConstraint() Chris@14: ); Chris@14: } Chris@14: Chris@14: public function testApplicationCanBeQueried() Chris@14: { Chris@14: $this->name->method('isEqual')->willReturn(true); Chris@14: $this->assertTrue( Chris@14: $this->type->isExtensionFor($this->createMock(ApplicationName::class)) Chris@14: ); Chris@14: } Chris@14: Chris@14: public function testCompatibleWithReturnsTrueForMatchingVersionConstraintAndApplicaiton() { Chris@14: $app = new ApplicationName('foo/bar'); Chris@14: $extension = Type::extension($app, (new VersionConstraintParser)->parse('^1.0')); Chris@14: $version = new Version('1.0.0'); Chris@14: Chris@14: $this->assertTrue( Chris@14: $extension->isCompatibleWith($app, $version) Chris@14: ); Chris@14: } Chris@14: Chris@14: public function testCompatibleWithReturnsFalseForNotMatchingVersionConstraint() { Chris@14: $app = new ApplicationName('foo/bar'); Chris@14: $extension = Type::extension($app, (new VersionConstraintParser)->parse('^1.0')); Chris@14: $version = new Version('2.0.0'); Chris@14: Chris@14: $this->assertFalse( Chris@14: $extension->isCompatibleWith($app, $version) Chris@14: ); Chris@14: } Chris@14: Chris@14: public function testCompatibleWithReturnsFalseForNotMatchingApplication() { Chris@14: $app1 = new ApplicationName('foo/bar'); Chris@14: $app2 = new ApplicationName('foo/foo'); Chris@14: $extension = Type::extension($app1, (new VersionConstraintParser)->parse('^1.0')); Chris@14: $version = new Version('1.0.0'); Chris@14: Chris@14: $this->assertFalse( Chris@14: $extension->isCompatibleWith($app2, $version) Chris@14: ); Chris@14: } Chris@14: Chris@14: }