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