Chris@2: , Sebastian Heuer , Sebastian Bergmann Chris@2: * Chris@2: * For the full copyright and license information, please view the LICENSE Chris@2: * file that was distributed with this source code. Chris@2: */ Chris@2: Chris@2: namespace PharIo\Version; Chris@2: Chris@2: use PHPUnit\Framework\TestCase; Chris@2: Chris@2: /** Chris@2: * @covers \PharIo\Version\VersionConstraintParser Chris@2: */ Chris@2: class VersionConstraintParserTest extends TestCase { Chris@2: /** Chris@2: * @dataProvider versionStringProvider Chris@2: * Chris@2: * @param string $versionString Chris@2: * @param VersionConstraint $expectedConstraint Chris@2: */ Chris@2: public function testReturnsExpectedConstraint($versionString, VersionConstraint $expectedConstraint) { Chris@2: $parser = new VersionConstraintParser; Chris@2: Chris@2: $this->assertEquals($expectedConstraint, $parser->parse($versionString)); Chris@2: } Chris@2: Chris@2: /** Chris@2: * @dataProvider unsupportedVersionStringProvider Chris@2: * Chris@2: * @param string $versionString Chris@2: */ Chris@2: public function testThrowsExceptionIfVersionStringIsNotSupported($versionString) { Chris@2: $parser = new VersionConstraintParser; Chris@2: Chris@2: $this->expectException(UnsupportedVersionConstraintException::class); Chris@2: Chris@2: $parser->parse($versionString); Chris@2: } Chris@2: Chris@2: /** Chris@2: * @return array Chris@2: */ Chris@2: public function versionStringProvider() { Chris@2: return [ Chris@2: ['1.0.2', new ExactVersionConstraint('1.0.2')], Chris@2: [ Chris@2: '~4.6', Chris@2: new AndVersionConstraintGroup( Chris@2: '~4.6', Chris@2: [ Chris@2: new GreaterThanOrEqualToVersionConstraint('~4.6', new Version('4.6')), Chris@2: new SpecificMajorVersionConstraint('~4.6', 4) Chris@2: ] Chris@2: ) Chris@2: ], Chris@2: [ Chris@2: '~4.6.2', Chris@2: new AndVersionConstraintGroup( Chris@2: '~4.6.2', Chris@2: [ Chris@2: new GreaterThanOrEqualToVersionConstraint('~4.6.2', new Version('4.6.2')), Chris@2: new SpecificMajorAndMinorVersionConstraint('~4.6.2', 4, 6) Chris@2: ] Chris@2: ) Chris@2: ], Chris@2: [ Chris@2: '^2.6.1', Chris@2: new AndVersionConstraintGroup( Chris@2: '^2.6.1', Chris@2: [ Chris@2: new GreaterThanOrEqualToVersionConstraint('^2.6.1', new Version('2.6.1')), Chris@2: new SpecificMajorVersionConstraint('^2.6.1', 2) Chris@2: ] Chris@2: ) Chris@2: ], Chris@2: ['5.1.*', new SpecificMajorAndMinorVersionConstraint('5.1.*', 5, 1)], Chris@2: ['5.*', new SpecificMajorVersionConstraint('5.*', 5)], Chris@2: ['*', new AnyVersionConstraint()], Chris@2: [ Chris@2: '1.0.2 || 1.0.5', Chris@2: new OrVersionConstraintGroup( Chris@2: '1.0.2 || 1.0.5', Chris@2: [ Chris@2: new ExactVersionConstraint('1.0.2'), Chris@2: new ExactVersionConstraint('1.0.5') Chris@2: ] Chris@2: ) Chris@2: ], Chris@2: [ Chris@2: '^5.6 || ^7.0', Chris@2: new OrVersionConstraintGroup( Chris@2: '^5.6 || ^7.0', Chris@2: [ Chris@2: new AndVersionConstraintGroup( Chris@2: '^5.6', [ Chris@2: new GreaterThanOrEqualToVersionConstraint('^5.6', new Version('5.6')), Chris@2: new SpecificMajorVersionConstraint('^5.6', 5) Chris@2: ] Chris@2: ), Chris@2: new AndVersionConstraintGroup( Chris@2: '^7.0', [ Chris@2: new GreaterThanOrEqualToVersionConstraint('^7.0', new Version('7.0')), Chris@2: new SpecificMajorVersionConstraint('^7.0', 7) Chris@2: ] Chris@2: ) Chris@2: ] Chris@2: ) Chris@2: ] Chris@2: ]; Chris@2: } Chris@2: Chris@2: public function unsupportedVersionStringProvider() { Chris@2: return [ Chris@2: ['foo'], Chris@2: ['+1.0.2'], Chris@2: ['>=2.0'], Chris@2: ['^5.6 || >= 7.0'], Chris@2: ['2.0 || foo'] Chris@2: ]; Chris@2: } Chris@2: }