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\Version Chris@14: */ Chris@14: class VersionTest extends TestCase { Chris@14: /** Chris@14: * @dataProvider versionProvider Chris@14: * Chris@14: * @param string $versionString Chris@14: * @param string $expectedMajor Chris@14: * @param string $expectedMinor Chris@14: * @param string $expectedPatch Chris@14: * @param string $expectedPreReleaseValue Chris@14: * @param int $expectedReleaseCount Chris@14: */ Chris@14: public function testParsesVersionNumbers($versionString, $expectedMajor, $expectedMinor, $expectedPatch, $expectedPreReleaseValue = '', $expectedReleaseCount = 0) { Chris@14: $version = new Version($versionString); Chris@14: Chris@14: $this->assertSame($expectedMajor, $version->getMajor()->getValue()); Chris@14: $this->assertSame($expectedMinor, $version->getMinor()->getValue()); Chris@14: $this->assertSame($expectedPatch, $version->getPatch()->getValue()); Chris@14: if ($expectedPreReleaseValue !== '') { Chris@14: $this->assertSame($expectedPreReleaseValue, $version->getPreReleaseSuffix()->getValue()); Chris@14: } Chris@14: if ($expectedReleaseCount !== 0) { Chris@14: $this->assertSame($expectedReleaseCount, $version->getPreReleaseSuffix()->getNumber()); Chris@14: } Chris@14: Chris@14: $this->assertSame($versionString, $version->getVersionString()); Chris@14: } Chris@14: Chris@14: public function versionProvider() { Chris@14: return [ Chris@14: ['0.0.1', '0', '0', '1'], Chris@14: ['0.1.2', '0', '1', '2'], Chris@14: ['1.0.0-alpha', '1', '0', '0', 'alpha'], Chris@14: ['3.4.12-dev3', '3', '4', '12', 'dev', 3], Chris@14: ]; Chris@14: } Chris@14: Chris@14: /** Chris@14: * @dataProvider versionGreaterThanProvider Chris@14: * Chris@14: * @param Version $versionA Chris@14: * @param Version $versionB Chris@14: * @param bool $expectedResult Chris@14: */ Chris@14: public function testIsGreaterThan(Version $versionA, Version $versionB, $expectedResult) { Chris@14: $this->assertSame($expectedResult, $versionA->isGreaterThan($versionB)); Chris@14: } Chris@14: Chris@14: /** Chris@14: * @return array Chris@14: */ Chris@14: public function versionGreaterThanProvider() { Chris@14: return [ Chris@14: [new Version('1.0.0'), new Version('1.0.1'), false], Chris@14: [new Version('1.0.1'), new Version('1.0.0'), true], Chris@14: [new Version('1.1.0'), new Version('1.0.1'), true], Chris@14: [new Version('1.1.0'), new Version('2.0.1'), false], Chris@14: [new Version('1.1.0'), new Version('1.1.0'), false], Chris@14: [new Version('2.5.8'), new Version('1.6.8'), true], Chris@14: [new Version('2.5.8'), new Version('2.6.8'), false], Chris@14: [new Version('2.5.8'), new Version('3.1.2'), false], Chris@14: ]; Chris@14: } Chris@14: Chris@14: /** Chris@14: * @dataProvider invalidVersionStringProvider Chris@14: * Chris@14: * @param string $versionString Chris@14: */ Chris@14: public function testThrowsExceptionIfVersionStringDoesNotFollowSemVer($versionString) Chris@14: { Chris@14: $this->expectException(InvalidVersionException::class); Chris@14: new Version($versionString); Chris@14: } Chris@14: Chris@14: /** Chris@14: * @return array Chris@14: */ Chris@14: public function invalidVersionStringProvider() Chris@14: { Chris@14: return [ Chris@14: ['foo'], Chris@14: ['0.0.1-dev+ABC', '0', '0', '1', 'dev', 'ABC'], Chris@14: ['1.0.0-x.7.z.92', '1', '0', '0', 'x.7.z.92'] Chris@14: ]; Chris@14: } Chris@14: Chris@14: }