public function testUrl() { try { $version1 = new Version(1, 0); $version2 = new Version(1, 0); $this->assertEquals($version1->compare($version2), 0); $version1 = new Version(1, 0); $version2 = new Version(1, 1); $this->assertEquals($version1->compare($version2), -1); $version1 = new Version(1, 0); $version2 = new Version(2, 0); $this->assertEquals($version1->compare($version2), -1); $version1 = new Version(2, 0); $version2 = new Version(1, 1); $this->assertEquals($version1->compare($version2), 1); $version1 = new Version(2, 0); $version1->raiseVersion(1, 5); $this->assertEquals($version1->getMajor(), 2); $this->assertEquals($version1->getMinor(), 0); $version1->raiseVersion(3, 0); $this->assertEquals($version1->getMajor(), 3); $this->assertEquals($version1->getMinor(), 0); $version1->raiseVersion(3, 1); $this->assertEquals($version1->getMajor(), 3); $this->assertEquals($version1->getMinor(), 1); } catch (\Exception $exception) { $this->fail('An expected Exception has not been raised' . $exception->getMessage()); } }
/** * Validates the given version in string format and returns the version as instance of Version * * @param string $versionHeader The DataServiceVersion or MaxDataServiceVersion header value * @param string $headerName The name of the header * * @return Version * * @throws ODataException If the version is malformed or not supported */ private static function _validateAndGetVersion($versionHeader, $headerName) { $libName = null; $versionHeader = trim($versionHeader); $libNameIndex = strpos($versionHeader, ';'); if ($libNameIndex !== false) { $libName = substr($versionHeader, $libNameIndex); } else { $libNameIndex = strlen($versionHeader); } $dotIndex = -1; for ($i = 0; $i < $libNameIndex; $i++) { if ($versionHeader[$i] == '.') { if ($dotIndex != -1) { ODataException::createBadRequestError(Messages::requestDescriptionInvalidVersionHeader($versionHeader, $headerName)); } $dotIndex = $i; } else { if ($versionHeader[$i] < '0' || $versionHeader[$i] > '9') { ODataException::createBadRequestError(Messages::requestDescriptionInvalidVersionHeader($versionHeader, $headerName)); } } } $major = $minor = 0; if ($dotIndex != -1) { if ($dotIndex == 0) { ODataException::createBadRequestError(Messages::requestDescriptionInvalidVersionHeader($versionHeader, $headerName)); } $major = intval(substr($versionHeader, 0, $dotIndex)); $minor = intval(substr($versionHeader, $dotIndex + 1, $libNameIndex)); } else { $major = intval(substr($versionHeader, 0, $dotIndex)); $minor = 0; } $version = new Version($major, $minor); $isSupportedVersion = false; foreach (self::getKnownDataServiceVersions() as $version1) { if ($version->compare($version1) == 0) { $isSupportedVersion = true; break; } } if (!$isSupportedVersion) { $availableVersions = null; foreach (self::getKnownDataServiceVersions() as $version1) { $availableVersions .= $version1->toString() . ', '; } $availableVersions = rtrim($availableVersions, ', '); ODataException::createBadRequestError(Messages::requestDescriptionUnSupportedVersion($headerName, $versionHeader, $availableVersions)); } return $version; }