os/kernelhwsrv/kerneltest/f32test/server/t_dlocl.cpp
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
     1 // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
     2 // All rights reserved.
     3 // This component and the accompanying materials are made available
     4 // under the terms of the License "Eclipse Public License v1.0"
     5 // which accompanies this distribution, and is available
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 //
     8 // Initial Contributors:
     9 // Nokia Corporation - initial contribution.
    10 //
    11 // Contributors:
    12 //
    13 // Description:
    14 // f32test\server\t_dlocl.cpp
    15 // Tests UserSvr::ChangeLocale() function
    16 // 
    17 //
    18 
    19 #define __E32TEST_EXTENSION__
    20 
    21 #include <e32std.h>
    22 #include <e32std_private.h>
    23 #include <e32test.h>
    24 #include <f32file.h>
    25 #include <e32svr.h>
    26 #include <collate.h>
    27 
    28 #include "t_server.h"
    29 
    30 LOCAL_D TFindLibrary fLib;
    31 
    32 typedef TInt (*TLibEntry)(TInt);
    33 typedef TInt (*TLibEntry2)();
    34 
    35 const TBool KEY_DOWN=EFalse;
    36 const TBool EXPECT_KEY_PRESS=ETrue;
    37 
    38 RTest test(_L("T_DLOCL"));
    39 
    40 _LIT(ELOCL_DEFAULT, "");
    41 _LIT(ELOCLGE, "T_LOCLGE");
    42 _LIT(ELOCLUS, "T_LOCLUS");
    43 _LIT(ELOCLUS1, "T_LOCLUS1");
    44 _LIT(ELOCLUS2, "T_LOCLUS2");
    45 _LIT(EKDATA, "EKDATA");
    46 _LIT(DUMMYDLL, "EDISP");
    47 _LIT(KColonColon, "::");
    48 _LIT(KDLLExtension, ".DLL");
    49 
    50 GLDEF_D CKeyTranslator *KeyTranslator=CKeyTranslator::New();
    51 LOCAL_D CCaptureKeys *CaptureKeys;
    52 
    53 void testConv(const TDesC& aDes,TBool aKeyup,TBool aRet,TUint aScanCode,TUint aKeyCode,TInt aModifiers)
    54     {
    55 
    56     TKeyData keyData;
    57     TBool ret=KeyTranslator->TranslateKey(aScanCode, aKeyup,*CaptureKeys,keyData);
    58     test.Next(aDes);
    59     test(ret==aRet);
    60     test((keyData.iKeyCode==aKeyCode));
    61     test((keyData.iModifiers==aModifiers));
    62     }
    63 
    64 void testChangeKeyData()
    65     {
    66     TName pn(RProcess().Name());
    67     pn+=KColonColon;
    68     TFullName n;
    69     CaptureKeys=new CCaptureKeys();
    70     CaptureKeys->Construct();
    71     test.Printf(_L("Test default key data\n"));
    72     testConv(_L("\nFirst Special key down"),KEY_DOWN,EXPECT_KEY_PRESS,ESpecialKeyBase,ESpecialKeyBase,0);
    73 
    74     RLibrary testLib;
    75     TInt res=testLib.Load(EKDATA);
    76     test(res==KErrNone);
    77     THandleInfo handleInfo;
    78     testLib.HandleInfo(&handleInfo);
    79     test(handleInfo.iNumOpenInThread==2);
    80     testLib.Close();
    81 
    82     test.Printf(_L("Change to unknown dll \n"));                // Test with non keydata type dll
    83     res=KeyTranslator->ChangeKeyData(DUMMYDLL);
    84     test(res==KErrArgument);
    85     
    86     res=testLib.Load(EKDATA);
    87     test(res==KErrNone);
    88     testLib.HandleInfo(&handleInfo);
    89     test(handleInfo.iNumOpenInThread==2);
    90     testLib.Close();
    91 
    92     res=testLib.Load(DUMMYDLL);
    93     test(res==KErrNone);
    94     testLib.HandleInfo(&handleInfo);
    95     test(handleInfo.iNumOpenInThread==1);
    96     testLib.Close();
    97 
    98     fLib.Find(_L("*"));
    99     while (fLib.Next(n)==KErrNone)
   100         {
   101         TName findname=pn;
   102         findname+=DUMMYDLL;
   103         test.Printf(_L("  %S\n"),&n);        
   104         test(n.FindF(findname) == KErrNotFound);
   105         }
   106     //
   107     test.Printf(_L("Change to EKDATA.dll\n"));
   108     res=KeyTranslator->ChangeKeyData(EKDATA);
   109     test(res==KErrNone);
   110     
   111     res=testLib.Load(EKDATA);
   112     test(res==KErrNone);
   113     testLib.HandleInfo(&handleInfo);
   114     test(handleInfo.iNumOpenInThread==2);
   115     testLib.Close();
   116     res=testLib.Load(DUMMYDLL);
   117     test(res==KErrNone);
   118     testLib.HandleInfo(&handleInfo);
   119     test(handleInfo.iNumOpenInThread==1);
   120     testLib.Close();
   121 
   122     fLib.Find(_L("*"));
   123     while (fLib.Next(n)==KErrNone)
   124         {
   125         TName findname=pn;
   126         findname+=EKDATA;
   127         test.Printf(_L("  %S\n"),&n);        
   128         if(n.FindF(findname) != KErrNotFound)
   129             break;
   130         }
   131     //The test below fails if we use Secure APIs
   132     //test(n.FindF(EKDATA) == KErrNotSupported);
   133     testConv(_L("\nFirst Special key down"),KEY_DOWN,EXPECT_KEY_PRESS,ESpecialKeyBase,ESpecialKeyBase,0);
   134 
   135     test.Printf(_L("Change back to Default KeyData\n"));
   136     res=KeyTranslator->ChangeKeyData(_L(""));
   137     test(res==KErrNone);
   138     
   139     res=testLib.Load(EKDATA);
   140     test(res==KErrNone);
   141     testLib.HandleInfo(&handleInfo);
   142     test(handleInfo.iNumOpenInThread==2);
   143     testLib.Close();
   144 
   145     res=testLib.Load(DUMMYDLL);
   146     test(res==KErrNone);
   147     testLib.HandleInfo(&handleInfo);
   148     test(handleInfo.iNumOpenInThread==1);
   149     testLib.Close();
   150 
   151     fLib.Find(_L("*"));
   152     while (fLib.Next(n)==KErrNone)
   153         {
   154         TName findname=pn;
   155         findname+=DUMMYDLL;
   156         test.Printf(_L("  %S\n"),&n);        
   157         test(n.FindF(findname) == KErrNotFound);
   158         }
   159     testConv(_L("\nFirst Special key down"),KEY_DOWN,EXPECT_KEY_PRESS,ESpecialKeyBase,ESpecialKeyBase,0);
   160     delete CaptureKeys;
   161     }
   162 
   163 void testUS(const TLocale& aLocale)
   164     {
   165 //#ifdef __WINS__
   166     test(aLocale.CountryCode()==1);
   167     test(aLocale.DateFormat()==EDateAmerican);
   168     test(aLocale.TimeFormat()==ETime12);
   169     test(aLocale.CurrencySymbolPosition()==ELocaleBefore);
   170     test(aLocale.CurrencySpaceBetween()==FALSE);
   171     test(aLocale.CurrencyDecimalPlaces()==2);
   172     test(aLocale.CurrencyNegativeInBrackets()==EFalse);
   173     test(aLocale.CurrencyTriadsAllowed()==TRUE);
   174     test(aLocale.ThousandsSeparator()==',');
   175     test(aLocale.DecimalSeparator()=='.');
   176     test(aLocale.DateSeparator(0)==0);
   177     test(aLocale.DateSeparator(1)=='/');
   178     test(aLocale.DateSeparator(2)=='/');
   179     test(aLocale.DateSeparator(3)==0);
   180     test(aLocale.TimeSeparator(0)==0);
   181     test(aLocale.TimeSeparator(1)==':');
   182     test(aLocale.TimeSeparator(2)==':');
   183     test(aLocale.TimeSeparator(3)==0);
   184     test(aLocale.AmPmSymbolPosition()==TRUE);
   185     test(aLocale.AmPmSpaceBetween()==TRUE);
   186     test(aLocale.HomeDaylightSavingZone()==EDstNorthern);
   187     test(aLocale.WorkDays()==0x1f);
   188     test(aLocale.StartOfWeek()==ESunday);
   189     test(aLocale.ClockFormat()==EClockAnalog);
   190     test(aLocale.UnitsGeneral()==EUnitsImperial);
   191     test(aLocale.UnitsDistanceShort()==EUnitsImperial);
   192     test(aLocale.UnitsDistanceLong()==EUnitsImperial);
   193 //#endif
   194     }
   195 
   196 
   197 void testUK(const TLocale& aLocale)
   198     {
   199 //#ifdef __WINS__
   200     test(aLocale.CountryCode()==44);
   201     test(aLocale.DateFormat()==EDateEuropean);
   202     test(aLocale.TimeFormat()==ETime12);
   203     test(aLocale.CurrencySymbolPosition()==ELocaleBefore);
   204     test(aLocale.CurrencySpaceBetween()==FALSE);
   205     test(aLocale.CurrencyDecimalPlaces()==2);
   206     test(aLocale.CurrencyNegativeInBrackets()==EFalse);
   207     test(aLocale.CurrencyTriadsAllowed()==TRUE);
   208     test(aLocale.ThousandsSeparator()==',');
   209     test(aLocale.DecimalSeparator()=='.');
   210     test(aLocale.DateSeparator(0)==0);
   211     test(aLocale.DateSeparator(1)=='/');
   212     test(aLocale.DateSeparator(2)=='/');
   213     test(aLocale.DateSeparator(3)==0);
   214     test(aLocale.TimeSeparator(0)==0);
   215     test(aLocale.TimeSeparator(1)==':');
   216     test(aLocale.TimeSeparator(2)==':');
   217     test(aLocale.TimeSeparator(3)==0);
   218     test(aLocale.AmPmSymbolPosition()==TRUE);
   219     test(aLocale.AmPmSpaceBetween()==TRUE);
   220     test(aLocale.HomeDaylightSavingZone()==EDstEuropean);
   221     test(aLocale.WorkDays()==0x1f);
   222     test(aLocale.StartOfWeek()==EMonday);
   223     test(aLocale.ClockFormat()==EClockAnalog);
   224     test(aLocale.UnitsGeneral()==EUnitsImperial);
   225     test(aLocale.UnitsDistanceShort()==EUnitsImperial);
   226     test(aLocale.UnitsDistanceLong()==EUnitsImperial);
   227 //#endif
   228     }
   229 
   230 void testGE(const TLocale& aLocale)
   231     {
   232 //#ifdef __WINS__
   233     test(aLocale.CountryCode()==49);
   234     test(aLocale.DateFormat()==EDateEuropean);
   235     test(aLocale.TimeFormat()==ETime24);
   236     test(aLocale.CurrencySymbolPosition()==ELocaleAfter);
   237     test(aLocale.CurrencySpaceBetween()==TRUE);
   238     test(aLocale.CurrencyDecimalPlaces()==2);
   239     test(aLocale.CurrencyNegativeInBrackets()==TRUE);
   240     test(aLocale.CurrencyTriadsAllowed()==TRUE);
   241     test(aLocale.ThousandsSeparator()=='.');
   242     test(aLocale.DecimalSeparator()==',');
   243     test(aLocale.DateSeparator(0)==0);
   244     test(aLocale.DateSeparator(1)=='.');
   245     test(aLocale.DateSeparator(2)=='.');
   246     test(aLocale.DateSeparator(3)==0);
   247 
   248     test(aLocale.TimeSeparator(0)==0);
   249     test(aLocale.TimeSeparator(1)==':');
   250     test(aLocale.TimeSeparator(2)==':');
   251     test(aLocale.TimeSeparator(3)==0);
   252     test(aLocale.AmPmSymbolPosition()==TRUE);
   253     test(aLocale.AmPmSpaceBetween()==TRUE);
   254     test(aLocale.HomeDaylightSavingZone()==EDstEuropean);
   255     test(aLocale.WorkDays()==0x1f);
   256     test(aLocale.StartOfWeek()==EMonday);
   257     test(aLocale.ClockFormat()==EClockDigital);
   258     test(aLocale.UnitsGeneral()==EUnitsMetric);
   259     test(aLocale.UnitsDistanceShort()==EUnitsMetric);
   260     test(aLocale.UnitsDistanceLong()==EUnitsMetric);
   261 //#endif
   262     }
   263 
   264 
   265 
   266 /**
   267     Subscribe to a system event.
   268 
   269     @param  aNotifier   notifier
   270     @param  aStatus     request status that is used with the notifier
   271     @param  aEventMask  Specifies the event. See TChanges
   272 */
   273 static void SubscribeToSystemChangeNotification(RChangeNotifier& aNotifier, TRequestStatus& aStatus, TUint32 aEventMask)
   274 {
   275     
   276     const TInt KMaxAttempts = 100;
   277     TInt i;
   278     for(i=0; i<KMaxAttempts; ++i)
   279     {
   280         test.Printf(_L("SubscribeToSystemChangeNotification(0x%x), attempt:%d\n"), aEventMask, i);   
   281 
   282         TInt nRes = aNotifier.Logon(aStatus);
   283         test(nRes==KErrNone);
   284 
   285         if(aStatus.Int() == KRequestPending)
   286             break;
   287 
   288         //-- some other system-wide event can just happen; re-subscribe
   289         test( !(aStatus.Int() & aEventMask));
   290     }
   291 
   292     test(i<KMaxAttempts);
   293 }
   294 
   295 /**
   296     Wait for the event(s) specified in aEventMask to happen
   297 
   298     @param  aNotifier   notifier
   299     @param  aStatus     request status that is used with the notifier
   300     @param  aEventMask  Specifies the event. See TChanges
   301 */
   302 static void WaitForSystemChange(RChangeNotifier& aNotifier, TRequestStatus& aStatus, TUint32 aEventMask)
   303 {
   304     //-- it would be nice to have here a timeout processing in order not to wait forever.. but later.
   305     for(;;)
   306     {
   307         User::WaitForRequest(aStatus);
   308         if(aStatus.Int() & aEventMask)
   309             return; 
   310 
   311         //-- some other system-wide unexpected event happened, we need to resubscribe
   312         test.Printf(_L("WaitForSystemChange(0x%x), happened:0x%x, resubscribing...\n"), aEventMask, aStatus.Int());   
   313         SubscribeToSystemChangeNotification(aNotifier, aStatus, aEventMask);
   314     }
   315 
   316 }
   317     
   318 
   319 void testChangeLocale()
   320     {
   321     TLocale locale;
   322     
   323     RChangeNotifier notifier;
   324     TInt res=notifier.Create();
   325     test(res==KErrNone);
   326     TRequestStatus stat;
   327     
   328     res=notifier.Logon(stat);
   329     test(res==KErrNone);
   330 	// initial value of stat already tested by t_chnot
   331 
   332     SubscribeToSystemChangeNotification(notifier, stat, EChangesLocale);
   333 
   334         test.Printf(_L("Change to US Locale\n"));   
   335         res=UserSvr::ChangeLocale(ELOCLUS);
   336         test.Printf(_L("res=%d\n"),res);
   337         test(res==KErrNone);
   338 
   339     WaitForSystemChange(notifier, stat, EChangesLocale);
   340     test(stat.Int() & EChangesLocale);
   341     
   342     //-------------------
   343     SubscribeToSystemChangeNotification(notifier, stat, EChangesLocale);
   344         
   345         locale.Refresh();
   346         // let's not test localisation data details now that the internationalisation
   347         // team rather than us release the localisation dlls (changed 9/6/98)
   348         testUS(locale);
   349 
   350         test.Printf(_L("Change to GE Locale\n"));
   351         res=UserSvr::ChangeLocale(ELOCLGE);
   352         test.Printf(_L("res=%d\n"),res);
   353         test(res==KErrNone);
   354 
   355     WaitForSystemChange(notifier, stat, EChangesLocale);
   356     test(stat.Int() & EChangesLocale);
   357     
   358     //-------------------
   359     
   360     SubscribeToSystemChangeNotification(notifier, stat, EChangesLocale);
   361         
   362         locale.Refresh();
   363         // let's not test localisation data details now that the internationalisation
   364         // team rather than us release the localisation dlls (changed 9/6/98)
   365         testGE(locale);
   366 
   367         test.Printf(_L("Load non ELOCL type DLL\n"));    
   368         res=UserSvr::ChangeLocale(DUMMYDLL);
   369         test.Printf(_L("res=%d\n"),res);
   370         test(res == KErrNotSupported);
   371     
   372     //-- ensure that there wasn't locale change
   373     const TInt KMaxAttempts = 100;
   374 	TInt i;
   375     for(i=0; i<KMaxAttempts; ++i)
   376     {
   377         if(stat ==KRequestPending)
   378             break;
   379         
   380         //-- check that if something system-wide happened, it wasn't a locale change
   381         test(!(stat.Int() & EChangesLocale));
   382         SubscribeToSystemChangeNotification(notifier, stat, EChangesLocale);
   383     }
   384     test(i<KMaxAttempts);
   385 
   386 
   387         locale.Refresh();
   388         // let's not test localisation data details now that the internationalisation
   389         // team rather than us release the localisation dlls (changed 9/6/98)
   390         testGE(locale);
   391 
   392         //This test using US1 locale is for identifying different collation table
   393         //used for matching and comparing. To specify a table to be used in the
   394         //matching we just need to add the TCollationTable::EMatchingTable flag
   395         //inside the TCollationMethods::iFlags
   396         test.Printf(_L("Change to US1 Locale\n"));  
   397         res=UserSvr::ChangeLocale(ELOCLUS1);
   398         test.Printf(_L("res=%d\n"),res);
   399         test(res==KErrNone);
   400     
   401     WaitForSystemChange(notifier, stat, EChangesLocale);
   402     test(stat.Int() & EChangesLocale);
   403 
   404     
   405     //-------------------
   406     SubscribeToSystemChangeNotification(notifier, stat, EChangesLocale);
   407 
   408         locale.Refresh();
   409     
   410     //Testing the different collation table used for Matching and Comparing
   411     //after loading this new locale using T_LOCLUS1.DLL.
   412     //test.Printf(_L("Test for differnt collation table for Matching and Comparing\n"));
   413     //TCollationMethod m=*Mem::GetDefaultMatchingTable();
   414     //test(m.iFlags & TCollationMethod::EMatchingTable);
   415     
   416     //The collation table t_locl.cpp can be found in \locl\t_locl.cpp
   417     //Expected collation override for MatchC A==B and a==b
   418     //Expected collation override for CompareC A>B and a>b
   419     //Collation tables cannot be changed at runtime
   420 /*  TBuf16<1> a_cap(_L("A"));
   421     TBuf16<1> a_small(_L("a"));
   422     
   423     //Test using the locale independent matching and comparing
   424     test(a_cap.Match(_L("B"))!=0);
   425     test(a_cap.Compare(_L("B"))<0);
   426     test(a_small.Match(_L("b"))!=0);
   427     test(a_small.Compare(_L("b"))<0);
   428     //Test that the default collation table(1st table) is selected here
   429     test(a_cap.CompareC(_L("B"))!=0);
   430     test(a_small.CompareC(_L("b"))!=0);
   431     test(a_cap.CompareC(_L("B"))>0);
   432     test(a_small.CompareC(_L("b"))>0);
   433     //Test that the Matching collation table(3rd table) is selected here
   434     test(a_cap.MatchC(_L("B"))==0);
   435     test(a_small.MatchC(_L("b"))==0);
   436 */
   437         test.Printf(_L("Back to default UK Locale\n"));
   438         res=UserSvr::ChangeLocale(ELOCL_DEFAULT);
   439         test.Printf(_L("res=%d\n"),res);
   440         test(res==KErrNone);
   441     
   442     WaitForSystemChange(notifier, stat, EChangesLocale);
   443     test(stat.Int() & EChangesLocale);
   444     
   445     //-------------------
   446 
   447     SubscribeToSystemChangeNotification(notifier, stat, EChangesLocale);
   448 
   449         locale.Refresh();
   450         testUK(locale); 
   451     
   452         //Test for locale which does not have a matching collation table
   453         TCollationMethod m1=*Mem::GetDefaultMatchingTable();
   454         test((m1.iFlags & TCollationMethod::EMatchingTable)==0);
   455 
   456         //************************************************
   457         test.Printf(_L("Change to US Locale with file open on drive\n"));   
   458     
   459         _LIT(KTestFile, "TEST.TXT");
   460         RFile file;
   461         res = file.Replace(TheFs, KTestFile, 0);
   462         test(res == KErrNone);
   463 
   464 
   465         res=UserSvr::ChangeLocale(ELOCLUS);
   466         test.Printf(_L("res=%d\n"),res);
   467         test(res==KErrNone);
   468 
   469 
   470     WaitForSystemChange(notifier, stat, EChangesLocale);
   471     test(stat.Int() & EChangesLocale);
   472 
   473     
   474     //-------------------
   475     SubscribeToSystemChangeNotification(notifier, stat, EChangesLocale);
   476 
   477 
   478         _LIT8(KTestData, "Arsenal");
   479         res = file.Write(KTestData);
   480         test(res==KErrNone);
   481         file.Close();
   482 
   483         res = file.Open(TheFs, KTestFile, 0);
   484         test(res == KErrNone);
   485         file.Close();
   486         res = TheFs.Delete(KTestFile);
   487         test(res==KErrNone);
   488 
   489     //************************************************
   490 
   491     //-- close the notifier
   492     notifier.Close();
   493     User::WaitForRequest(stat);
   494     
   495     //-- n.b. it's actually a bad idea to expect _exact_ event completion from the RChangeNotifier, because
   496     //-- this is a system-wide events observer and any of the TChanges events can happen, not only EChangesLocale.
   497     //-- so this test is a bit flawed.
   498 
   499     //test(stat==KErrGeneral);
   500     }
   501 
   502 const TText * const DateSuffixTable[KMaxSuffixes] =
   503     {
   504     _S("st"),_S("nd"),_S("rd"),_S("th"),_S("th"),
   505     _S("th"),_S("th"),_S("th"),_S("th"),_S("th"),
   506     _S("th"),_S("th"),_S("th"),_S("th"),_S("th"),
   507     _S("th"),_S("th"),_S("th"),_S("th"),_S("th"),
   508     _S("st"),_S("nd"),_S("rd"),_S("th"),_S("th"),
   509     _S("th"),_S("th"),_S("th"),_S("th"),_S("th"),
   510     _S("st")
   511     };
   512 
   513 const TText * const DayTable[KMaxDays] =
   514     {
   515     _S("Monday"),
   516     _S("Tuesday"),
   517     _S("Wednesday"),
   518     _S("Thursday"),
   519     _S("Friday"),
   520     _S("Saturday"),
   521     _S("Sunday")
   522     };
   523 
   524 const TText * const DayAbbTable[KMaxDays] =
   525     {
   526     _S("Mon"),
   527     _S("Tue"),
   528     _S("Wed"),
   529     _S("Thu"),
   530     _S("Fri"),
   531     _S("Sat"),
   532     _S("Sun")
   533     };
   534 
   535 const TText * const MonthTable[KMaxMonths] =
   536     {
   537     _S("January"),
   538     _S("February"),
   539     _S("March"),
   540     _S("April"),
   541     _S("May"),
   542     _S("June"),
   543     _S("July"),
   544     _S("August"),
   545     _S("September"),
   546     _S("October"),
   547     _S("November"),
   548     _S("December")
   549     };
   550 
   551 const TText * const MonthAbbTable[KMaxMonths] =
   552     {
   553     _S("Jan"),
   554     _S("Feb"),
   555     _S("Mar"),
   556     _S("Apr"),
   557     _S("May"),
   558     _S("Jun"),
   559     _S("Jul"),
   560     _S("Aug"),
   561     _S("Sep"),
   562     _S("Oct"),
   563     _S("Nov"),
   564     _S("Dec")
   565     };
   566 
   567 const TText * const AmPmTable[KMaxAmPms] = {_S("am"),_S("pm")};
   568 
   569 void testExtendedUS(TUint aAspect, TExtendedLocale& aLocale)
   570     {
   571     TLocale* loc = aLocale.GetLocale();
   572     testUS(*loc);
   573     
   574     if(aAspect & ELocaleLanguageSettings)
   575         {
   576         TLanguage tl = User::Language();
   577         test(tl == ELangAmerican);
   578         
   579         TDateSuffix datesuffix;
   580         TInt i;
   581         for(i=0;i<KMaxSuffixes;++i)
   582             {
   583             datesuffix.Set(i);
   584             test(datesuffix.Compare(TPtrC(DateSuffixTable[i])) == 0);
   585             }
   586 
   587         TDayName dayname;
   588         for(i=0;i<KMaxDays;++i)
   589             {
   590             dayname.Set((TDay)i);
   591             test(dayname.Compare(TPtrC(DayTable[i])) == 0);
   592             }
   593 
   594         TDayNameAbb daynameabb;
   595         for(i=0;i<KMaxDays;++i)
   596             {
   597             daynameabb.Set((TDay)i);
   598             test(daynameabb.Compare(TPtrC(DayAbbTable[i])) == 0);
   599             }
   600 
   601         TMonthName monthname;
   602         for(i=0;i<KMaxMonths;++i)
   603             {
   604             monthname.Set((TMonth)i);
   605             test(monthname.Compare(TPtrC(MonthTable[i])) == 0);
   606             }
   607 
   608         TMonthNameAbb monthnameabb;
   609         for(i=0;i<KMaxMonths;++i)
   610             {
   611             monthnameabb.Set((TMonth)i);
   612             test(monthnameabb.Compare(TPtrC(MonthAbbTable[i])) == 0);
   613             }
   614 
   615         TAmPmName ampmname;
   616         for(i=0;i<KMaxAmPms;++i)
   617             {
   618             ampmname.Set((TAmPm)i);
   619             test(ampmname.Compare(TPtrC(AmPmTable[i])) == 0);
   620             }
   621         }
   622 
   623     if(aAspect & ELocaleLocaleSettings)
   624         {
   625         TCurrencySymbol symbol;
   626         symbol.Set();
   627         test(symbol.Compare(TPtrC(_S("$"))) == 0);
   628         }
   629 
   630     if(aAspect & ELocaleTimeDateSettings)
   631         {
   632         TShortDateFormatSpec shortdate;
   633         shortdate.Set();
   634         test(shortdate.Compare(TPtrC(_S("%F%*M/%*D/%Y"))) == 0);
   635 
   636         TLongDateFormatSpec longdate;
   637         longdate.Set();
   638         test(longdate.Compare(TPtrC(_S("%F%*D%X %N %Y"))) == 0);
   639 
   640         TTimeFormatSpec spec;
   641         spec.Set();
   642         test(spec.Compare(TPtrC(_S("%F%*I:%T:%S %*A"))) == 0);
   643         }
   644 
   645     }
   646 
   647     
   648 void testExtendedLocale()
   649     {
   650     TExtendedLocale locale;
   651     locale.LoadLocale(ELOCLUS);
   652     TInt r = locale.SaveSystemSettings();
   653     test(r == KErrNone);
   654     testExtendedUS(ELocaleLanguageSettings | ELocaleCollateSetting | ELocaleLocaleSettings | ELocaleTimeDateSettings, locale);
   655 
   656     r = locale.SetCurrencySymbol(TPtrC(_S("Leu")));
   657     test(r == KErrNone);
   658     TCurrencySymbol symbol;
   659     symbol.Set();
   660     test(symbol.Compare(TPtrC(_S("Leu"))) == 0);
   661 
   662     User::SetCurrencySymbol(TPtrC(_S("Le")));
   663     symbol.Set();
   664     test(symbol.Compare(TPtrC(_S("Le"))) == 0);
   665 
   666     TFileName dllName;
   667     TFileName eloclus;
   668     eloclus.Copy(ELOCLUS);
   669     eloclus.Append(TPtrC(KDLLExtension));
   670     r = locale.GetLocaleDllName(ELocaleLanguageSettings, dllName);
   671     test(r == KErrNone);
   672     test.Printf(_L("dllName looking for %s (%s)\n"), dllName.Ptr(), eloclus.Ptr());
   673     test(dllName.Find(eloclus) != KErrNotFound);
   674     
   675     dllName.FillZ();
   676 
   677     r = locale.GetLocaleDllName(ELocaleCollateSetting, dllName);
   678     test(r == KErrNone);
   679     test(dllName.Find(eloclus) != KErrNotFound);
   680     
   681     dllName.FillZ();
   682 
   683     r = locale.GetLocaleDllName(ELocaleLocaleSettings, dllName);
   684     test(r == KErrNone);
   685     test(dllName.Find(eloclus) != KErrNotFound);
   686     
   687     dllName.FillZ();
   688 
   689     r = locale.GetLocaleDllName(ELocaleTimeDateSettings, dllName);
   690     test(r == KErrNone);
   691     test(dllName.Find(eloclus) != KErrNotFound);
   692     
   693     dllName.FillZ();
   694 
   695     r = locale.LoadLocaleAspect(ELocaleLocaleSettings | ELocaleTimeDateSettings, ELOCLGE);
   696     test(r == KErrNone);
   697 
   698     r = locale.SaveSystemSettings();
   699     test(r == KErrNone);
   700 
   701     testExtendedUS(ELocaleLanguageSettings | ELocaleCollateSetting, locale);
   702 
   703     symbol.Set();
   704     test(symbol.Compare(TPtrC(_S("DM"))) == 0);
   705 
   706     TShortDateFormatSpec shortdate;
   707     shortdate.Set();
   708     test(shortdate.Compare(TPtrC(_S("%F%*D.%*M.%Y"))) == 0);
   709 
   710     TLongDateFormatSpec longdate;
   711     longdate.Set();
   712     test(longdate.Compare(TPtrC(_S("%F%*D%X %N %Y"))) == 0);
   713 
   714     TTimeFormatSpec spec;
   715     spec.Set();
   716     test(spec.Compare(TPtrC(_S("%F%H:%T:%S"))) == 0);
   717 
   718     TFileName eloclge;
   719     eloclge.Copy(ELOCLGE);
   720     eloclge.Append(KDLLExtension);
   721     r = locale.GetLocaleDllName(ELocaleLanguageSettings, dllName);
   722     test(r == KErrNone);
   723     test(dllName.Find(eloclus) != KErrNotFound);
   724     
   725     dllName.FillZ();
   726 
   727     r = locale.GetLocaleDllName(ELocaleCollateSetting, dllName);
   728     test(r == KErrNone);
   729     test(dllName.Find(eloclus) != KErrNotFound);
   730     
   731     dllName.FillZ();
   732 
   733     r = locale.GetLocaleDllName(ELocaleLocaleSettings, dllName);
   734     test(r == KErrNone);
   735     test(dllName.Find(eloclge) != KErrNotFound);
   736     
   737     dllName.FillZ();
   738 
   739     r = locale.GetLocaleDllName(ELocaleTimeDateSettings, dllName);
   740     test(r == KErrNone);
   741     test(dllName.Find(eloclge) != KErrNotFound);
   742     
   743     dllName.FillZ();
   744 
   745     }
   746 
   747 void testDigitsInMonthsNames()
   748     {
   749     test.Next(_L("Testing date parsing when month names include digits"));
   750 
   751     TTime time;
   752     _LIT(KMonthJan, "30 Th1 2006 14:31:50");
   753     test_Equal(KErrArgument, time.Parse(KMonthJan));
   754     test_KErrNone(UserSvr::ChangeLocale(ELOCLUS2));
   755     test_Equal(EParseDatePresent | EParseTimePresent, time.Parse(KMonthJan));
   756     test_KErrNone(UserSvr::ChangeLocale(ELOCL_DEFAULT));
   757     }
   758 
   759 GLDEF_C void CallTestsL(void)
   760     {
   761 
   762     test.Title();
   763     test.Start(_L("Starting T_DLOCL tests"));
   764 
   765     testChangeLocale();
   766     testChangeKeyData();
   767     testExtendedLocale();
   768     testDigitsInMonthsNames();
   769     test.Next(_L("Close connection to the file server\n"));
   770 
   771     test.End();
   772     }
   773