diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2022-06-03 17:47:31 -0500 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2022-06-07 19:44:36 -0500 |
| commit | 8a4d03207633e9fdc364aaed82bd167f844679f9 (patch) | |
| tree | 9ca862bb51fd3507fc5867c292aef236e3411867 /src/libs/dutil/test/DUtilUnitTest/PathUtilTest.cpp | |
| parent | 5d35ff01e33b8ffdab04a49ddc5927185309391a (diff) | |
| download | wix-8a4d03207633e9fdc364aaed82bd167f844679f9.tar.gz wix-8a4d03207633e9fdc364aaed82bd167f844679f9.tar.bz2 wix-8a4d03207633e9fdc364aaed82bd167f844679f9.zip | |
Resolve paths while parsing them from the command line.
The current directory is a process wide setting that can potentially be changed by any thread.
Remove fileutil methods that had equivalent pathutil methods.
Diffstat (limited to 'src/libs/dutil/test/DUtilUnitTest/PathUtilTest.cpp')
| -rw-r--r-- | src/libs/dutil/test/DUtilUnitTest/PathUtilTest.cpp | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/src/libs/dutil/test/DUtilUnitTest/PathUtilTest.cpp b/src/libs/dutil/test/DUtilUnitTest/PathUtilTest.cpp index 52698b98..554c6f00 100644 --- a/src/libs/dutil/test/DUtilUnitTest/PathUtilTest.cpp +++ b/src/libs/dutil/test/DUtilUnitTest/PathUtilTest.cpp | |||
| @@ -3,6 +3,7 @@ | |||
| 3 | #include "precomp.h" | 3 | #include "precomp.h" |
| 4 | 4 | ||
| 5 | using namespace System; | 5 | using namespace System; |
| 6 | using namespace System::IO; | ||
| 6 | using namespace Xunit; | 7 | using namespace Xunit; |
| 7 | using namespace WixBuildTools::TestSupport; | 8 | using namespace WixBuildTools::TestSupport; |
| 8 | 9 | ||
| @@ -403,6 +404,70 @@ namespace DutilTests | |||
| 403 | } | 404 | } |
| 404 | 405 | ||
| 405 | [Fact] | 406 | [Fact] |
| 407 | void PathExpandEnvironmentVariablesTest() | ||
| 408 | { | ||
| 409 | HRESULT hr = S_OK; | ||
| 410 | LPWSTR sczExpanded = NULL; | ||
| 411 | LPCWSTR rgwzPaths[4] = | ||
| 412 | { | ||
| 413 | L"", L"", | ||
| 414 | L"\\\\?\\", L"%TEMP%;%PATH%;C:\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789\\abcdefghijklomnopqrstuvwxyz0123456789", | ||
| 415 | }; | ||
| 416 | |||
| 417 | try | ||
| 418 | { | ||
| 419 | for (DWORD i = 0; i < countof(rgwzPaths); i += 2) | ||
| 420 | { | ||
| 421 | hr = PathExpand(&sczExpanded, rgwzPaths[i + 1], PATH_EXPAND_ENVIRONMENT); | ||
| 422 | NativeAssert::Succeeded(hr, "PathExpand: {0}", rgwzPaths[i + 1]); | ||
| 423 | WixAssert::StringEqual((gcnew String(rgwzPaths[i])) + Environment::ExpandEnvironmentVariables(gcnew String(rgwzPaths[i + 1])), gcnew String(sczExpanded), false); | ||
| 424 | } | ||
| 425 | } | ||
| 426 | finally | ||
| 427 | { | ||
| 428 | ReleaseStr(sczExpanded); | ||
| 429 | } | ||
| 430 | } | ||
| 431 | |||
| 432 | [Fact] | ||
| 433 | void PathExpandFullPathTest() | ||
| 434 | { | ||
| 435 | HRESULT hr = S_OK; | ||
| 436 | LPWSTR sczExpanded = NULL; | ||
| 437 | LPCWSTR wzGreaterThanMaxPathString = L"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz\\a.txt"; | ||
| 438 | |||
| 439 | try | ||
| 440 | { | ||
| 441 | hr = PathExpand(&sczExpanded, wzGreaterThanMaxPathString, PATH_EXPAND_FULLPATH); | ||
| 442 | NativeAssert::Succeeded(hr, "Failed to expand greater than MAX_PATH string."); | ||
| 443 | WixAssert::StringEqual((gcnew String("\\\\?\\")) + Path::Combine(Environment::CurrentDirectory, gcnew String(wzGreaterThanMaxPathString)), gcnew String(sczExpanded), false); | ||
| 444 | } | ||
| 445 | finally | ||
| 446 | { | ||
| 447 | ReleaseStr(sczExpanded); | ||
| 448 | } | ||
| 449 | } | ||
| 450 | |||
| 451 | [Fact] | ||
| 452 | void PathExpandAllTest() | ||
| 453 | { | ||
| 454 | HRESULT hr = S_OK; | ||
| 455 | LPWSTR sczExpanded = NULL; | ||
| 456 | LPCWSTR wzRelativeEnvironmentVariableString = L"%USERNAME%\\abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz\\a.txt"; | ||
| 457 | |||
| 458 | try | ||
| 459 | { | ||
| 460 | hr = PathExpand(&sczExpanded, wzRelativeEnvironmentVariableString, PATH_EXPAND_ENVIRONMENT | PATH_EXPAND_FULLPATH); | ||
| 461 | NativeAssert::Succeeded(hr, "Failed to expand path."); | ||
| 462 | WixAssert::StringEqual((gcnew String("\\\\?\\")) + Path::Combine(Environment::CurrentDirectory, Environment::ExpandEnvironmentVariables(gcnew String(wzRelativeEnvironmentVariableString))), gcnew String(sczExpanded), false); | ||
| 463 | } | ||
| 464 | finally | ||
| 465 | { | ||
| 466 | ReleaseStr(sczExpanded); | ||
| 467 | } | ||
| 468 | } | ||
| 469 | |||
| 470 | [Fact] | ||
| 406 | void PathGetDirectoryTest() | 471 | void PathGetDirectoryTest() |
| 407 | { | 472 | { |
| 408 | HRESULT hr = S_OK; | 473 | HRESULT hr = S_OK; |
| @@ -436,6 +501,70 @@ namespace DutilTests | |||
| 436 | } | 501 | } |
| 437 | 502 | ||
| 438 | [Fact] | 503 | [Fact] |
| 504 | void PathGetFullPathNameTest() | ||
| 505 | { | ||
| 506 | HRESULT hr = S_OK; | ||
| 507 | LPWSTR sczPath = NULL; | ||
| 508 | LPCWSTR wzFileName = NULL; | ||
| 509 | LPCWSTR rgwzPaths[33] = | ||
| 510 | { | ||
| 511 | L"C:\\", L"C:\\", NULL, | ||
| 512 | L"C:\\file", L"C:\\file", L"file", | ||
| 513 | L"C:\\..\\file", L"C:\\file", L"file", | ||
| 514 | L"C:\\dir\\..\\file.txt", L"C:\\file.txt", L"file.txt", | ||
| 515 | L"C:\\dir\\\\file.txt.txt", L"C:\\dir\\file.txt.txt", L"file.txt.txt", | ||
| 516 | L"C:\\dir/.file", L"C:\\dir\\.file", L".file", | ||
| 517 | L"\\\\?\\C:\\file", L"\\\\?\\C:\\file", L"file", | ||
| 518 | L"\\\\server\\share\\file", L"\\\\server\\share\\file", L"file", | ||
| 519 | L"\\\\server\\share\\..\\file", L"\\\\server\\share\\file", L"file", | ||
| 520 | L"\\\\?\\UNC\\server\\share\\file", L"\\\\?\\UNC\\server\\share\\file", L"file", | ||
| 521 | L"C:\\abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz\\a.txt", L"C:\\abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz\\a.txt", L"a.txt", | ||
| 522 | }; | ||
| 523 | |||
| 524 | try | ||
| 525 | { | ||
| 526 | for (DWORD i = 0; i < countof(rgwzPaths); i += 3) | ||
| 527 | { | ||
| 528 | hr = PathGetFullPathName(rgwzPaths[i], &sczPath, &wzFileName, NULL); | ||
| 529 | NativeAssert::Succeeded(hr, "PathGetFullPathName: {0}", rgwzPaths[i]); | ||
| 530 | NativeAssert::StringEqual(rgwzPaths[i + 1], sczPath); | ||
| 531 | NativeAssert::StringEqual(rgwzPaths[i + 2], wzFileName); | ||
| 532 | } | ||
| 533 | } | ||
| 534 | finally | ||
| 535 | { | ||
| 536 | ReleaseStr(sczPath); | ||
| 537 | } | ||
| 538 | } | ||
| 539 | |||
| 540 | [Fact] | ||
| 541 | void PathGetFullPathNameRelativeTest() | ||
| 542 | { | ||
| 543 | HRESULT hr = S_OK; | ||
| 544 | LPWSTR sczPath = NULL; | ||
| 545 | LPCWSTR rgwzPaths[4] = | ||
| 546 | { | ||
| 547 | L"", | ||
| 548 | L"a.txt", | ||
| 549 | L"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz\\a.txt", | ||
| 550 | }; | ||
| 551 | |||
| 552 | try | ||
| 553 | { | ||
| 554 | for (DWORD i = 0; i < countof(rgwzPaths); ++i) | ||
| 555 | { | ||
| 556 | hr = PathGetFullPathName(rgwzPaths[i], &sczPath, NULL, NULL); | ||
| 557 | NativeAssert::Succeeded(hr, "PathGetFullPathName: {0}", rgwzPaths[i]); | ||
| 558 | WixAssert::StringEqual(Path::Combine(Environment::CurrentDirectory, gcnew String(rgwzPaths[i])), gcnew String(sczPath), false); | ||
| 559 | } | ||
| 560 | } | ||
| 561 | finally | ||
| 562 | { | ||
| 563 | ReleaseStr(sczPath); | ||
| 564 | } | ||
| 565 | } | ||
| 566 | |||
| 567 | [Fact] | ||
| 439 | void PathGetHierarchyArrayTest() | 568 | void PathGetHierarchyArrayTest() |
| 440 | { | 569 | { |
| 441 | HRESULT hr = S_OK; | 570 | HRESULT hr = S_OK; |
