Skip to content

Commit

Permalink
Add between with unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
jasonlam604 committed Aug 18, 2016
1 parent 168614c commit d274a9a
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 0 deletions.
7 changes: 7 additions & 0 deletions src/Stringizer.php
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@
use Stringizer\Transformers\CollapseWhitespace;
use Stringizer\Transformers\Base64Check;
use Stringizer\Transformers\Base64;
use Stringizer\Transformers\Between;

/**
* Stringizer
Expand Down Expand Up @@ -160,6 +161,12 @@ public function concat($value, $preAppend = false)
return $this;
}

public function between($left,$right)
{
$this->value = (new Between($this->value,$left,$right))->execute();
return $this;
}

public function contains($needle)
{
return (new Contains($this->value, $needle))->execute();
Expand Down
40 changes: 40 additions & 0 deletions src/Transformers/Between.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?php
namespace Stringizer\Transformers;

use Stringizer\Stringizer;

/**
* Between - Extracts a string between left and right strings.
*
* @link https://github.com/jasonlam604/Stringizer
* @copyright Copyright (c) 2016 Jason Lam
* @license https://github.com/jasonlam604/Stringizer/blob/master/LICENSE (MIT License)
*/
class Between extends Transformer implements TransformerInterface
{

private $left;
private $right;

public function __construct($value, $left, $right)
{
parent::__construct($value);
$this->left = $left;
$this->right = $right;
}

public function execute()
{
$str = $this->getValue();

if (mb_substr($this->getValue(), 0, mb_strlen($this->left)) == $this->left) {
$str = mb_substr($this->getValue(), mb_strlen($this->left));
}

if(mb_substr($this->getValue(), mb_strlen($this->getValue()) - mb_strlen($this->right), mb_strlen($this->right)) == $this->right) {
$str = mb_substr($str, 0, mb_strlen($str) - mb_strlen($this->right));
}

return $str;
}
}
31 changes: 31 additions & 0 deletions tests/BetweenTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php
use Stringizer\Stringizer;

/**
* Between Unit Tests
*/
class BetweenTest extends PHPUnit_Framework_TestCase
{
public function testValid()
{
$s = new Stringizer("<div>Hello World</div>");
$this->assertEquals("Hello World", $s->between("<div>", "</div>"));

// Right Side no match, retains the last right side </div>
$s = new Stringizer("<div>Hello World</div></div>");
$this->assertEquals("Hello World</div>", $s->between("<div>", "</div>"));

$s = new Stringizer("<div>Hello World");
$this->assertEquals("Hello World", $s->between("<div>", "</div>"));
}

public function testValidMultiByte()
{
$s = new Stringizer("<div>ȘŦŗÍñĝìzĕŕ</div>");
$this->assertEquals("ȘŦŗÍñĝìzĕŕ", $s->between("<div>", "</div>"));

$s = new Stringizer("<div>こんにちは</div>");
$this->assertEquals("こんにちは", $s->between("<div>", "</div>"));
}

}

0 comments on commit d274a9a

Please sign in to comment.