Skip to content

Commit

Permalink
Adding tests and functionality for nested blocks.
Browse files Browse the repository at this point in the history
  • Loading branch information
markstory committed Dec 18, 2011
1 parent f0f3eb9 commit 46bb6c8
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 10 deletions.
18 changes: 18 additions & 0 deletions lib/Cake/Test/Case/View/ViewTest.php
Expand Up @@ -1036,6 +1036,24 @@ public function testBlocks() {
$this->assertEquals(array('test', 'test1'), $this->View->blocks());
}

/**
* Test that blocks can be nested.
*
* @return void
*/
public function testNestedBlocks() {
$this->View->start('first');
echo 'In first ';
$this->View->start('second');
echo 'In second';
$this->View->end();
echo 'In first';
$this->View->end();

$this->assertEquals('In first In first', $this->View->fetch('first'));
$this->assertEquals('In second', $this->View->fetch('second'));
}

/**
* Test that an exception gets thrown when you leave a block open at the end
* of a view.
Expand Down
21 changes: 11 additions & 10 deletions lib/Cake/View/ViewBlock.php
Expand Up @@ -31,11 +31,11 @@ class ViewBlock {
protected $_blocks = array();

/**
* The active block being captured.
* The active blocks being captured.
*
* @var string
* @var array
*/
protected $_active = null;
protected $_active = array();

/**
* Start capturing output for a 'block'
Expand All @@ -50,7 +50,7 @@ class ViewBlock {
* @return void
*/
public function start($name) {
$this->_active = $name;
$this->_active[] = $name;
ob_start();
}

Expand All @@ -62,13 +62,14 @@ public function start($name) {
*/
public function end() {
if (!empty($this->_active)) {
$active = end($this->_active);
$content = ob_get_clean();
if (!isset($this->_blocks[$this->_active])) {
$this->_blocks[$this->_active] = '';
if (!isset($this->_blocks[$active])) {
$this->_blocks[$active] = '';
}
$this->_blocks[$this->_active] .= $content;
$this->_blocks[$active] .= $content;
array_pop($this->_active);
}
$this->_active = null;
}

/**
Expand Down Expand Up @@ -139,9 +140,9 @@ public function keys() {
/**
* Get the name of the currently open block.
*
* @return mixed Either null or the name of the open block.
* @return mixed Either null or the name of the last open block.
*/
public function active() {
return $this->_active;
return end($this->_active);
}
}

0 comments on commit 46bb6c8

Please sign in to comment.