Fix for bug 2283 (RVCT 4.0 support is missing from PDK 3.0.h)
Have multiple extension sections in the bld.inf, one for each version
of the compiler. The RVCT version building the tools will build the
runtime libraries for its version, but make sure we extract all the other
versions from zip archives. Also add the archive for RVCT4.
// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
// All rights reserved.
// This component and the accompanying materials are made available
// under the terms of the License "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:
// Test opening of hidden, replaced and newly added files belonging to multiple ROFS.
//
//
#include <e32std.h>
#include <e32std_private.h>
#include <e32test.h>
#include <f32file.h>
#include "utl.h"
GLREF_D RFs TheFs;
RTest test( _L("T_ROFSMULTIPLE") );
// Required to test multiple ROFS
_LIT( KTestHidden1, "Multiple\\hidden1.txt" );
_LIT( KTestHidden2, "Multiple\\hidden2.txt" );
_LIT( KTestHidden3, "Multiple\\hidden3.txt" );
_LIT( KTestNew1, "Multiple\\new1.txt" );
_LIT( KTestNew2, "Multiple\\new2.txt" );
_LIT( KTestNew3, "Multiple\\new3.txt" );
_LIT( KTestNew4, "Multiple\\new4.txt" );
_LIT( KTestReplaceMe1, "Multiple\\replaceme1.txt" );
_LIT( KTestReplaceMe2, "Multiple\\replaceme2.txt" );
_LIT( KTestReplaceMe3, "Multiple\\replaceme3.txt" );
_LIT( KTestReplaceMe4, "Multiple\\replaceme4.txt" );
_LIT( KTestReplaceMe5, "Multiple\\replaceme5.txt" );
_LIT( KTestRom, "Multiple\\rom.txt" );
_LIT( KTestRomHide, "Multiple\\romhide.txt" );
_LIT( KTestRomReplace, "Multiple\\romreplace.txt" );
_LIT( KTestRomReplaceFat, "Multiple\\romreplacefat.txt" );
_LIT8( KReplaceMe8FileContent1, "rofs1" );
_LIT8( KReplaceMe8FileContent2, "rofs2" );
_LIT8( KReplaceMe8FileContent3, "rofs3" );
_LIT8( KReplaceMe8FileContent5, "cfat5" );
_LIT( KRootFileMultiple, "Multiple\\multirofs.txt");
_LIT( KDriveBase, " :\\" );
const TInt KNewlyAddedFilesCount = 5;
const TDesC* const newlyAddedFilesArray[5] =
{
&KTestNew1, &KTestNew2, &KTestNew3, &KTestNew4, &KTestRom
};
const TInt KReplacedFilesCount = 7;
const TDesC* const replacedFilesArray[7] =
{
&KTestReplaceMe1, &KTestReplaceMe2, &KTestReplaceMe3, &KTestReplaceMe4, &KTestRomReplace, &KTestReplaceMe5, &KTestRomReplaceFat
};
const TInt KHiddenFilesCount = 4;
const TDesC* const hiddenFilesArray[4] =
{
&KTestHidden1, &KTestHidden2, &KTestHidden3, &KTestRomHide
};
LOCAL_C void TestMultipleRofsL(TInt aDriveToTest)
//
// Test multiple Rofs
//
{
TFileName name(KDriveBase);
name[0] = TText('A' + aDriveToTest);
TInt i;
// hidden
test.Next( _L("Test opening hidden files.") );
for( i = 0; i < KHiddenFilesCount; i++ )
{
name.SetLength( 3 ); // trim back to drive specifier
name.Append( *hiddenFilesArray[i] );
test.Printf( _L("Opening file %S\n"), &name );
RFile file;
TInt r = file.Open( TheFs, name, EFileRead );
TEST_FOR_MATCH( r, KErrNotFound );
file.Close();
}
// newly added
test.Next( _L("Test opening newly added files.") );
for( i = 0; i < KNewlyAddedFilesCount; i++ )
{
name.SetLength( 3 );
name.Append( *newlyAddedFilesArray[i] );
test.Printf( _L("Opening file %S\n"), &name );
RFile file;
TInt r = file.Open( TheFs, name, EFileRead );
TEST_FOR_ERROR( r );
file.Close();
}
// replaced
test.Next( _L("Test opening replaced files.") );
for( i = 0; i < KReplacedFilesCount; i++ )
{
name.SetLength( 3 );
name.Append( *replacedFilesArray[i] );
test.Printf( _L("Opening file %S\n"), &name );
RFile file;
TInt r = file.Open( TheFs, name, EFileRead );
TEST_FOR_ERROR( r );
TBuf8<5> buf;
r = file.Read( buf );
TEST_FOR_ERROR( r );
if ( i == 0 )
test(buf == KReplaceMe8FileContent2);
else if (i<4) // i == 1 -> 3
test(buf == KReplaceMe8FileContent3);
else if (i==4)
test(buf == KReplaceMe8FileContent1);
else
test(buf == KReplaceMe8FileContent5);
file.Close();
}
}
LOCAL_C void TestFilesInRomL(TInt aDriveToTest)
//
// Test whether files in ROFS appear to be in ROM area of Z:
//
{
test.Next( _L("Test if file is in ROM area of Z:") );
TFileName name(KDriveBase);
name[0] = TText('A' + aDriveToTest);
TInt i;
for( i = 0; i < KNewlyAddedFilesCount; i++ )
{
name.SetLength( 3 ); // trim back to drive specifier
name.Append( *newlyAddedFilesArray[i] );
test.Printf( _L("Testing newly added file %S\n"), &name );
if (i==KNewlyAddedFilesCount)
test( NULL != TheFs.IsFileInRom( name ) );
else
test( NULL == TheFs.IsFileInRom( name ) );
}
test.Next( _L("Test if replaced file is in ROM area of Z:") );
for( i = 0; i < KReplacedFilesCount; i++ )
{
name.SetLength( 3 );
name.Append( *replacedFilesArray[i] );
test.Printf( _L("Testing replaced file %S\n"), &name );
test( NULL == TheFs.IsFileInRom( name ) );
}
test.Next( _L("Test if hidden file is in ROM area of Z:") );
for( i = 0; i < KHiddenFilesCount; i++ )
{
name.SetLength( 3 );
name.Append( *hiddenFilesArray[i] );
test.Printf( _L("Testing hidden file %S\n"), &name );
test( NULL == TheFs.IsFileInRom( name ) );
}
}
LOCAL_C void TestReadFileSectionL(TInt aDriveToTest)
//
// Test reading data from a file without opening it.
//
{
test.Next( _L("Testing ReadFileSection()."));
TBuf8<12> testDes;
TInt r;
TFileName name(KDriveBase);
name[0] = TText('A' + aDriveToTest);
TInt i;
for( i = 0; i < KNewlyAddedFilesCount; i++ )
{
name.SetLength( 3 ); // trim back to drive specifier
name.Append( *newlyAddedFilesArray[i] );
r=TheFs.ReadFileSection(name,0,testDes,3);
test(r==KErrNone);
test(testDes.Length()==3);
test(testDes==_L8("hel"));
name.SetLength( 3 );
name.Append( *newlyAddedFilesArray[i] );
r=TheFs.ReadFileSection(name,0,testDes,4);
test(r==KErrNone);
test(testDes.Length()==4);
test(testDes==_L8("hell"));
name.SetLength( 3 );
name.Append( *newlyAddedFilesArray[i] );
r=TheFs.ReadFileSection(name,1,testDes,4);
test(r==KErrNone);
test(testDes.Length()==4);
test(testDes==_L8("ello"));
}
test.Next( _L("Testing ReadFileSection() on replaced files."));
for( i = 0; i < KReplacedFilesCount; i++ )
{
name.SetLength( 3 );
name.Append( *replacedFilesArray[i] );
r=TheFs.ReadFileSection(name,4,testDes,1);
test(r==KErrNone);
test(testDes.Length()==1);
if ( i == 0 )
test(testDes==_L8("2"));
else if (i<4)
test(testDes==_L8("3"));
else if (i==4)
test(testDes==_L8("1"));
else
test(testDes==_L8("5"));
}
test.Next( _L("Testing ReadFileSection() on hidden files."));
for( i = 0; i < KHiddenFilesCount; i++ )
{
name.SetLength( 3 );
name.Append( *hiddenFilesArray[i] );
r=TheFs.ReadFileSection(name,0,testDes,1);
test(r==KErrNotFound);
}
}
LOCAL_C void TestEntryL(TInt aDriveToTest)
//
// Test accessing the entry details for a hidden file.
//
{
test.Next( _L("Test accessing the entry details for replaced files.") );
TFileName name(KDriveBase);
name[0] = TText('A' + aDriveToTest);
TEntry entry;
TInt r;
TTime dirtimes[4] = { TDateTime(2005,EDecember,9,2,0,3,0), // 10/12/2005
TDateTime(2005,EDecember,14,4,30,33,0), // 15/12/2005
TDateTime(2006,EJanuary,1,15,45,37,0), // 02/01/2006
TDateTime(2006,EAugust,10,17,47,04,0) }; // 11/08/2006
TInt i;
for( i = 0; i < KReplacedFilesCount; i++ )
{
name.SetLength( 3 ); // trim back to drive specifier
name.Append( *replacedFilesArray[i] );
r = TheFs.Entry(name, entry);
test(r==KErrNone);
test (entry.iName==replacedFilesArray[i]->Right(entry.iName.Length()));
if ( i == 0 )
test(entry.iModified==dirtimes[1]);
else if (i<4)
test(entry.iModified==dirtimes[2]);
else if (i==4)
test(entry.iModified==dirtimes[0]);
else
test(entry.iModified==dirtimes[3]);
}
test.Next( _L("Test accessing the entry details for hidden files.") );
for ( i = 0; i < KHiddenFilesCount; i++ )
{
name.SetLength( 3 );
name.Append( *hiddenFilesArray[i] );
r = TheFs.Entry(name, entry);
test(r==KErrNotFound);
}
}
//************************
// Entry point
void DoTestL(TInt aDriveToTest)
{
test.Title();
test.Start( _L("Testing opening hidden, replaced and newly added files belonging to multiple ROFS.") );
test.Printf( _L("Looking for multiple ROFS..\n"));
TBool multipleRofs = EFalse;
TFileName name(KDriveBase);
name[0] = TText('A' + aDriveToTest);
name.SetLength( 3 ); // trim back to drive specifier
name.Append( KRootFileMultiple );
RFile file;
test.Printf( _L("Attempt to open file %S..\n"), &name );
TInt r = file.Open( TheFs, name, EFileRead );
if(r==KErrNone)
{
multipleRofs=ETrue;
file.Close();
test.Printf( _L("Multiple ROFS found. %S is present.\n"), &name);
}
else if(r==KErrNotFound)
{
test.Printf( _L("No multiple ROFS found. %S is not present.\n"), &name);
}
if (multipleRofs)
{
TestMultipleRofsL(aDriveToTest);
TestFilesInRomL(aDriveToTest);
TestReadFileSectionL(aDriveToTest);
TestEntryL(aDriveToTest);
}
test.End();
}