kerneltest/f32test/server/t_fman.cpp
changeset 247 d8d70de2bd36
parent 109 b3a1d9898418
child 259 57b9594f5772
--- a/kerneltest/f32test/server/t_fman.cpp	Tue Jul 06 15:50:07 2010 +0300
+++ b/kerneltest/f32test/server/t_fman.cpp	Wed Aug 18 11:08:29 2010 +0300
@@ -53,6 +53,7 @@
 // Called back after each FMan tick
 //
 	{
+    (void) MFileManObserver::NotifyFileManEnded();
 	TInt lastError=iFileMan->GetLastError();
 	if (lastError!=KErrNone && lastError!=KErrBadName)
 		{
@@ -3108,7 +3109,6 @@
 	CFileMan* iFileMan;
 	};
 
-
 CFileManObserverOverWrite::CFileManObserverOverWrite(CFileMan* aFileMan)
 //
 // Constructor
@@ -3137,6 +3137,59 @@
 	return(MFileManObserver::EContinue);
 	}
 
+class CFileManObserverBytesCopied : public CBase, public MFileManObserver
+    {
+public:
+    CFileManObserverBytesCopied(CFileMan* aFileMan);
+    TControl NotifyFileManEnded();
+    TControl NotifyFileManOperation();
+    TInt iBytesToBeCopied;
+private:
+    CFileMan* iFileMan;
+    TInt iBytesCopied;
+    };
+
+CFileManObserverBytesCopied::CFileManObserverBytesCopied(CFileMan* aFileMan)
+//
+// Constructor
+//
+    {
+    __DECLARE_NAME(_S("CFileManObserverBytesCopied"));
+    iFileMan=aFileMan;
+    iBytesCopied=0;
+    }
+
+MFileManObserver::TControl CFileManObserverBytesCopied::NotifyFileManOperation()
+//
+// Observer for testBytesCopied tests
+//
+    {
+    TFileName target;
+    iFileMan->GetCurrentTarget(target);
+    TInt match = target.MatchF(_L("?:\\bytesTransferred"));
+    if(match != 0)
+        {
+        RDebug::Print(_L("CFileManObserverBytesCopied::NotifyFileManOperation - target %s, match %d"),target.PtrZ(),match);
+        return MFileManObserver::EAbort;
+        }
+    
+    iBytesCopied += iFileMan->BytesTransferredByCopyStep();
+    return(MFileManObserver::EContinue);
+    }
+
+MFileManObserver::TControl CFileManObserverBytesCopied::NotifyFileManEnded()
+//
+// Observer for testBytesCopied  tests
+//
+    {
+    if(iBytesCopied!=iBytesToBeCopied)
+        return (MFileManObserver::EAbort);
+    
+    return(MFileManObserver::EContinue);
+    }
+
+
+
 LOCAL_C void TestOverWrite()
 //
 // Test overwrite for copy and rename
@@ -4306,6 +4359,79 @@
 	RmDir(_L("C:\\TestDEF130678\\"));	
 	}
 
+void TestBytesTransferredByCopyStep()
+    {
+    //
+    // Test BytesCopied
+    //
+    test.Next(_L("TestBytesTransferredByCopyStep"));
+    (void)gFileMan->Delete(_L("\\bytesTransferred"));
+    
+    RFile tempFile;
+    TFileName tempname;
+    TInt r = tempFile.Temp(TheFs,_L("\\"),tempname,EFileWrite);
+    test_KErrNone(r);
+    r = tempFile.SetSize(50);
+    test_KErrNone(r);
+    tempFile.Flush();
+    tempFile.Close();
+
+    CFileManObserverBytesCopied* fManObserver=new(ELeave) CFileManObserverBytesCopied(gFileMan);
+    CleanupStack::PushL(fManObserver);
+    gFileMan->SetObserver(fManObserver);
+    fManObserver->iBytesToBeCopied=50;
+    
+    if (!gAsynch)
+        {
+        r=gFileMan->Copy(tempname,_L("\\bytesTransferred"),CFileMan::EOverWrite);
+        test_KErrNone(r);
+        }
+    else
+        {
+        TInt r=gFileMan->Copy(tempname,_L("\\bytesTransferred"),CFileMan::EOverWrite,gStat);
+        test_KErrNone(r);
+        WaitForSuccess();
+        }
+    
+    (void)gFileMan->Delete(_L("\\bytesTransferred"));
+    (void)TheFs.Delete(tempname);
+    CleanupStack::PopAndDestroy();
+    }
+
+void TestGetMoreErrorInfo()
+    {
+    //
+     // Test GetMoreErrorInfo
+     //
+     test.Next(_L("TestGetMoreErrorInfo"));
+
+     CFileManObserver* fManObserver=new(ELeave) CFileManObserver(gFileMan);
+     CleanupStack::PushL(fManObserver);
+     gFileMan->SetObserver(fManObserver);
+     
+     if (!gAsynch)
+         {
+         TInt r=gFileMan->Copy(_L("\\SRC"),_L("\\TRG"),0);
+         if(r!=KErrNone) //correct behaviour
+             {
+             TFileManError error = gFileMan->GetMoreInfoAboutError();
+             test_Equal(error,(TFileManError)ENoFilesProcessed);
+             }
+         else { test_Equal(r,!KErrNone); }
+         }
+     else
+         {
+         TInt r=gFileMan->Copy(_L("\\SRC"),_L("\\TRG"),0,gStat);
+         if(r!=KErrNone) //correct behaviour
+             {
+             TFileManError error = gFileMan->GetMoreInfoAboutError();
+             test_Equal(error,(TFileManError)ENoFilesProcessed);
+             }
+         else { test_Equal(r,!KErrNone); }
+         }
+    CleanupStack::PopAndDestroy();
+    }
+
 GLDEF_C void CallTestsL()
 //
 // Do tests
@@ -4401,6 +4527,8 @@
 	TestCopyAllCancel();
 	
 	TestDEF130678(); // Test CFileMan::Move does not leak any memory
+	TestBytesTransferredByCopyStep();
+	TestGetMoreErrorInfo();
 #ifndef __WINS__
 	RThread t;
 	TThreadStackInfo stack;
@@ -4408,6 +4536,7 @@
 	TestStackUsage(0, stack);
 #endif
 
+	
 	Cleanup();
 	DeleteTestDirectory();
 	test_KErrNone(TheFs.RmDir(_L("\\F32-TST\\")));