From 353b3d04ce7a03c7c87f7343e766b3f45e96003c Mon Sep 17 00:00:00 2001
From: tof <>
Date: Wed, 27 Jun 2007 14:26:52 +0000
Subject: implement unit tests for THtmlWriter

---
 tests/unit/Web/UI/THtmlWriterTest.php | 137 +++++++++++++++++++++++++++++-----
 1 file changed, 118 insertions(+), 19 deletions(-)

(limited to 'tests/unit')

diff --git a/tests/unit/Web/UI/THtmlWriterTest.php b/tests/unit/Web/UI/THtmlWriterTest.php
index f2ed7086..fa5bb954 100644
--- a/tests/unit/Web/UI/THtmlWriterTest.php
+++ b/tests/unit/Web/UI/THtmlWriterTest.php
@@ -3,65 +3,164 @@ require_once dirname(__FILE__).'/../../phpunit.php';
 
 Prado::using('System.Web.UI.THtmlWriter');
 
+/**
+ * Implement a writer that flush the content to a variable, to simulate a real flush
+ */
+
+class TestWriter extends TComponent implements ITextWriter
+{
+	private $_str='';
+	private $_flushedContent=null;
+
+
+	public function flush()
+	{
+		$this->_flushedContent=$this->_str;
+		$this->_str='';
+		return $this->_flushedContent;
+	}
+
+
+	public function write($str)
+	{
+		$this->_str.=$str;
+	}
+
+
+	public function writeLine($str='')
+	{
+		$this->write($str."\n");
+	}
+	
+	// Accessors to get value of private vars during tests
+	public function getFlushedContent() { return $this->_flushedContent; }
+	public function getStr() { return $this->_str; }
+}
+
+
 /**
  * @package System.Web.UI
  */
 class THtmlWriterTest extends PHPUnit_Framework_TestCase {
-	
+
+	private static $output=null;
+
+	public function setUp () {
+		// We need an output writer, use a TestWriter for this
+		if (self::$output===null) self::$output=new TestWriter();
+	}
+
 	public function testConstruct() {
-		throw new PHPUnit_Framework_IncompleteTestError();
+		$writer=new THtmlWriter(self::$output);
+		self::assertEquals(self::$output, $writer->getWriter());
 	}
-	
+
 	public function testSetAndGetWriter() {
-		throw new PHPUnit_Framework_IncompleteTestError();
+		$writer=new THtmlWriter(null);
+		self::assertNull($writer->getWriter());
+		$writer->setWriter(self::$output);
+		self::assertEquals(self::$output, $writer->getWriter());
 	}
-	
+
 	public function testAddAttributes() {
-		throw new PHPUnit_Framework_IncompleteTestError();
+		$writer=new THtmlWriter(self::$output);
+		$writer->addAttributes(array ('type' => 'text', 'value' => 'Prado & Cie'));
+		// get the private var _attributes
+		$result=self::getAttribute($writer, '_attributes');
+		self::assertEquals('text',$result['type']);
+		self::assertEquals(THttpUtility::htmlEncode('Prado & Cie'), $result['value']);
 	}
-	
+
 	public function testAddAttribute() {
-		throw new PHPUnit_Framework_IncompleteTestError();
+		$writer=new THtmlWriter(self::$output);
+		$writer->addAttribute('type','text');
+		$writer->addAttribute('value','Prado & Cie');
+		$result=self::getAttribute($writer, '_attributes');
+		self::assertEquals('text',$result['type']);
+		self::assertEquals(THttpUtility::htmlEncode('Prado & Cie'), $result['value']);		
 	}
-	
+
 	public function testRemoveAttribute() {
-		throw new PHPUnit_Framework_IncompleteTestError();
+		$writer=new THtmlWriter(self::$output);
+		$writer->addAttribute('type','text');
+		$writer->addAttribute('value','Prado & Cie');
+		$writer->removeAttribute('value');
+		$result=self::getAttribute($writer, '_attributes');
+		// 'type' should be present, 'value' not
+		self::assertTrue(isset($result['type']));
+		self::assertFalse(isset($result['value']));
 	}
 
 	public function testAddStyleAttributes() {
-		throw new PHPUnit_Framework_IncompleteTestError();
+		$writer=new THtmlWriter(self::$output);
+		$writer->addStyleAttributes(array ('font-size' => '1em', 'background-image'=>'url(image.gif)'));
+		$result=self::getAttribute($writer, '_styles');
+		self::assertEquals('1em', $result['font-size']);
+		self::assertEquals(THttpUtility::htmlEncode('url(image.gif)'), $result['background-image']);
 	}
 
 	public function testAddStyleAttribute() {
-		throw new PHPUnit_Framework_IncompleteTestError();
+		$writer=new THtmlWriter(self::$output);
+		$writer->addStyleAttribute('font-size','1em');
+		$writer->addStyleAttribute('background-image','url(image.gif)');
+		$result=self::getAttribute($writer, '_styles');
+		self::assertEquals('1em', $result['font-size']);
+		self::assertEquals(THttpUtility::htmlEncode('url(image.gif)'), $result['background-image']);
 	}
 
 	public function testRemoveStyleAttribute() {
-		throw new PHPUnit_Framework_IncompleteTestError();
+		$writer=new THtmlWriter(self::$output);
+		$writer->addStyleAttribute('font-size','1em');
+		$writer->addStyleAttribute('background-image','url(image.gif)');
+		$writer->removeStyleAttribute('font-size');
+		$result=self::getAttribute($writer, '_styles');
+		self::assertTrue(isset($result['background-image']));
+		self::assertFalse(isset($result['font-size']));
 	}
 
 	public function testFlush() {
-		throw new PHPUnit_Framework_IncompleteTestError();
+		$writer=new THtmlWriter(self::$output);
+		$writer->write('Some Text');
+		$writer->flush();
+		self::assertEquals('Some Text', self::$output->getFlushedContent());
 	}
 
 	public function testWrite() {
-		throw new PHPUnit_Framework_IncompleteTestError();
+		$writer=new THtmlWriter(self::$output);
+		$writer->write('Some Text');;
+		self::assertEquals('Some Text', self::$output->flush());
+		
 	}
 
 	public function testWriteLine() {
-		throw new PHPUnit_Framework_IncompleteTestError();
+		$writer=new THtmlWriter(self::$output);
+		$writer->writeLine('Some Text');;
+		self::assertEquals("Some Text\n", self::$output->flush());
+		
 	}
 
 	public function testWriteBreak() {
-		throw new PHPUnit_Framework_IncompleteTestError();
+		$writer=new THtmlWriter(self::$output);
+		$writer->writeBreak();
+		self::assertEquals("<br/>", self::$output->flush());
+		
 	}
 
 	public function testRenderBeginTag() {
-		throw new PHPUnit_Framework_IncompleteTestError();
+		$writer=new THtmlWriter(self::$output);
+		$writer->addAttribute('type','text');
+		$writer->addAttribute('value','Prado');
+		$writer->addStyleAttribute('font-size','1em');
+		$writer->renderBeginTag('input');
+		self::assertEquals('<input type="text" value="Prado" style="font-size:1em;" />', self::$output->flush());
 	}
 
 	public function testRenderEndTag() {
-		throw new PHPUnit_Framework_IncompleteTestError();
+		$writer=new THtmlWriter(self::$output);
+		$writer->renderBeginTag('div');
+		$writer->write('Div Content');
+		$writer->renderEndTag();
+		self::assertEquals('<div>Div Content</div>', self::$output->flush());
 	}
 
 }
-- 
cgit v1.2.3