--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/AvKon/tsrc/bc/bctestlauncher/src/bcteststrmlogger.cpp Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,222 @@
+/*
+* Copyright (c) 2006-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Handles log writing.
+*
+*/
+
+
+#include <f32file.h>
+#include <eikenv.h>
+
+#include "bcteststrmlogger.h"
+
+//
+// helper class
+//
+class CLogFile: public CBase
+ {
+public:
+ static CLogFile& CreateLC( const TDesC& aFileName );
+ virtual ~CLogFile();
+ RFile& operator()();
+
+private:
+ RFile iFile;
+ };
+
+//=====================Helper class Member functions==========================
+
+// ---------------------------------------------------------------------------
+// CLogFile::CreateLC()
+// ---------------------------------------------------------------------------
+//
+CLogFile& CLogFile::CreateLC( const TDesC& aFileName )
+ {
+ CLogFile* self = new( ELeave ) CLogFile;
+ CleanupStack::PushL( self );
+
+ RFs& fs = CEikonEnv::Static()->FsSession();
+ if ( self->iFile.Open( fs, aFileName, EFileWrite | EFileShareAny )
+ != KErrNone )
+ {
+ self->iFile.Create( fs, aFileName, EFileWrite | EFileShareAny );
+ }
+
+ TInt pos=0; // this must be 0
+ self->iFile.Seek( ESeekEnd, pos );
+ return *self;
+ }
+
+// ---------------------------------------------------------------------------
+// CLogFile::~CLogFile()
+// ---------------------------------------------------------------------------
+//
+CLogFile::~CLogFile()
+ {
+ iFile.Close();
+ }
+
+// ---------------------------------------------------------------------------
+// CLogFile::operator()
+// ---------------------------------------------------------------------------
+//
+RFile& CLogFile::operator()()
+ {
+ return iFile;
+ }
+
+//=====================Member functions=======================================
+
+// ---------------------------------------------------------------------------
+// CBCTestStreamLogger::BeginLC()
+// ---------------------------------------------------------------------------
+//
+CBCTestStreamLogger& CBCTestStreamLogger::BeginLC( const TDesC& aFileName )
+ {
+ CBCTestStreamLogger* self = new( ELeave ) CBCTestStreamLogger();
+ CleanupStack::PushL( self );
+ self->ConstructL( aFileName );
+ return *self;
+ }
+
+// ---------------------------------------------------------------------------
+// CBCTestStreamLogger::CBCTestStreamLogger()
+// ---------------------------------------------------------------------------
+//
+CBCTestStreamLogger::CBCTestStreamLogger()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CBCTestStreamLogger::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CBCTestStreamLogger::ConstructL( const TDesC& aFileName )
+ {
+ iFileName = aFileName;
+ }
+
+// ---------------------------------------------------------------------------
+// CBCTestStreamLogger::~CBCTestStreamLogger()
+// ---------------------------------------------------------------------------
+//
+CBCTestStreamLogger::~CBCTestStreamLogger()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CBCTestStreamLogger::Suicide()
+// ---------------------------------------------------------------------------
+//
+void CBCTestStreamLogger::Suicide()
+ {
+ CleanupStack::PopAndDestroy(); //self
+ }
+
+// ---------------------------------------------------------------------------
+// CBCTestStreamLogger::operator<<(const TDesC& aText)
+// ---------------------------------------------------------------------------
+//
+CBCTestStreamLogger& CBCTestStreamLogger::operator<<( const TDesC& aText )
+ {
+ CLogFile& file = CLogFile::CreateLC( iFileName );
+ HBufC8* text = NULL;
+ TRAPD( result, text = HBufC8::NewL( aText.Length() ) );
+ if ( result != KErrNone )
+ {
+ User::Leave( result );
+ }
+ TPtr8 textPtr = text->Des();
+ textPtr.Copy( aText );
+ file().Write( *text );
+ delete text;
+ CleanupStack::PopAndDestroy(); //file
+
+ return *this;
+ }
+
+// ---------------------------------------------------------------------------
+// CBCTestStreamLogger::operator<<(TInt aNum)
+// ---------------------------------------------------------------------------
+//
+CBCTestStreamLogger& CBCTestStreamLogger::operator<<( TInt aNum )
+ {
+ CLogFile& file = CLogFile::CreateLC( iFileName );
+
+ TInt i = 1;
+ for( TInt v = aNum; v != 0; ++i, v /= 10 )
+ {
+ }
+ HBufC* text = NULL;
+ TRAPD( result, text = HBufC::NewL( i ) );
+ TPtr textPtr = text->Des();
+
+ _LIT(KFmt, "%d");
+ textPtr.Format( KFmt, aNum );
+ HBufC8* text8 = NULL;
+ TRAP( result, text8 = HBufC8::NewL( textPtr.Length() ) );
+ if ( result != KErrNone )
+ {
+ User::Leave( result );
+ }
+ TPtr8 textPtr8 = text8->Des();
+ textPtr8.Copy(*text);
+
+ file().Write( *text8 );
+ delete text;
+ delete text8;
+ CleanupStack::PopAndDestroy(); //file
+
+ return *this;
+ }
+
+// ---------------------------------------------------------------------------
+// CBCTestStreamLogger::CRL()
+// ---------------------------------------------------------------------------
+//
+CBCTestStreamLogger& CBCTestStreamLogger::CRL()
+ {
+ CLogFile& file = CLogFile::CreateLC( iFileName );
+ TBuf8<2> enter;
+ enter.Append( 13 );
+ enter.Append( 10 );
+ file().Write( enter );
+ CleanupStack::PopAndDestroy(); //file
+ return *this;
+ }
+
+// ---------------------------------------------------------------------------
+// CBCTestStreamLogger::operator<<( CBCTestStreamLogger::Manipulator aOp )
+// ---------------------------------------------------------------------------
+//
+CBCTestStreamLogger& CBCTestStreamLogger::operator<<(
+ CBCTestStreamLogger::Manipulator aOp )
+ {
+ return aOp( *this );
+ }
+
+namespace BCTest
+ {
+ CBCTestStreamLogger& End( CBCTestStreamLogger& self )
+ {
+ self.Suicide();
+ return self;
+ }
+
+ CBCTestStreamLogger& EndLine( CBCTestStreamLogger& self )
+ {
+ self.CRL();
+ return self;
+ }
+ }