Skip to content

Commit

Permalink
Merge pull request #35 from DataValues/trimNormalizer
Browse files Browse the repository at this point in the history
Add TrimmingStringNormalizer
  • Loading branch information
mariushoch committed Apr 2, 2018
2 parents 2a57e91 + 0e00387 commit d915e78
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 0 deletions.
1 change: 1 addition & 0 deletions README.md
Expand Up @@ -57,6 +57,7 @@ employees for the [Wikidata project](https://wikidata.org/).

### 1.0.0 (dev)

* Added `TrimmingStringNormalizer`
* Removed the `DATAVALUES_COMMON_VERSION` constant
* The `StringFormatter` constructor does not accept options any more

Expand Down
32 changes: 32 additions & 0 deletions src/ValueParsers/Normalizers/TrimmingStringNormalizer.php
@@ -0,0 +1,32 @@
<?php

namespace ValueParsers\Normalizers;

use InvalidArgumentException;

/**
* Most simple implementation of a StringNormalizer that does nothing but trimming whitespace, by
* using the definition of "whitespace" in Unicode-enabled Perl regular expressions.
*
* @since 0.3.2
*
* @license GPL-2.0-or-later
* @author Thiemo Kreuz
*/
class TrimmingStringNormalizer implements StringNormalizer {

/**
* @param string $value
*
* @throws InvalidArgumentException if $value is not a string
* @return string the trimmed string
*/
public function normalize( $value ) {
if ( !is_string( $value ) ) {
throw new InvalidArgumentException( '$value must be a string' );
}

return preg_replace( '/^\s+|\s+$/u', '', $value );
}

}
56 changes: 56 additions & 0 deletions tests/ValueParsers/Normalizers/TrimmingStringNormalizerTest.php
@@ -0,0 +1,56 @@
<?php

namespace ValueParsers\Normalizers\Test;

use DataValues\StringValue;
use PHPUnit_Framework_TestCase;
use ValueParsers\Normalizers\TrimmingStringNormalizer;

/**
* @covers ValueParsers\Normalizers\TrimmingStringNormalizer
*
* @group ValueParsers
* @group DataValueExtensions
*
* @license GPL-2.0-or-later
* @author Thiemo Kreuz
*/
class TrimmingStringNormalizerTest extends PHPUnit_Framework_TestCase {

/**
* @dataProvider stringProvider
*/
public function testNormalize( $value, $expected ) {
$normalizer = new TrimmingStringNormalizer();
$this->assertSame( $expected, $normalizer->normalize( $value ) );
}

public function stringProvider() {
return [
'Empty' => [ '', '' ],
'Trimmed' => [ 'a', 'a' ],
'Spaces' => [ ' a ', 'a' ],
'Controls' => [ "\n\r\ta\n\r\t", 'a' ],
'Paragraph separator' => [ "\xE2\x80\xA9a\xE2\x80\xA9", 'a' ],
];
}

/**
* @dataProvider invalidValueProvider
*/
public function testNormalizeException( $value ) {
$normalizer = new TrimmingStringNormalizer();
$this->setExpectedException( 'InvalidArgumentException' );
$normalizer->normalize( $value );
}

public function invalidValueProvider() {
return [
[ null ],
[ true ],
[ 1 ],
[ new StringValue( '' ) ],
];
}

}

0 comments on commit d915e78

Please sign in to comment.