/** * @test */ public function canNotAddModifierTwice() { $version = new Version('tenhunen', array('suuruus' => 'ylistetty'), array('x5')); $this->assertEquals(array('x5'), $version->getModifiers()); $ret = $version->addModifier('x5'); $this->assertEquals(array('x5'), $ret->getModifiers()); $this->assertNotSame($version, $ret); }
/** * @param Version $version * @return Version * @throws InvalidVersionException */ public function ensureValidVersion(Version $version) { $version = parent::ensureValidVersion($version); $unknownParams = array_map(function ($param) { return '\'' . $param . '\''; }, array_diff(array_keys($version->getParams()), call_user_func($this->allowedParamsGetter))); if (count($unknownParams)) { throw new InvalidVersionException(sprintf("Unknown version parameters: %s", implode(', ', $unknownParams))); } $unknownModifiers = array_map(function ($param) { return '\'' . $param . '\''; }, array_diff($version->getModifiers(), call_user_func($this->allowedModifiersGetter))); if (count($unknownModifiers)) { throw new InvalidVersionException(sprintf("Unknown version modifiers: %s", implode(', ', $unknownModifiers))); } $newParams = array_merge(call_user_func($this->defaultParamsGetter), $version->getParams()); $version = new Version($version->getVersion(), $newParams, $version->getModifiers()); $isValid = call_user_func_array($this->versionValidityChecker, array($version)); if (!$isValid) { throw new InvalidVersionException(sprintf("Invalid version '%s'", $version->toString())); } return $version; }