2020-04-29 13:02:18 -07:00
# include "pch.h"
2019-10-17 20:57:19 -07:00
# include <PowerRenameInterfaces.h>
# include <PowerRenameManager.h>
# include <PowerRenameItem.h>
# include "MockPowerRenameItem.h"
# include "MockPowerRenameManagerEvents.h"
# include "TestFileHelper.h"
2020-08-20 02:53:09 +03:00
# include "Helpers.h"
2019-10-17 20:57:19 -07:00
2022-02-02 17:46:22 +01:00
# define DEFAULT_FLAGS 0
2019-10-17 20:57:19 -07:00
using namespace Microsoft : : VisualStudio : : CppUnitTestFramework ;
EXTERN_C IMAGE_DOS_HEADER __ImageBase ;
# define HINST_THISCOMPONENT ((HINSTANCE)&__ImageBase)
2021-10-25 15:40:19 +02:00
HINSTANCE g_hostHInst = HINST_THISCOMPONENT ;
2019-10-17 20:57:19 -07:00
namespace PowerRenameManagerTests
{
2022-11-14 22:15:58 +00:00
TEST_CLASS ( SimpleTests )
2019-10-17 20:57:19 -07:00
{
public :
struct rename_pairs
{
std : : wstring originalName ;
std : : wstring newName ;
bool isFile ;
bool shouldRename ;
int depth ;
} ;
2020-12-14 12:28:12 +03:00
void RenameHelper ( _In_ rename_pairs * renamePairs , _In_ int numPairs , _In_ std : : wstring searchTerm , _In_ std : : wstring replaceTerm , SYSTEMTIME fileTime , _In_ DWORD flags )
2019-10-17 20:57:19 -07:00
{
// Create a single item (in a temp directory) and verify rename works as expected
CTestFileHelper testFileHelper ;
for ( int i = 0 ; i < numPairs ; i + + )
{
if ( renamePairs [ i ] . isFile )
{
Assert : : IsTrue ( testFileHelper . AddFile ( renamePairs [ i ] . originalName ) ) ;
}
else
{
Assert : : IsTrue ( testFileHelper . AddFolder ( renamePairs [ i ] . originalName ) ) ;
}
}
CComPtr < IPowerRenameManager > mgr ;
Assert : : IsTrue ( CPowerRenameManager : : s_CreateInstance ( & mgr ) = = S_OK ) ;
CMockPowerRenameManagerEvents * mockMgrEvents = new CMockPowerRenameManagerEvents ( ) ;
CComPtr < IPowerRenameManagerEvents > mgrEvents ;
Assert : : IsTrue ( mockMgrEvents - > QueryInterface ( IID_PPV_ARGS ( & mgrEvents ) ) = = S_OK ) ;
DWORD cookie = 0 ;
Assert : : IsTrue ( mgr - > Advise ( mgrEvents , & cookie ) = = S_OK ) ;
for ( int i = 0 ; i < numPairs ; i + + )
{
CComPtr < IPowerRenameItem > item ;
2020-12-14 12:28:12 +03:00
CMockPowerRenameItem : : CreateInstance ( testFileHelper . GetFullPath ( renamePairs [ i ] . originalName ) . c_str ( ) ,
2019-12-10 10:28:24 +03:00
renamePairs [ i ] . originalName . c_str ( ) ,
renamePairs [ i ] . depth ,
! renamePairs [ i ] . isFile ,
2020-12-14 12:28:12 +03:00
fileTime ,
2019-12-10 10:28:24 +03:00
& item ) ;
2019-10-17 20:57:19 -07:00
int itemId = 0 ;
2020-08-25 08:22:05 +03:00
Assert : : IsTrue ( item - > GetId ( & itemId ) = = S_OK ) ;
2019-10-17 20:57:19 -07:00
mgr - > AddItem ( item ) ;
}
// TODO: Setup match and replace parameters
CComPtr < IPowerRenameRegEx > renRegEx ;
2020-08-25 08:22:05 +03:00
Assert : : IsTrue ( mgr - > GetRenameRegEx ( & renRegEx ) = = S_OK ) ;
renRegEx - > PutFlags ( flags ) ;
renRegEx - > PutSearchTerm ( searchTerm . c_str ( ) ) ;
2020-12-14 12:28:12 +03:00
renRegEx - > PutReplaceTerm ( replaceTerm . c_str ( ) ) ;
2019-10-17 20:57:19 -07:00
// Perform the rename
2020-12-14 12:28:12 +03:00
bool replaceSuccess = false ;
for ( int step = 0 ; step < 20 ; step + + )
{
2021-10-25 15:40:19 +02:00
replaceSuccess = mgr - > Rename ( 0 , true ) = = S_OK ;
2020-12-14 12:28:12 +03:00
if ( replaceSuccess )
{
break ;
}
Sleep ( 10 ) ;
}
2019-10-17 20:57:19 -07:00
2020-12-14 12:28:12 +03:00
Assert : : IsTrue ( replaceSuccess ) ;
2019-10-17 20:57:19 -07:00
2024-06-04 04:11:12 -07:00
std : : vector < std : : wstring > shouldRename = { L " not " , L " " } ;
2019-10-17 20:57:19 -07:00
// Verify the rename occurred
for ( int i = 0 ; i < numPairs ; i + + )
{
2024-06-04 04:11:12 -07:00
Assert : : IsTrue ( testFileHelper . PathExistsCaseSensitive ( renamePairs [ i ] . originalName ) = = ! renamePairs [ i ] . shouldRename ,
( std : : wstring ( L " The path: [ " + renamePairs [ i ] . originalName + L " ] should " ) + shouldRename [ ! renamePairs [ i ] . shouldRename ] + L " exist. " ) . c_str ( ) ) ;
Assert : : IsTrue ( testFileHelper . PathExistsCaseSensitive ( renamePairs [ i ] . newName ) = = renamePairs [ i ] . shouldRename ,
( std : : wstring ( L " The path: [ " + renamePairs [ i ] . newName + L " ] should " ) + shouldRename [ renamePairs [ i ] . shouldRename ] + L " exist. " ) . c_str ( ) ) ;
2019-10-17 20:57:19 -07:00
}
Assert : : IsTrue ( mgr - > Shutdown ( ) = = S_OK ) ;
mockMgrEvents - > Release ( ) ;
}
2022-11-14 22:15:58 +00:00
TEST_METHOD ( CreateTest )
2019-10-17 20:57:19 -07:00
{
CComPtr < IPowerRenameManager > mgr ;
Assert : : IsTrue ( CPowerRenameManager : : s_CreateInstance ( & mgr ) = = S_OK ) ;
}
2022-11-14 22:15:58 +00:00
TEST_METHOD ( CreateAndShutdownTest )
2019-10-17 20:57:19 -07:00
{
CComPtr < IPowerRenameManager > mgr ;
Assert : : IsTrue ( CPowerRenameManager : : s_CreateInstance ( & mgr ) = = S_OK ) ;
Assert : : IsTrue ( mgr - > Shutdown ( ) = = S_OK ) ;
}
2022-11-14 22:15:58 +00:00
TEST_METHOD ( AddItemTest )
2019-10-17 20:57:19 -07:00
{
CComPtr < IPowerRenameManager > mgr ;
Assert : : IsTrue ( CPowerRenameManager : : s_CreateInstance ( & mgr ) = = S_OK ) ;
CComPtr < IPowerRenameItem > item ;
2022-11-14 22:15:58 +00:00
CMockPowerRenameItem : : CreateInstance ( L " foo " , L " foo " , 0 , false , SYSTEMTIME { 0 } , & item ) ;
2019-10-17 20:57:19 -07:00
mgr - > AddItem ( item ) ;
Assert : : IsTrue ( mgr - > Shutdown ( ) = = S_OK ) ;
}
2022-11-14 22:15:58 +00:00
TEST_METHOD ( VerifyRenameManagerEvents )
2019-10-17 20:57:19 -07:00
{
CComPtr < IPowerRenameManager > mgr ;
Assert : : IsTrue ( CPowerRenameManager : : s_CreateInstance ( & mgr ) = = S_OK ) ;
CMockPowerRenameManagerEvents * mockMgrEvents = new CMockPowerRenameManagerEvents ( ) ;
CComPtr < IPowerRenameManagerEvents > mgrEvents ;
Assert : : IsTrue ( mockMgrEvents - > QueryInterface ( IID_PPV_ARGS ( & mgrEvents ) ) = = S_OK ) ;
DWORD cookie = 0 ;
Assert : : IsTrue ( mgr - > Advise ( mgrEvents , & cookie ) = = S_OK ) ;
CComPtr < IPowerRenameItem > item ;
2022-11-14 22:15:58 +00:00
CMockPowerRenameItem : : CreateInstance ( L " foo " , L " foo " , 0 , false , SYSTEMTIME { 0 } , & item ) ;
2019-10-17 20:57:19 -07:00
int itemId = 0 ;
2020-08-25 08:22:05 +03:00
Assert : : IsTrue ( item - > GetId ( & itemId ) = = S_OK ) ;
2019-10-17 20:57:19 -07:00
mgr - > AddItem ( item ) ;
Assert : : IsTrue ( mgr - > Shutdown ( ) = = S_OK ) ;
mockMgrEvents - > Release ( ) ;
}
2022-11-14 22:15:58 +00:00
TEST_METHOD ( VerifySingleRename )
2019-10-17 20:57:19 -07:00
{
// Create a single item and verify rename works as expected
2019-12-10 10:28:24 +03:00
rename_pairs renamePairs [ ] = {
{ L " foo.txt " , L " bar.txt " , true , true }
2019-10-17 20:57:19 -07:00
} ;
2020-08-20 02:53:09 +03:00
RenameHelper ( renamePairs , ARRAYSIZE ( renamePairs ) , L " foo " , L " bar " , SYSTEMTIME { 2020 , 7 , 3 , 22 , 15 , 6 , 42 , 453 } , DEFAULT_FLAGS ) ;
2019-10-17 20:57:19 -07:00
}
2022-11-14 22:15:58 +00:00
TEST_METHOD ( VerifyMultiRename )
2019-10-17 20:57:19 -07:00
{
// Create a single item and verify rename works as expected
2019-12-10 10:28:24 +03:00
rename_pairs renamePairs [ ] = {
{ L " foo1.txt " , L " bar1.txt " , true , true , 0 } ,
{ L " foo2.txt " , L " bar2.txt " , true , true , 0 } ,
{ L " foo3.txt " , L " bar3.txt " , true , true , 0 } ,
{ L " foo4.txt " , L " bar4.txt " , true , true , 0 } ,
{ L " foo5.txt " , L " bar5.txt " , true , true , 0 } ,
{ L " baa.txt " , L " baa_norename.txt " , true , false , 0 }
2019-10-17 20:57:19 -07:00
} ;
2020-08-20 02:53:09 +03:00
RenameHelper ( renamePairs , ARRAYSIZE ( renamePairs ) , L " foo " , L " bar " , SYSTEMTIME { 2020 , 7 , 3 , 22 , 15 , 6 , 42 , 453 } , DEFAULT_FLAGS ) ;
2019-10-17 20:57:19 -07:00
}
2022-11-14 22:15:58 +00:00
TEST_METHOD ( VerifyFilesOnlyRename )
2019-10-17 20:57:19 -07:00
{
// Verify only files are renamed when folders match too
2019-12-10 10:28:24 +03:00
rename_pairs renamePairs [ ] = {
{ L " foo.txt " , L " bar.txt " , true , true , 0 } ,
{ L " foo " , L " foo_norename " , false , false , 0 }
2019-10-17 20:57:19 -07:00
} ;
2020-08-20 02:53:09 +03:00
RenameHelper ( renamePairs , ARRAYSIZE ( renamePairs ) , L " foo " , L " bar " , SYSTEMTIME { 2020 , 7 , 3 , 22 , 15 , 6 , 42 , 453 } , DEFAULT_FLAGS | ExcludeFolders ) ;
2019-10-17 20:57:19 -07:00
}
2022-11-14 22:15:58 +00:00
TEST_METHOD ( VerifyFoldersOnlyRename )
2019-10-17 20:57:19 -07:00
{
// Verify only folders are renamed when files match too
2019-12-10 10:28:24 +03:00
rename_pairs renamePairs [ ] = {
{ L " foo.txt " , L " foo_norename.txt " , true , false , 0 } ,
{ L " foo " , L " bar " , false , true , 0 }
2019-10-17 20:57:19 -07:00
} ;
2020-08-20 02:53:09 +03:00
RenameHelper ( renamePairs , ARRAYSIZE ( renamePairs ) , L " foo " , L " bar " , SYSTEMTIME { 2020 , 7 , 3 , 22 , 15 , 6 , 42 , 453 } , DEFAULT_FLAGS | ExcludeFiles ) ;
2019-10-17 20:57:19 -07:00
}
2022-11-14 22:15:58 +00:00
TEST_METHOD ( VerifyFileNameOnlyRename )
2019-10-17 20:57:19 -07:00
{
// Verify only file name is renamed, not extension
2019-12-10 10:28:24 +03:00
rename_pairs renamePairs [ ] = {
{ L " foo.foo " , L " bar.foo " , true , true , 0 } ,
{ L " test.foo " , L " test.foo_norename " , true , false , 0 }
2019-10-17 20:57:19 -07:00
} ;
2020-08-20 02:53:09 +03:00
RenameHelper ( renamePairs , ARRAYSIZE ( renamePairs ) , L " foo " , L " bar " , SYSTEMTIME { 2020 , 7 , 3 , 22 , 15 , 6 , 42 , 453 } , DEFAULT_FLAGS | NameOnly ) ;
2019-10-17 20:57:19 -07:00
}
2022-11-14 22:15:58 +00:00
TEST_METHOD ( VerifyFileExtensionOnlyRename )
2019-10-17 20:57:19 -07:00
{
// Verify only file extension is renamed, not name
2019-12-10 10:28:24 +03:00
rename_pairs renamePairs [ ] = {
{ L " foo.foo " , L " foo.bar " , true , true , 0 } ,
{ L " test.foo " , L " test.bar " , true , true , 0 }
2019-10-17 20:57:19 -07:00
} ;
2020-08-20 02:53:09 +03:00
RenameHelper ( renamePairs , ARRAYSIZE ( renamePairs ) , L " foo " , L " bar " , SYSTEMTIME { 2020 , 7 , 3 , 22 , 15 , 6 , 42 , 453 } , DEFAULT_FLAGS | ExtensionOnly ) ;
2019-10-17 20:57:19 -07:00
}
2022-11-14 22:15:58 +00:00
TEST_METHOD ( VerifySubFoldersRename )
2019-10-17 20:57:19 -07:00
{
// Verify subfolders do not get renamed
2019-12-10 10:28:24 +03:00
rename_pairs renamePairs [ ] = {
{ L " foo1 " , L " bar1 " , false , true , 0 } ,
{ L " foo2 " , L " foo2_norename " , false , false , 1 }
2019-10-17 20:57:19 -07:00
} ;
2020-08-20 02:53:09 +03:00
RenameHelper ( renamePairs , ARRAYSIZE ( renamePairs ) , L " foo " , L " bar " , SYSTEMTIME { 2020 , 7 , 3 , 22 , 15 , 6 , 42 , 453 } , DEFAULT_FLAGS | ExcludeSubfolders ) ;
2019-10-17 20:57:19 -07:00
}
2020-07-02 11:52:01 +03:00
TEST_METHOD ( VerifyUppercaseTransform )
{
rename_pairs renamePairs [ ] = {
{ L " foo " , L " BAR " , true , true , 0 } ,
{ L " foo.test " , L " BAR.TEST " , true , true , 0 } ,
{ L " TEST " , L " TEST_norename " , true , false , 0 }
} ;
2020-08-20 02:53:09 +03:00
RenameHelper ( renamePairs , ARRAYSIZE ( renamePairs ) , L " foo " , L " bar " , SYSTEMTIME { 2020 , 7 , 3 , 22 , 15 , 6 , 42 , 453 } , DEFAULT_FLAGS | Uppercase ) ;
2020-07-02 11:52:01 +03:00
}
TEST_METHOD ( VerifyLowercaseTransform )
{
rename_pairs renamePairs [ ] = {
{ L " Foo " , L " bar " , false , true , 0 } ,
{ L " Foo.teST " , L " bar.test " , false , true , 0 } ,
{ L " test " , L " test_norename " , false , false , 0 }
} ;
2020-08-20 02:53:09 +03:00
RenameHelper ( renamePairs , ARRAYSIZE ( renamePairs ) , L " foo " , L " bar " , SYSTEMTIME { 2020 , 7 , 3 , 22 , 15 , 6 , 42 , 453 } , DEFAULT_FLAGS | Lowercase ) ;
2020-07-02 11:52:01 +03:00
}
TEST_METHOD ( VerifyTitlecaseTransform )
{
rename_pairs renamePairs [ ] = {
2024-06-04 04:11:12 -07:00
{ L " foo And The To " , L " Bar and the To " , false , true , 0 } ,
{ L " foo And The To.txt " , L " Bar and the To.txt " , true , true , 0 } ,
{ L " Test " , L " Test_norename " , false , false , 0 }
} ;
RenameHelper ( renamePairs , ARRAYSIZE ( renamePairs ) , L " foo " , L " bar " , SYSTEMTIME { 2020 , 7 , 3 , 22 , 15 , 6 , 42 , 453 } , DEFAULT_FLAGS | Titlecase ) ;
}
TEST_METHOD ( VerifyTitlecaseWithApostropheTransform )
{
rename_pairs renamePairs [ ] = {
{ L " the foo i'll and i've you're dogs' the i'd it's i'm don't to y'all " , L " The Bar I'll and I've You're Dogs' the I'd It's I'm Don't to Y'all " , false , true , 0 } ,
{ L " 'the 'foo' 'i'll' and i've you're dogs' the 'i'd' it's i'm don't to y'all.txt " , L " 'The 'Bar' 'I'll' and I've You're Dogs' the 'I'd' It's I'm Don't to Y'all.txt " , true , true , 0 } ,
2020-07-02 11:52:01 +03:00
{ L " Test " , L " Test_norename " , false , false , 0 }
} ;
2020-08-20 02:53:09 +03:00
RenameHelper ( renamePairs , ARRAYSIZE ( renamePairs ) , L " foo " , L " bar " , SYSTEMTIME { 2020 , 7 , 3 , 22 , 15 , 6 , 42 , 453 } , DEFAULT_FLAGS | Titlecase ) ;
2020-07-02 11:52:01 +03:00
}
2021-04-09 08:24:06 -04:00
TEST_METHOD ( VerifyCapitalizedTransform )
{
rename_pairs renamePairs [ ] = {
{ L " foo and the to " , L " Bar And The To " , false , true , 0 } ,
{ L " Test " , L " Test_norename " , false , false , 0 }
} ;
RenameHelper ( renamePairs , ARRAYSIZE ( renamePairs ) , L " foo " , L " bar " , SYSTEMTIME { 2020 , 7 , 3 , 22 , 15 , 6 , 42 , 453 } , DEFAULT_FLAGS | Capitalized ) ;
}
2024-06-04 04:11:12 -07:00
TEST_METHOD ( VerifyCapitalizedWithApostropheTransform )
{
rename_pairs renamePairs [ ] = {
{ L " foo i'll and i've you're dogs' the i'd it's i'm don't to y'all " , L " Bar I'll And I've You're Dogs' The I'd It's I'm Don't To Y'all " , false , true , 0 } ,
{ L " 'foo i'll 'and' i've you're dogs' the i'd it's i'm don't to y'all.txt " , L " 'Bar I'll 'And' I've You're Dogs' The I'd It's I'm Don't To Y'all.txt " , true , true , 0 } ,
{ L " Test " , L " Test_norename " , false , false , 0 }
} ;
RenameHelper ( renamePairs , ARRAYSIZE ( renamePairs ) , L " foo " , L " bar " , SYSTEMTIME { 2020 , 7 , 3 , 22 , 15 , 6 , 42 , 453 } , DEFAULT_FLAGS | Capitalized ) ;
}
2020-07-02 11:52:01 +03:00
TEST_METHOD ( VerifyNameOnlyTransform )
{
rename_pairs renamePairs [ ] = {
2024-06-04 04:11:12 -07:00
{ L " foo.foo " , L " BAR.foo " , true , true , 0 } ,
{ L " foo.txt " , L " BAR.TXT " , false , true , 0 } ,
2020-07-02 11:52:01 +03:00
{ L " TEST " , L " TEST_norename " , false , false , 1 }
} ;
2020-08-20 02:53:09 +03:00
RenameHelper ( renamePairs , ARRAYSIZE ( renamePairs ) , L " foo " , L " bar " , SYSTEMTIME { 2020 , 7 , 3 , 22 , 15 , 6 , 42 , 453 } , DEFAULT_FLAGS | Uppercase | NameOnly ) ;
2020-07-02 11:52:01 +03:00
}
TEST_METHOD ( VerifyExtensionOnlyTransform )
{
rename_pairs renamePairs [ ] = {
2021-12-14 14:42:37 +01:00
{ L " foo.FOO " , L " foo.bar " , true , true , 0 } ,
{ L " bar.FOO " , L " bar.FOO_norename " , false , false , 0 } ,
{ L " foo.bar " , L " foo.bar_norename " , true , false , 0 }
2020-07-02 11:52:01 +03:00
} ;
2020-08-20 02:53:09 +03:00
RenameHelper ( renamePairs , ARRAYSIZE ( renamePairs ) , L " foo " , L " bar " , SYSTEMTIME { 2020 , 7 , 3 , 22 , 15 , 6 , 42 , 453 } , DEFAULT_FLAGS | Lowercase | ExtensionOnly ) ;
}
TEST_METHOD ( VerifyFileAttributesNoPadding )
{
rename_pairs renamePairs [ ] = {
{ L " foo " , L " bar20-7-22-15-6-42-4 " , true , true , 0 } ,
} ;
RenameHelper ( renamePairs , ARRAYSIZE ( renamePairs ) , L " foo " , L " bar$YY-$M-$D-$h-$m-$s-$f " , SYSTEMTIME { 2020 , 7 , 3 , 22 , 15 , 6 , 42 , 453 } , DEFAULT_FLAGS ) ;
}
TEST_METHOD ( VerifyFileAttributesPadding )
{
rename_pairs renamePairs [ ] = {
{ L " foo " , L " bar2020-07-22-15-06-42-453 " , true , true , 0 } ,
} ;
RenameHelper ( renamePairs , ARRAYSIZE ( renamePairs ) , L " foo " , L " bar$YYYY-$MM-$DD-$hh-$mm-$ss-$fff " , SYSTEMTIME { 2020 , 7 , 3 , 22 , 15 , 6 , 42 , 453 } , DEFAULT_FLAGS ) ;
}
2023-11-21 16:06:01 +01:00
TEST_METHOD ( VerifyFileAttributesMonthAndDayNames )
2020-08-20 02:53:09 +03:00
{
std : : locale : : global ( std : : locale ( " " ) ) ;
2020-12-14 12:28:12 +03:00
SYSTEMTIME fileTime = { 2020 , 1 , 3 , 1 , 15 , 6 , 42 , 453 } ;
2020-08-20 02:53:09 +03:00
wchar_t localeName [ LOCALE_NAME_MAX_LENGTH ] ;
wchar_t result [ MAX_PATH ] = L " bar " ;
wchar_t formattedDate [ MAX_PATH ] ;
if ( GetUserDefaultLocaleName ( localeName , LOCALE_NAME_MAX_LENGTH ) = = 0 )
StringCchCopy ( localeName , LOCALE_NAME_MAX_LENGTH , L " en_US " ) ;
2020-12-14 12:28:12 +03:00
GetDateFormatEx ( localeName , NULL , & fileTime , L " MMM " , formattedDate , MAX_PATH , NULL ) ;
2020-08-20 02:53:09 +03:00
formattedDate [ 0 ] = towupper ( formattedDate [ 0 ] ) ;
StringCchPrintf ( result , MAX_PATH , TEXT ( " %s%s " ) , result , formattedDate ) ;
2020-12-14 12:28:12 +03:00
GetDateFormatEx ( localeName , NULL , & fileTime , L " MMMM " , formattedDate , MAX_PATH , NULL ) ;
2020-08-20 02:53:09 +03:00
formattedDate [ 0 ] = towupper ( formattedDate [ 0 ] ) ;
StringCchPrintf ( result , MAX_PATH , TEXT ( " %s-%s " ) , result , formattedDate ) ;
2020-12-14 12:28:12 +03:00
GetDateFormatEx ( localeName , NULL , & fileTime , L " ddd " , formattedDate , MAX_PATH , NULL ) ;
2020-08-20 02:53:09 +03:00
formattedDate [ 0 ] = towupper ( formattedDate [ 0 ] ) ;
StringCchPrintf ( result , MAX_PATH , TEXT ( " %s-%s " ) , result , formattedDate ) ;
2020-12-14 12:28:12 +03:00
GetDateFormatEx ( localeName , NULL , & fileTime , L " dddd " , formattedDate , MAX_PATH , NULL ) ;
2020-08-20 02:53:09 +03:00
formattedDate [ 0 ] = towupper ( formattedDate [ 0 ] ) ;
StringCchPrintf ( result , MAX_PATH , TEXT ( " %s-%s " ) , result , formattedDate ) ;
rename_pairs renamePairs [ ] = {
{ L " foo " , result , true , true , 0 } ,
} ;
RenameHelper ( renamePairs , ARRAYSIZE ( renamePairs ) , L " foo " , L " bar$MMM-$MMMM-$DDD-$DDDD " , SYSTEMTIME { 2020 , 1 , 3 , 1 , 15 , 6 , 42 , 453 } , DEFAULT_FLAGS ) ;
2020-07-02 11:52:01 +03:00
}
2019-10-17 20:57:19 -07:00
} ;
2020-07-02 11:52:01 +03:00
}