110 lines
3.2 KiB
PHP
110 lines
3.2 KiB
PHP
|
<?php
|
||
|
/*
|
||
|
* This file is part of PharIo\Manifest.
|
||
|
*
|
||
|
* (c) Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de>, Sebastian Bergmann <sebastian@phpunit.de>
|
||
|
*
|
||
|
* For the full copyright and license information, please view the LICENSE
|
||
|
* file that was distributed with this source code.
|
||
|
*/
|
||
|
|
||
|
namespace PharIo\Manifest;
|
||
|
|
||
|
use PharIo\Version\AnyVersionConstraint;
|
||
|
use PharIo\Version\Version;
|
||
|
use PharIo\Version\VersionConstraint;
|
||
|
use PharIo\Version\VersionConstraintParser;
|
||
|
use PHPUnit\Framework\TestCase;
|
||
|
|
||
|
/**
|
||
|
* @covers \PharIo\Manifest\Extension
|
||
|
* @covers \PharIo\Manifest\Type
|
||
|
*
|
||
|
* @uses \PharIo\Version\VersionConstraint
|
||
|
* @uses \PharIo\Manifest\ApplicationName
|
||
|
*/
|
||
|
class ExtensionTest extends TestCase {
|
||
|
/**
|
||
|
* @var Extension
|
||
|
*/
|
||
|
private $type;
|
||
|
|
||
|
/**
|
||
|
* @var ApplicationName|\PHPUnit_Framework_MockObject_MockObject
|
||
|
*/
|
||
|
private $name;
|
||
|
|
||
|
protected function setUp() {
|
||
|
$this->name = $this->createMock(ApplicationName::class);
|
||
|
$this->type = Type::extension($this->name, new AnyVersionConstraint);
|
||
|
}
|
||
|
|
||
|
public function testCanBeCreated() {
|
||
|
$this->assertInstanceOf(Extension::class, $this->type);
|
||
|
}
|
||
|
|
||
|
public function testIsNotApplication() {
|
||
|
$this->assertFalse($this->type->isApplication());
|
||
|
}
|
||
|
|
||
|
public function testIsNotLibrary() {
|
||
|
$this->assertFalse($this->type->isLibrary());
|
||
|
}
|
||
|
|
||
|
public function testIsExtension() {
|
||
|
$this->assertTrue($this->type->isExtension());
|
||
|
}
|
||
|
|
||
|
public function testApplicationCanBeRetrieved()
|
||
|
{
|
||
|
$this->assertInstanceOf(ApplicationName::class, $this->type->getApplicationName());
|
||
|
}
|
||
|
|
||
|
public function testVersionConstraintCanBeRetrieved() {
|
||
|
$this->assertInstanceOf(
|
||
|
VersionConstraint::class,
|
||
|
$this->type->getVersionConstraint()
|
||
|
);
|
||
|
}
|
||
|
|
||
|
public function testApplicationCanBeQueried()
|
||
|
{
|
||
|
$this->name->method('isEqual')->willReturn(true);
|
||
|
$this->assertTrue(
|
||
|
$this->type->isExtensionFor($this->createMock(ApplicationName::class))
|
||
|
);
|
||
|
}
|
||
|
|
||
|
public function testCompatibleWithReturnsTrueForMatchingVersionConstraintAndApplicaiton() {
|
||
|
$app = new ApplicationName('foo/bar');
|
||
|
$extension = Type::extension($app, (new VersionConstraintParser)->parse('^1.0'));
|
||
|
$version = new Version('1.0.0');
|
||
|
|
||
|
$this->assertTrue(
|
||
|
$extension->isCompatibleWith($app, $version)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
public function testCompatibleWithReturnsFalseForNotMatchingVersionConstraint() {
|
||
|
$app = new ApplicationName('foo/bar');
|
||
|
$extension = Type::extension($app, (new VersionConstraintParser)->parse('^1.0'));
|
||
|
$version = new Version('2.0.0');
|
||
|
|
||
|
$this->assertFalse(
|
||
|
$extension->isCompatibleWith($app, $version)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
public function testCompatibleWithReturnsFalseForNotMatchingApplication() {
|
||
|
$app1 = new ApplicationName('foo/bar');
|
||
|
$app2 = new ApplicationName('foo/foo');
|
||
|
$extension = Type::extension($app1, (new VersionConstraintParser)->parse('^1.0'));
|
||
|
$version = new Version('1.0.0');
|
||
|
|
||
|
$this->assertFalse(
|
||
|
$extension->isCompatibleWith($app2, $version)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
}
|