Changeset 1360

Show
Ignore:
Timestamp:
02/22/08 19:07:47 (8 months ago)
Author:
mikey
Message:

put xml stream writer used in processor into response to allow adding more data into the document tree
this is somewhat hackish as the stream writer leaves the processor in an unfinished state

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/main/php/net/stubbles/websites/xml/stubShowLastXMLInterceptor.php

    r1256 r1360  
    1818 */ 
    1919stubClassLoader::load('net::stubbles::ipo::interceptors::stubPreInterceptor', 
    20                       'net::stubbles::ipo::interceptors::stubPostInterceptor', 
    21                       'net::stubbles::ipo::request::stubRequest', 
    22                       'net::stubbles::ipo::request::stubResponse', 
    23                       'net::stubbles::ipo::session::stubSession' 
     20                      'net::stubbles::websites::xml::stubXMLAbstractPostInterceptor' 
    2421); 
    2522/** 
     
    3835 * @subpackage  websites_xml 
    3936 */ 
    40 class stubShowLastXMLInterceptor extends stubBaseObject implements stubPreInterceptor, stubPostInterceptor 
     37class stubShowLastXMLInterceptor extends stubXMLAbstractPostInterceptor implements stubPreInterceptor 
    4138{ 
    4239    /** 
     
    6461     * does the postprocessing stuff 
    6562     * 
    66      * @param  stubRequest   $request   access to request data 
    67      * @param  stubSession   $session   access to session data 
    68      * @param  stubResponse  $response  access to response data 
     63     * @param  stubRequest      $request   access to request data 
     64     * @param  stubSession      $session   access to session data 
     65     * @param  stubXMLResponse  $response  access to response data 
    6966     */ 
    70     public function postProcess(stubRequest $request, stubSession $session, stubResponse $response) 
     67    protected function doPostProcess(stubRequest $request, stubSession $session, stubXMLResponse $response) 
    7168    { 
    72         $session->putValue(self::SESSION_KEY, $response->getData()); 
     69        $xmlStreamWriter = $response->getXMLStreamWriter(); 
     70        if ($xmlStreamWriter->isFinished() === false) { 
     71            $xmlStreamWriter->writeEndElement(); 
     72        } 
     73         
     74        $session->putValue(self::SESSION_KEY, $xmlStreamWriter->asXML()); 
    7375    } 
    7476} 
  • trunk/src/main/php/net/stubbles/websites/xml/stubXMLPostInterceptor.php

    r1357 r1360  
    9090        $xslProcessor = $this->createXSLProcessor(); 
    9191        $xslProcessor->importXSLStylesheet($resultXSL); 
    92         $xslProcessor->setXMLDocument(DOMDocument::loadXML($response->getData())); 
     92        $xmlStreamWriter = $response->getXMLStreamWriter(); 
     93        if ($xmlStreamWriter->isFinished() === false) { 
     94            $xmlStreamWriter->writeEndElement(); 
     95        } 
     96         
     97        $xslProcessor->setXMLDocument($xmlStreamWriter->asDOM()); 
    9398        $response->replaceData(str_replace(' xmlns=""', '', preg_replace('/ xml:base="(.*)"/U', '', $xslProcessor->transformToXML()))); 
    9499    } 
  • trunk/src/main/php/net/stubbles/websites/xml/stubXMLProcessor.php

    r1355 r1360  
    102102        } 
    103103 
    104         // end document 
    105         $xmlStreamWriter->writeEndElement(); 
    106         $this->response->replaceData($xmlStreamWriter->asXML()); 
     104        $this->response->setXMLStreamWriter($xmlStreamWriter); 
    107105    } 
    108106 
     
    115113     * <document> 
    116114     *   <session> 
     115     *     <acceptsCookies>true</acceptsCookies> 
     116     *     <id>abc123</id> 
     117     *     <name>PHPSESSID</name> 
    117118     *     <isNew>true</isNew> 
     119     *     <variant> 
     120     *       <name>foo</name> 
     121     *       <alias>bar</alias> 
     122     *     </variant> 
    118123     *     <token> 
    119124     *       <current>foo</current> 
  • trunk/src/test/php/net/stubbles/websites/xml/stubShowLastXMLInterceptorTestCase.php

    r1256 r1360  
    9999     * 
    100100     * @test 
     101     * @expectedException  stubRuntimeException 
    101102     */ 
    102     public function postProcess() 
     103    public function postProcessNoXMLResponse() 
    103104    { 
    104         $this->mockResponse->expects($this->once())->method('getData')->will($this->returnValue('foo')); 
     105        $this->showLastXMLPreInterceptor->postProcess($this->mockRequest, $this->mockSession, $this->mockResponse); 
     106    } 
     107 
     108    /** 
     109     * assure that postProcess() puts correct data into session 
     110     * 
     111     * @test 
     112     */ 
     113    public function postProcessUnfinishedStreamWriter() 
     114    { 
     115        $mockXMLStreamWriter = $this->getMock('stubXMLStreamWriter'); 
     116        $mockXMLStreamWriter->expects($this->once()) 
     117                            ->method('isFinished') 
     118                            ->will($this->returnValue(false)); 
     119        $mockXMLStreamWriter->expects($this->once()) 
     120                            ->method('writeEndElement'); 
     121        $mockXMLStreamWriter->expects($this->once()) 
     122                            ->method('asXML') 
     123                            ->will($this->returnValue('foo')); 
     124        $xmlResponse = new stubXMLResponse($this->mockResponse); 
     125        $xmlResponse->setXMLStreamWriter($mockXMLStreamWriter); 
    105126        $this->mockSession->expects($this->once())->method('putValue')->with($this->equalTo(stubShowLastXMLInterceptor::SESSION_KEY), $this->equalTo('foo')); 
    106         $this->showLastXMLPreInterceptor->postProcess($this->mockRequest, $this->mockSession, $this->mockResponse); 
     127        $this->showLastXMLPreInterceptor->postProcess($this->mockRequest, $this->mockSession, $xmlResponse); 
     128    } 
     129 
     130    /** 
     131     * assure that postProcess() puts correct data into session 
     132     * 
     133     * @test 
     134     */ 
     135    public function postProcessFinishedStreamWriter() 
     136    { 
     137        $mockXMLStreamWriter = $this->getMock('stubXMLStreamWriter'); 
     138        $mockXMLStreamWriter->expects($this->once()) 
     139                            ->method('isFinished') 
     140                            ->will($this->returnValue(true)); 
     141        $mockXMLStreamWriter->expects($this->never()) 
     142                            ->method('writeEndElement'); 
     143        $mockXMLStreamWriter->expects($this->once()) 
     144                            ->method('asXML') 
     145                            ->will($this->returnValue('foo')); 
     146        $xmlResponse = new stubXMLResponse($this->mockResponse); 
     147        $xmlResponse->setXMLStreamWriter($mockXMLStreamWriter); 
     148        $this->mockSession->expects($this->once())->method('putValue')->with($this->equalTo(stubShowLastXMLInterceptor::SESSION_KEY), $this->equalTo('foo')); 
     149        $this->showLastXMLPreInterceptor->postProcess($this->mockRequest, $this->mockSession, $xmlResponse); 
    107150    } 
    108151} 
  • trunk/src/test/php/net/stubbles/websites/xml/stubXMLPostInterceptorTestCase.php

    r1357 r1360  
    3333    protected $xmlResponse; 
    3434    /** 
     35     * instance to be used for tests 
     36     * 
     37     * @var  PHPUnit_Framework_MockObject_MockObject 
     38     */ 
     39    protected $mockXMLStreamWriter; 
     40    /** 
    3541     * mocked request instance 
    3642     * 
     
    8288                                                   ) 
    8389                                    ); 
    84         $this->mockRequest        = $this->getMock('stubRequest'); 
    85         $this->mockResponse       = $this->getMock('stubResponse'); 
    86         $this->mockResponse->expects($this->any())->method('getData')->will($this->returnValue('<foo>bar</foo>')); 
     90        $this->mockRequest         = $this->getMock('stubRequest'); 
     91        $this->mockResponse        = $this->getMock('stubResponse'); 
     92        $this->mockXMLStreamWriter = $this->getMock('stubXMLStreamWriter'); 
     93        $domDocument0 = new DOMDocument(); 
     94        $domDocument0->createElement('bar', 'foo'); 
     95        $this->mockXMLStreamWriter->expects($this->any())->method('isFinished')->will($this->returnValue(true)); 
     96        $this->mockXMLStreamWriter->expects($this->any())->method('asDOM')->will($this->returnValue($domDocument0)); 
    8797        $this->xmlResponse        = new stubXMLResponse($this->mockResponse); 
     98        $this->xmlResponse->setXMLStreamWriter($this->mockXMLStreamWriter); 
    8899        $this->page               = new stubPage(); 
    89100        $this->xmlResponse->setPage($this->page); 
  • trunk/src/test/php/net/stubbles/websites/xml/stubXMLProcessorTestCase.php

    r1355 r1360  
    155155        $this->mockPageFactory->expects($this->once())->method('getPage')->with($this->equalTo('conf/index')); 
    156156        $this->mockXMLStreamWriter->expects($this->exactly(5))->method('writeStartElement'); 
    157         $this->mockXMLStreamWriter->expects($this->exactly(5))->method('writeEndElement'); 
     157        $this->mockXMLStreamWriter->expects($this->exactly(4))->method('writeEndElement'); 
    158158        $this->mockXMLSerializer->expects($this->once())->method('serialize'); 
    159159        $return = $this->xmlProcessor->process(); 
     
    189189        $this->page->addElement($pageElement3); 
    190190        $this->mockXMLStreamWriter->expects($this->exactly(5))->method('writeStartElement'); 
    191         $this->mockXMLStreamWriter->expects($this->exactly(5))->method('writeEndElement'); 
     191        $this->mockXMLStreamWriter->expects($this->exactly(4))->method('writeEndElement'); 
    192192        $this->mockXMLSerializer->expects($this->at(0)) 
    193193                                ->method('serialize')