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\Version; Chris@14: Chris@14: use PHPUnit\Framework\TestCase; Chris@14: Chris@14: /** Chris@14: * @covers \PharIo\Version\VersionConstraintParser Chris@14: */ Chris@14: class VersionConstraintParserTest extends TestCase { Chris@14: /** Chris@14: * @dataProvider versionStringProvider Chris@14: * Chris@14: * @param string $versionString Chris@14: * @param VersionConstraint $expectedConstraint Chris@14: */ Chris@14: public function testReturnsExpectedConstraint($versionString, VersionConstraint $expectedConstraint) { Chris@14: $parser = new VersionConstraintParser; Chris@14: Chris@14: $this->assertEquals($expectedConstraint, $parser->parse($versionString)); Chris@14: } Chris@14: Chris@14: /** Chris@14: * @dataProvider unsupportedVersionStringProvider Chris@14: * Chris@14: * @param string $versionString Chris@14: */ Chris@14: public function testThrowsExceptionIfVersionStringIsNotSupported($versionString) { Chris@14: $parser = new VersionConstraintParser; Chris@14: Chris@14: $this->expectException(UnsupportedVersionConstraintException::class); Chris@14: Chris@14: $parser->parse($versionString); Chris@14: } Chris@14: Chris@14: /** Chris@14: * @return array Chris@14: */ Chris@14: public function versionStringProvider() { Chris@14: return [ Chris@14: ['1.0.2', new ExactVersionConstraint('1.0.2')], Chris@14: [ Chris@14: '~4.6', Chris@14: new AndVersionConstraintGroup( Chris@14: '~4.6', Chris@14: [ Chris@14: new GreaterThanOrEqualToVersionConstraint('~4.6', new Version('4.6')), Chris@14: new SpecificMajorVersionConstraint('~4.6', 4) Chris@14: ] Chris@14: ) Chris@14: ], Chris@14: [ Chris@14: '~4.6.2', Chris@14: new AndVersionConstraintGroup( Chris@14: '~4.6.2', Chris@14: [ Chris@14: new GreaterThanOrEqualToVersionConstraint('~4.6.2', new Version('4.6.2')), Chris@14: new SpecificMajorAndMinorVersionConstraint('~4.6.2', 4, 6) Chris@14: ] Chris@14: ) Chris@14: ], Chris@14: [ Chris@14: '^2.6.1', Chris@14: new AndVersionConstraintGroup( Chris@14: '^2.6.1', Chris@14: [ Chris@14: new GreaterThanOrEqualToVersionConstraint('^2.6.1', new Version('2.6.1')), Chris@14: new SpecificMajorVersionConstraint('^2.6.1', 2) Chris@14: ] Chris@14: ) Chris@14: ], Chris@14: ['5.1.*', new SpecificMajorAndMinorVersionConstraint('5.1.*', 5, 1)], Chris@14: ['5.*', new SpecificMajorVersionConstraint('5.*', 5)], Chris@14: ['*', new AnyVersionConstraint()], Chris@14: [ Chris@14: '1.0.2 || 1.0.5', Chris@14: new OrVersionConstraintGroup( Chris@14: '1.0.2 || 1.0.5', Chris@14: [ Chris@14: new ExactVersionConstraint('1.0.2'), Chris@14: new ExactVersionConstraint('1.0.5') Chris@14: ] Chris@14: ) Chris@14: ], Chris@14: [ Chris@14: '^5.6 || ^7.0', Chris@14: new OrVersionConstraintGroup( Chris@14: '^5.6 || ^7.0', Chris@14: [ Chris@14: new AndVersionConstraintGroup( Chris@14: '^5.6', [ Chris@14: new GreaterThanOrEqualToVersionConstraint('^5.6', new Version('5.6')), Chris@14: new SpecificMajorVersionConstraint('^5.6', 5) Chris@14: ] Chris@14: ), Chris@14: new AndVersionConstraintGroup( Chris@14: '^7.0', [ Chris@14: new GreaterThanOrEqualToVersionConstraint('^7.0', new Version('7.0')), Chris@14: new SpecificMajorVersionConstraint('^7.0', 7) Chris@14: ] Chris@14: ) Chris@14: ] Chris@14: ) Chris@14: ] Chris@14: ]; Chris@14: } Chris@14: Chris@14: public function unsupportedVersionStringProvider() { Chris@14: return [ Chris@14: ['foo'], Chris@14: ['+1.0.2'], Chris@14: ['>=2.0'], Chris@14: ['^5.6 || >= 7.0'], Chris@14: ['2.0 || foo'] Chris@14: ]; Chris@14: } Chris@14: }