1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_io.hxx" 30*cdf0e10cSrcweir #include <stdio.h> 31*cdf0e10cSrcweir #include <osl/time.h> 32*cdf0e10cSrcweir 33*cdf0e10cSrcweir #include <osl/diagnose.h> 34*cdf0e10cSrcweir #include <com/sun/star/test/XSimpleTest.hpp> 35*cdf0e10cSrcweir 36*cdf0e10cSrcweir #include <com/sun/star/io/XActiveDataSource.hpp> 37*cdf0e10cSrcweir #include <com/sun/star/io/XActiveDataSink.hpp> 38*cdf0e10cSrcweir #include <com/sun/star/io/XActiveDataControl.hpp> 39*cdf0e10cSrcweir #include <com/sun/star/io/XConnectable.hpp> 40*cdf0e10cSrcweir #include <com/sun/star/lang/XServiceInfo.hpp> 41*cdf0e10cSrcweir #include <com/sun/star/lang/XSingleServiceFactory.hpp> 42*cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp> 43*cdf0e10cSrcweir #include <com/sun/star/registry/XRegistryKey.hpp> 44*cdf0e10cSrcweir 45*cdf0e10cSrcweir #include <uno/dispatcher.h> 46*cdf0e10cSrcweir #include <uno/mapping.hxx> 47*cdf0e10cSrcweir #include <cppuhelper/implbase1.hxx> 48*cdf0e10cSrcweir #include <cppuhelper/factory.hxx> 49*cdf0e10cSrcweir #include <osl/mutex.hxx> 50*cdf0e10cSrcweir #include <osl/thread.h> 51*cdf0e10cSrcweir #include <list> 52*cdf0e10cSrcweir 53*cdf0e10cSrcweir 54*cdf0e10cSrcweir 55*cdf0e10cSrcweir 56*cdf0e10cSrcweir using namespace ::rtl; 57*cdf0e10cSrcweir using namespace ::osl; 58*cdf0e10cSrcweir using namespace ::cppu; 59*cdf0e10cSrcweir using namespace ::com::sun::star::uno; 60*cdf0e10cSrcweir using namespace ::com::sun::star::io; 61*cdf0e10cSrcweir using namespace ::com::sun::star::lang; 62*cdf0e10cSrcweir using namespace ::com::sun::star::test; 63*cdf0e10cSrcweir 64*cdf0e10cSrcweir #include "testfactreg.hxx" 65*cdf0e10cSrcweir 66*cdf0e10cSrcweir static void mywait() 67*cdf0e10cSrcweir { 68*cdf0e10cSrcweir TimeValue a = { 0, 10000 }; 69*cdf0e10cSrcweir osl_waitThread( &a ); 70*cdf0e10cSrcweir osl_yieldThread(); 71*cdf0e10cSrcweir osl_yieldThread(); 72*cdf0e10cSrcweir } 73*cdf0e10cSrcweir 74*cdf0e10cSrcweir class OPumpTest : public WeakImplHelper1 < XSimpleTest > 75*cdf0e10cSrcweir { 76*cdf0e10cSrcweir public: 77*cdf0e10cSrcweir OPumpTest( const Reference< XMultiServiceFactory > & rFactory ); 78*cdf0e10cSrcweir ~OPumpTest(); 79*cdf0e10cSrcweir 80*cdf0e10cSrcweir public: // implementation names 81*cdf0e10cSrcweir static Sequence< OUString > getSupportedServiceNames_Static(void) throw(); 82*cdf0e10cSrcweir static OUString getImplementationName_Static() throw(); 83*cdf0e10cSrcweir 84*cdf0e10cSrcweir public: 85*cdf0e10cSrcweir virtual void SAL_CALL testInvariant(const OUString& TestName, const Reference < XInterface >& TestObject) 86*cdf0e10cSrcweir throw ( IllegalArgumentException, RuntimeException) ; 87*cdf0e10cSrcweir 88*cdf0e10cSrcweir virtual sal_Int32 SAL_CALL test( const OUString& TestName, 89*cdf0e10cSrcweir const Reference < XInterface >& TestObject, 90*cdf0e10cSrcweir sal_Int32 hTestHandle) 91*cdf0e10cSrcweir throw ( IllegalArgumentException, 92*cdf0e10cSrcweir RuntimeException); 93*cdf0e10cSrcweir 94*cdf0e10cSrcweir virtual sal_Bool SAL_CALL testPassed(void) throw ( RuntimeException) ; 95*cdf0e10cSrcweir virtual Sequence< OUString > SAL_CALL getErrors(void) throw (RuntimeException) ; 96*cdf0e10cSrcweir virtual Sequence< Any > SAL_CALL getErrorExceptions(void) throw (RuntimeException); 97*cdf0e10cSrcweir virtual Sequence< OUString > SAL_CALL getWarnings(void) throw (RuntimeException); 98*cdf0e10cSrcweir 99*cdf0e10cSrcweir private: 100*cdf0e10cSrcweir void testSimple( const Reference < XInterface > & ); 101*cdf0e10cSrcweir void testWrongUsage( const Reference < XInterface > & ); 102*cdf0e10cSrcweir void testClose( const Reference< XInterface >& ); 103*cdf0e10cSrcweir void testTerminate( const Reference< XInterface >& ); 104*cdf0e10cSrcweir void testFunction( const Reference< XInterface >& ); 105*cdf0e10cSrcweir private: 106*cdf0e10cSrcweir Sequence<Any> m_seqExceptions; 107*cdf0e10cSrcweir Sequence<OUString> m_seqErrors; 108*cdf0e10cSrcweir Sequence<OUString> m_seqWarnings; 109*cdf0e10cSrcweir Reference< XMultiServiceFactory > m_rSmgr; 110*cdf0e10cSrcweir 111*cdf0e10cSrcweir }; 112*cdf0e10cSrcweir 113*cdf0e10cSrcweir OPumpTest::OPumpTest( const Reference< XMultiServiceFactory > &rFactory ) : 114*cdf0e10cSrcweir m_rSmgr( rFactory ) 115*cdf0e10cSrcweir { 116*cdf0e10cSrcweir 117*cdf0e10cSrcweir } 118*cdf0e10cSrcweir 119*cdf0e10cSrcweir OPumpTest::~OPumpTest() 120*cdf0e10cSrcweir { 121*cdf0e10cSrcweir 122*cdf0e10cSrcweir } 123*cdf0e10cSrcweir 124*cdf0e10cSrcweir 125*cdf0e10cSrcweir 126*cdf0e10cSrcweir void OPumpTest::testInvariant( const OUString& TestName, const Reference < XInterface >& TestObject ) 127*cdf0e10cSrcweir throw ( IllegalArgumentException, 128*cdf0e10cSrcweir RuntimeException) 129*cdf0e10cSrcweir { 130*cdf0e10cSrcweir Reference< XServiceInfo > info( TestObject, UNO_QUERY ); 131*cdf0e10cSrcweir ERROR_ASSERT( info.is() , "XServiceInfo not supported !" ); 132*cdf0e10cSrcweir if( info.is() ) 133*cdf0e10cSrcweir { 134*cdf0e10cSrcweir ERROR_ASSERT( info->supportsService( TestName ), "XServiceInfo test failed" ); 135*cdf0e10cSrcweir ERROR_ASSERT( ! info->supportsService( 136*cdf0e10cSrcweir OUString( RTL_CONSTASCII_USTRINGPARAM("bla bluzb") ) ), "XServiceInfo test failed" ); 137*cdf0e10cSrcweir } 138*cdf0e10cSrcweir 139*cdf0e10cSrcweir Reference < XActiveDataSource > xActiveDataSource( TestObject, UNO_QUERY ); 140*cdf0e10cSrcweir Reference < XActiveDataSink > xActiveDataSink( TestObject, UNO_QUERY ); 141*cdf0e10cSrcweir Reference < XActiveDataControl > xActiveDataControl( TestObject , UNO_QUERY ); 142*cdf0e10cSrcweir Reference < XConnectable > xConnectable( TestObject , UNO_QUERY ); 143*cdf0e10cSrcweir 144*cdf0e10cSrcweir ERROR_ASSERT( xActiveDataSource.is() && xActiveDataSink.is() && xActiveDataControl.is () && 145*cdf0e10cSrcweir xConnectable.is(), "specified interface not supported" ); 146*cdf0e10cSrcweir } 147*cdf0e10cSrcweir 148*cdf0e10cSrcweir 149*cdf0e10cSrcweir sal_Int32 OPumpTest::test( 150*cdf0e10cSrcweir const OUString& TestName, 151*cdf0e10cSrcweir const Reference < XInterface >& TestObject, 152*cdf0e10cSrcweir sal_Int32 hTestHandle) 153*cdf0e10cSrcweir throw ( IllegalArgumentException, RuntimeException) 154*cdf0e10cSrcweir { 155*cdf0e10cSrcweir if( OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.io.Pump") ) == TestName ) { 156*cdf0e10cSrcweir try 157*cdf0e10cSrcweir { 158*cdf0e10cSrcweir if( 0 == hTestHandle ) { 159*cdf0e10cSrcweir testInvariant( TestName , TestObject ); 160*cdf0e10cSrcweir } 161*cdf0e10cSrcweir else if ( 1 == hTestHandle ) 162*cdf0e10cSrcweir { 163*cdf0e10cSrcweir testWrongUsage( TestObject); 164*cdf0e10cSrcweir } 165*cdf0e10cSrcweir else if ( 2 == hTestHandle ) 166*cdf0e10cSrcweir { 167*cdf0e10cSrcweir testClose( TestObject); 168*cdf0e10cSrcweir } 169*cdf0e10cSrcweir else if ( 3 == hTestHandle ) 170*cdf0e10cSrcweir { 171*cdf0e10cSrcweir testTerminate( TestObject ); 172*cdf0e10cSrcweir } 173*cdf0e10cSrcweir else if ( 4 == hTestHandle ) 174*cdf0e10cSrcweir { 175*cdf0e10cSrcweir testFunction( TestObject ); 176*cdf0e10cSrcweir } 177*cdf0e10cSrcweir } 178*cdf0e10cSrcweir catch( Exception & e ) 179*cdf0e10cSrcweir { 180*cdf0e10cSrcweir OString s = OUStringToOString( e.Message , RTL_TEXTENCODING_ASCII_US ); 181*cdf0e10cSrcweir BUILD_ERROR( 0 , s.getStr() ); 182*cdf0e10cSrcweir } 183*cdf0e10cSrcweir catch( ... ) 184*cdf0e10cSrcweir { 185*cdf0e10cSrcweir BUILD_ERROR( 0 , "unknown exception (Exception is not base class)" ); 186*cdf0e10cSrcweir } 187*cdf0e10cSrcweir 188*cdf0e10cSrcweir hTestHandle ++; 189*cdf0e10cSrcweir 190*cdf0e10cSrcweir if( 5 == hTestHandle ) 191*cdf0e10cSrcweir { 192*cdf0e10cSrcweir // all tests finished. 193*cdf0e10cSrcweir hTestHandle = -1; 194*cdf0e10cSrcweir } 195*cdf0e10cSrcweir } 196*cdf0e10cSrcweir else { 197*cdf0e10cSrcweir throw IllegalArgumentException(); 198*cdf0e10cSrcweir } 199*cdf0e10cSrcweir return hTestHandle; 200*cdf0e10cSrcweir } 201*cdf0e10cSrcweir 202*cdf0e10cSrcweir 203*cdf0e10cSrcweir 204*cdf0e10cSrcweir sal_Bool OPumpTest::testPassed(void) throw (RuntimeException) 205*cdf0e10cSrcweir { 206*cdf0e10cSrcweir return m_seqErrors.getLength() == 0; 207*cdf0e10cSrcweir } 208*cdf0e10cSrcweir 209*cdf0e10cSrcweir 210*cdf0e10cSrcweir Sequence< OUString > OPumpTest::getErrors(void) throw (RuntimeException) 211*cdf0e10cSrcweir { 212*cdf0e10cSrcweir return m_seqErrors; 213*cdf0e10cSrcweir } 214*cdf0e10cSrcweir 215*cdf0e10cSrcweir 216*cdf0e10cSrcweir Sequence< Any > OPumpTest::getErrorExceptions(void) throw (RuntimeException) 217*cdf0e10cSrcweir { 218*cdf0e10cSrcweir return m_seqExceptions; 219*cdf0e10cSrcweir } 220*cdf0e10cSrcweir 221*cdf0e10cSrcweir 222*cdf0e10cSrcweir Sequence< OUString > OPumpTest::getWarnings(void) throw (RuntimeException) 223*cdf0e10cSrcweir { 224*cdf0e10cSrcweir return m_seqWarnings; 225*cdf0e10cSrcweir } 226*cdf0e10cSrcweir 227*cdf0e10cSrcweir 228*cdf0e10cSrcweir /*** 229*cdf0e10cSrcweir * the test methods 230*cdf0e10cSrcweir * 231*cdf0e10cSrcweir ****/ 232*cdf0e10cSrcweir 233*cdf0e10cSrcweir 234*cdf0e10cSrcweir void OPumpTest::testSimple( const Reference < XInterface > &r ) 235*cdf0e10cSrcweir { 236*cdf0e10cSrcweir // jbu todo: add sensible test 237*cdf0e10cSrcweir 238*cdf0e10cSrcweir } 239*cdf0e10cSrcweir 240*cdf0e10cSrcweir class TestListener: public WeakImplHelper1< XStreamListener > 241*cdf0e10cSrcweir { 242*cdf0e10cSrcweir public: 243*cdf0e10cSrcweir sal_Bool m_bStarted; 244*cdf0e10cSrcweir sal_Bool m_bClosed; 245*cdf0e10cSrcweir sal_Bool m_bTerminated; 246*cdf0e10cSrcweir sal_Bool m_bError; 247*cdf0e10cSrcweir sal_Bool m_bDisposed; 248*cdf0e10cSrcweir TestListener() : m_bStarted (sal_False), 249*cdf0e10cSrcweir m_bClosed (sal_False), 250*cdf0e10cSrcweir m_bTerminated ( sal_False ), 251*cdf0e10cSrcweir m_bError( sal_False ), 252*cdf0e10cSrcweir m_bDisposed( sal_False ) 253*cdf0e10cSrcweir {} 254*cdf0e10cSrcweir 255*cdf0e10cSrcweir virtual void SAL_CALL disposing( const EventObject &obj ) throw (::com::sun::star::uno::RuntimeException) 256*cdf0e10cSrcweir { 257*cdf0e10cSrcweir m_bDisposed = sal_True; 258*cdf0e10cSrcweir // printf( "disposing called\n"); 259*cdf0e10cSrcweir } 260*cdf0e10cSrcweir 261*cdf0e10cSrcweir virtual void SAL_CALL started( ) throw (::com::sun::star::uno::RuntimeException) 262*cdf0e10cSrcweir { 263*cdf0e10cSrcweir m_bStarted = sal_True; 264*cdf0e10cSrcweir // printf( "started called\n"); 265*cdf0e10cSrcweir } 266*cdf0e10cSrcweir virtual void SAL_CALL closed( ) throw (::com::sun::star::uno::RuntimeException) 267*cdf0e10cSrcweir { 268*cdf0e10cSrcweir m_bClosed = sal_True; 269*cdf0e10cSrcweir // printf( "closed called\n"); 270*cdf0e10cSrcweir } 271*cdf0e10cSrcweir virtual void SAL_CALL terminated( ) throw (::com::sun::star::uno::RuntimeException) 272*cdf0e10cSrcweir { 273*cdf0e10cSrcweir m_bTerminated = sal_True; 274*cdf0e10cSrcweir // printf( "terminated called\n"); 275*cdf0e10cSrcweir } 276*cdf0e10cSrcweir virtual void SAL_CALL error( const ::com::sun::star::uno::Any& aException ) 277*cdf0e10cSrcweir throw (::com::sun::star::uno::RuntimeException) 278*cdf0e10cSrcweir { 279*cdf0e10cSrcweir m_bError = sal_True; 280*cdf0e10cSrcweir Exception e; 281*cdf0e10cSrcweir aException >>= e; 282*cdf0e10cSrcweir // printf( "error called %s\n", OUStringToOString( e.Message, RTL_TEXTENCODING_ASCII_US).getStr() ); 283*cdf0e10cSrcweir } 284*cdf0e10cSrcweir }; 285*cdf0e10cSrcweir 286*cdf0e10cSrcweir class TestCase 287*cdf0e10cSrcweir { 288*cdf0e10cSrcweir public: 289*cdf0e10cSrcweir TestCase( const Reference< XMultiServiceFactory > & rSMgr, 290*cdf0e10cSrcweir const Reference< XInterface > &r ) : m_rSmgr( rSMgr ), m_pTestListener( 0 ) 291*cdf0e10cSrcweir { 292*cdf0e10cSrcweir m_rControl = Reference<XActiveDataControl>( r, UNO_QUERY ); 293*cdf0e10cSrcweir 294*cdf0e10cSrcweir Reference< XActiveDataSource > rSource ( r, UNO_QUERY ); 295*cdf0e10cSrcweir Reference< XActiveDataSink > rSink( r , UNO_QUERY ); 296*cdf0e10cSrcweir 297*cdf0e10cSrcweir m_rOutSource = Reference< XOutputStream > ( createPipe() ); 298*cdf0e10cSrcweir rSink->setInputStream(Reference< XInputStream> (m_rOutSource,UNO_QUERY)); 299*cdf0e10cSrcweir 300*cdf0e10cSrcweir Reference< XOutputStream > rOutSink( createPipe() ); 301*cdf0e10cSrcweir m_rInSink = Reference< XInputStream > ( rOutSink, UNO_QUERY ); 302*cdf0e10cSrcweir rSource->setOutputStream( rOutSink ); 303*cdf0e10cSrcweir 304*cdf0e10cSrcweir m_pTestListener = new TestListener(); 305*cdf0e10cSrcweir m_pTestListener->acquire(); 306*cdf0e10cSrcweir m_rControl->addListener( m_pTestListener ); 307*cdf0e10cSrcweir } 308*cdf0e10cSrcweir 309*cdf0e10cSrcweir ~TestCase() 310*cdf0e10cSrcweir { 311*cdf0e10cSrcweir if( m_pTestListener ) 312*cdf0e10cSrcweir m_pTestListener->release(); 313*cdf0e10cSrcweir } 314*cdf0e10cSrcweir 315*cdf0e10cSrcweir TestListener *m_pTestListener; 316*cdf0e10cSrcweir Reference< XActiveDataControl > m_rControl; 317*cdf0e10cSrcweir Reference< XOutputStream > m_rOutSource; 318*cdf0e10cSrcweir Reference< XInputStream > m_rInSink; 319*cdf0e10cSrcweir Reference< XMultiServiceFactory > m_rSmgr; 320*cdf0e10cSrcweir 321*cdf0e10cSrcweir private: 322*cdf0e10cSrcweir Reference< XOutputStream > createPipe() 323*cdf0e10cSrcweir { 324*cdf0e10cSrcweir Reference< XOutputStream > rOut( m_rSmgr->createInstance( 325*cdf0e10cSrcweir OUString::createFromAscii( "com.sun.star.io.Pipe" )),UNO_QUERY); 326*cdf0e10cSrcweir return rOut; 327*cdf0e10cSrcweir } 328*cdf0e10cSrcweir }; 329*cdf0e10cSrcweir 330*cdf0e10cSrcweir 331*cdf0e10cSrcweir 332*cdf0e10cSrcweir void OPumpTest::testClose( const Reference< XInterface > &r ) 333*cdf0e10cSrcweir { 334*cdf0e10cSrcweir TestCase t( m_rSmgr, r ); 335*cdf0e10cSrcweir 336*cdf0e10cSrcweir ERROR_ASSERT( ! t.m_pTestListener->m_bStarted , "started too early" ); 337*cdf0e10cSrcweir ERROR_ASSERT( ! t.m_pTestListener->m_bTerminated , "terminiation unexpected" ); 338*cdf0e10cSrcweir ERROR_ASSERT( ! t.m_pTestListener->m_bError, "unexpected error" ); 339*cdf0e10cSrcweir ERROR_ASSERT( ! t.m_pTestListener->m_bClosed, "unexpected clase" ); 340*cdf0e10cSrcweir 341*cdf0e10cSrcweir t.m_rControl->start(); 342*cdf0e10cSrcweir mywait(); 343*cdf0e10cSrcweir 344*cdf0e10cSrcweir ERROR_ASSERT( t.m_pTestListener->m_bStarted , "should have been started already" ); 345*cdf0e10cSrcweir ERROR_ASSERT( ! t.m_pTestListener->m_bTerminated , "terminiation unexpected" ); 346*cdf0e10cSrcweir ERROR_ASSERT( ! t.m_pTestListener->m_bError, "unexpected error" ); 347*cdf0e10cSrcweir ERROR_ASSERT( ! t.m_pTestListener->m_bClosed, "unexpected clase" ); 348*cdf0e10cSrcweir 349*cdf0e10cSrcweir Reference< XStreamListener > rListener( new TestListener() ); 350*cdf0e10cSrcweir t.m_rControl->addListener( rListener ); 351*cdf0e10cSrcweir t.m_rControl->removeListener( rListener ); 352*cdf0e10cSrcweir 353*cdf0e10cSrcweir t.m_rOutSource->closeOutput(); 354*cdf0e10cSrcweir mywait(); 355*cdf0e10cSrcweir ERROR_ASSERT( t.m_pTestListener->m_bStarted , "should have been started already" ); 356*cdf0e10cSrcweir ERROR_ASSERT( ! t.m_pTestListener->m_bTerminated , "should be terminiated already" ); 357*cdf0e10cSrcweir ERROR_ASSERT( ! t.m_pTestListener->m_bError, "unexpected error" ); 358*cdf0e10cSrcweir ERROR_ASSERT( t.m_pTestListener->m_bClosed, "should be closed already" ); 359*cdf0e10cSrcweir } 360*cdf0e10cSrcweir 361*cdf0e10cSrcweir void OPumpTest::testTerminate( const Reference< XInterface > &r ) 362*cdf0e10cSrcweir { 363*cdf0e10cSrcweir TestCase t( m_rSmgr, r ); 364*cdf0e10cSrcweir 365*cdf0e10cSrcweir ERROR_ASSERT( ! t.m_pTestListener->m_bStarted , "started too early" ); 366*cdf0e10cSrcweir ERROR_ASSERT( ! t.m_pTestListener->m_bTerminated , "terminiation unexpected" ); 367*cdf0e10cSrcweir ERROR_ASSERT( ! t.m_pTestListener->m_bError, "unexpected error" ); 368*cdf0e10cSrcweir ERROR_ASSERT( ! t.m_pTestListener->m_bClosed, "unexpected clase" ); 369*cdf0e10cSrcweir 370*cdf0e10cSrcweir t.m_rControl->start(); 371*cdf0e10cSrcweir mywait(); 372*cdf0e10cSrcweir 373*cdf0e10cSrcweir ERROR_ASSERT( t.m_pTestListener->m_bStarted , "should have been started already" ); 374*cdf0e10cSrcweir ERROR_ASSERT( ! t.m_pTestListener->m_bTerminated , "terminiation unexpected" ); 375*cdf0e10cSrcweir ERROR_ASSERT( ! t.m_pTestListener->m_bError, "unexpected error" ); 376*cdf0e10cSrcweir ERROR_ASSERT( ! t.m_pTestListener->m_bClosed, "unexpected clase" ); 377*cdf0e10cSrcweir 378*cdf0e10cSrcweir t.m_rControl->terminate(); 379*cdf0e10cSrcweir 380*cdf0e10cSrcweir mywait(); 381*cdf0e10cSrcweir ERROR_ASSERT( t.m_pTestListener->m_bStarted , "should have been started already" ); 382*cdf0e10cSrcweir ERROR_ASSERT( t.m_pTestListener->m_bTerminated , "should be terminiated already" ); 383*cdf0e10cSrcweir // terminte leads to an error, that is no surprise, in fact 384*cdf0e10cSrcweir // one can't tell wether the error occurs because of the terminate 385*cdf0e10cSrcweir // call or for some other reason ! 386*cdf0e10cSrcweir // ERROR_ASSERT( ! t.m_pTestListener->m_bError, "unexpected error" ); 387*cdf0e10cSrcweir ERROR_ASSERT( t.m_pTestListener->m_bClosed, "should be closed already" ); 388*cdf0e10cSrcweir } 389*cdf0e10cSrcweir 390*cdf0e10cSrcweir void OPumpTest::testFunction( const Reference< XInterface > &r ) 391*cdf0e10cSrcweir { 392*cdf0e10cSrcweir TestCase t( m_rSmgr, r ); 393*cdf0e10cSrcweir 394*cdf0e10cSrcweir t.m_rControl->start(); 395*cdf0e10cSrcweir 396*cdf0e10cSrcweir t.m_rOutSource->writeBytes( Sequence< sal_Int8 > ( 5 ) ); 397*cdf0e10cSrcweir 398*cdf0e10cSrcweir Sequence< sal_Int8 > dummy; 399*cdf0e10cSrcweir ERROR_ASSERT( 5 == t.m_rInSink->readBytes( dummy , 5 ), "couldn't read the expected number of bytes" ); 400*cdf0e10cSrcweir 401*cdf0e10cSrcweir t.m_rOutSource->closeOutput(); 402*cdf0e10cSrcweir mywait(); 403*cdf0e10cSrcweir 404*cdf0e10cSrcweir ERROR_ASSERT( t.m_pTestListener->m_bStarted , "should have been started already" ); 405*cdf0e10cSrcweir ERROR_ASSERT( ! t.m_pTestListener->m_bTerminated , "should be terminiated already" ); 406*cdf0e10cSrcweir ERROR_ASSERT( ! t.m_pTestListener->m_bError, "unexpected error" ); 407*cdf0e10cSrcweir ERROR_ASSERT( t.m_pTestListener->m_bClosed, "should be closed already" ); 408*cdf0e10cSrcweir } 409*cdf0e10cSrcweir 410*cdf0e10cSrcweir void OPumpTest::testWrongUsage( const Reference< XInterface > &r ) 411*cdf0e10cSrcweir { 412*cdf0e10cSrcweir Reference< XActiveDataSource > rSource ( r, UNO_QUERY ); 413*cdf0e10cSrcweir Reference< XActiveDataSink > rSink( r , UNO_QUERY ); 414*cdf0e10cSrcweir Reference< XActiveDataControl > rControl( r, UNO_QUERY ); 415*cdf0e10cSrcweir 416*cdf0e10cSrcweir Reference< XInputStream > rIn( m_rSmgr->createInstance( 417*cdf0e10cSrcweir OUString::createFromAscii( "com.sun.star.io.DataInputStream" )),UNO_QUERY); 418*cdf0e10cSrcweir Reference< XOutputStream > rOut( m_rSmgr->createInstance( 419*cdf0e10cSrcweir OUString::createFromAscii( "com.sun.star.io.DataOutputStream" )),UNO_QUERY); 420*cdf0e10cSrcweir 421*cdf0e10cSrcweir rSink->setInputStream( rIn ); 422*cdf0e10cSrcweir rSource->setOutputStream( rOut ); 423*cdf0e10cSrcweir 424*cdf0e10cSrcweir rControl->start(); 425*cdf0e10cSrcweir 426*cdf0e10cSrcweir mywait(); 427*cdf0e10cSrcweir } 428*cdf0e10cSrcweir 429*cdf0e10cSrcweir Reference< XInterface > SAL_CALL OPumpTest_CreateInstance( const Reference< XMultiServiceFactory > & rSMgr ) throw( Exception ) 430*cdf0e10cSrcweir { 431*cdf0e10cSrcweir return *new OPumpTest( rSMgr ); 432*cdf0e10cSrcweir } 433*cdf0e10cSrcweir 434*cdf0e10cSrcweir Sequence<OUString> OPumpTest_getSupportedServiceNames(void) throw() 435*cdf0e10cSrcweir { 436*cdf0e10cSrcweir OUString s = OPumpTest_getServiceName(); 437*cdf0e10cSrcweir Sequence< OUString > seq( &s , 1 ); 438*cdf0e10cSrcweir return seq; 439*cdf0e10cSrcweir 440*cdf0e10cSrcweir } 441*cdf0e10cSrcweir OUString OPumpTest_getServiceName() throw() 442*cdf0e10cSrcweir { 443*cdf0e10cSrcweir return OUString( RTL_CONSTASCII_USTRINGPARAM( "test.com.sun.star.io.Pump" ) ); 444*cdf0e10cSrcweir } 445*cdf0e10cSrcweir 446*cdf0e10cSrcweir OUString OPumpTest_getImplementationName() throw() 447*cdf0e10cSrcweir { 448*cdf0e10cSrcweir return OUString( RTL_CONSTASCII_USTRINGPARAM( "test.com.sun.star.comp.io.Pump") ); 449*cdf0e10cSrcweir } 450