From bb685d9c7ff81d41c197da6bf66cc7f740571b5a Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Mon, 5 Nov 2012 20:04:29 +0100 Subject: [PATCH] Fix license validation and add feedback of values to ease reading --- .../Package/Loader/ValidatingArrayLoader.php | 26 +++++++++++-------- .../Loader/ValidatingArrayLoaderTest.php | 12 ++++----- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/Composer/Package/Loader/ValidatingArrayLoader.php b/src/Composer/Package/Loader/ValidatingArrayLoader.php index 02f08c55e..17fb9089f 100644 --- a/src/Composer/Package/Loader/ValidatingArrayLoader.php +++ b/src/Composer/Package/Loader/ValidatingArrayLoader.php @@ -91,11 +91,11 @@ class ValidatingArrayLoader implements LoaderInterface } } if (isset($author['homepage']) && !$this->filterUrl($author['homepage'])) { - $this->warnings[] = 'authors.'.$key.'.homepage : invalid value, must be an http/https URL'; + $this->warnings[] = 'authors.'.$key.'.homepage : invalid value ('.$author['homepage'].'), must be an http/https URL'; unset($this->config['authors'][$key]['homepage']); } if (isset($author['email']) && !filter_var($author['email'], FILTER_VALIDATE_EMAIL)) { - $this->warnings[] = 'authors.'.$key.'.email : invalid value, must be a valid email address'; + $this->warnings[] = 'authors.'.$key.'.email : invalid value ('.$author['email'].'), must be a valid email address'; unset($this->config['authors'][$key]['email']); } if (empty($this->config['authors'][$key])) { @@ -116,18 +116,18 @@ class ValidatingArrayLoader implements LoaderInterface } if (isset($this->config['support']['email']) && !filter_var($this->config['support']['email'], FILTER_VALIDATE_EMAIL)) { - $this->warnings[] = 'support.email : invalid value, must be a valid email address'; + $this->warnings[] = 'support.email : invalid value ('.$this->config['support']['email'].'), must be a valid email address'; unset($this->config['support']['email']); } if (isset($this->config['support']['irc']) && !$this->filterUrl($this->config['support']['irc'], array('irc'))) { - $this->warnings[] = 'support.irc : invalid value, must be a irc:/// URL'; + $this->warnings[] = 'support.irc : invalid value ('.$this->config['support']['irc'].'), must be a irc:/// URL'; unset($this->config['support']['irc']); } foreach (array('issues', 'forum', 'wiki', 'source') as $key) { if (isset($this->config['support'][$key]) && !$this->filterUrl($this->config['support'][$key])) { - $this->warnings[] = 'support.'.$key.' : invalid value, must be an http/https URL'; + $this->warnings[] = 'support.'.$key.' : invalid value ('.$this->config['support'][$key].'), must be an http/https URL'; unset($this->config['support'][$key]); } } @@ -163,10 +163,9 @@ class ValidatingArrayLoader implements LoaderInterface } } - $this->validateString('minimum-stability'); - if (!empty($this->config['minimum-stability'])) { + if ($this->validateString('minimum-stability') && !empty($this->config['minimum-stability'])) { if (!isset(BasePackage::$stabilities[$this->config['minimum-stability']])) { - $this->errors[] = 'minimum-stability : invalid value, must be one of '.implode(', ', array_keys(BasePackage::$stabilities)); + $this->errors[] = 'minimum-stability : invalid value ('.$this->config['minimum-stability'].'), must be one of '.implode(', ', array_keys(BasePackage::$stabilities)); unset($this->config['minimum-stability']); } } @@ -232,7 +231,12 @@ class ValidatingArrayLoader implements LoaderInterface } if (!preg_match('{^'.$regex.'$}u', $this->config[$property])) { - $this->errors[] = $property.' : invalid value, must match '.$regex; + $message = $property.' : invalid value ('.$this->config[$property].'), must match '.$regex; + if ($mandatory) { + $this->errors[] = $message; + } else { + $this->warnings[] = $message; + } unset($this->config[$property]); return false; @@ -300,7 +304,7 @@ class ValidatingArrayLoader implements LoaderInterface } if ($regex && !preg_match('{^'.$regex.'$}u', $value)) { - $this->warnings[] = $property.'.'.$key.' : invalid value, must match '.$regex; + $this->warnings[] = $property.'.'.$key.' : invalid value ('.$value.'), must match '.$regex; unset($this->config[$property][$key]); $pass = false; } @@ -316,7 +320,7 @@ class ValidatingArrayLoader implements LoaderInterface } if (!$this->filterUrl($this->config[$property])) { - $this->warnings[] = $property.' : invalid value, must be an http/https URL'; + $this->warnings[] = $property.' : invalid value ('.$this->config[$property].'), must be an http/https URL'; unset($this->config[$property]); return false; diff --git a/tests/Composer/Test/Package/Loader/ValidatingArrayLoaderTest.php b/tests/Composer/Test/Package/Loader/ValidatingArrayLoaderTest.php index 3433d927c..e095f6e3d 100644 --- a/tests/Composer/Test/Package/Loader/ValidatingArrayLoaderTest.php +++ b/tests/Composer/Test/Package/Loader/ValidatingArrayLoaderTest.php @@ -208,7 +208,7 @@ class ValidatingArrayLoaderTest extends \PHPUnit_Framework_TestCase 'name' => 'foo', ), array( - 'name : invalid value, must match [A-Za-z0-9][A-Za-z0-9_.-]*/[A-Za-z0-9][A-Za-z0-9_.-]*' + 'name : invalid value (foo), must match [A-Za-z0-9][A-Za-z0-9_.-]*/[A-Za-z0-9][A-Za-z0-9_.-]*' ) ), array( @@ -243,7 +243,7 @@ class ValidatingArrayLoaderTest extends \PHPUnit_Framework_TestCase 'homepage' => 'foo:bar', ), array( - 'homepage : invalid value, must be an http/https URL' + 'homepage : invalid value (foo:bar), must be an http/https URL' ) ), array( @@ -257,10 +257,10 @@ class ValidatingArrayLoaderTest extends \PHPUnit_Framework_TestCase ), ), array( - 'support.source : invalid value, must be an http/https URL', - 'support.forum : invalid value, must be an http/https URL', - 'support.issues : invalid value, must be an http/https URL', - 'support.wiki : invalid value, must be an http/https URL', + 'support.source : invalid value (foo:bar), must be an http/https URL', + 'support.forum : invalid value (foo:bar), must be an http/https URL', + 'support.issues : invalid value (foo:bar), must be an http/https URL', + 'support.wiki : invalid value (foo:bar), must be an http/https URL', ) ), );