| 1 | // Licensed to the .NET Foundation under one or more agreements. |
| 2 | // The .NET Foundation licenses this file to you under the MIT license. |
| 3 | // See the LICENSE file in the project root for more information. |
| 4 | |
| 5 | /*===================================================================== |
| 6 | ** |
| 7 | ** Source: FILECanonicalizePath.c (test 1) |
| 8 | ** |
| 9 | ** Purpose: Tests the PAL implementation of the FILECanonicalizePath function. |
| 10 | ** |
| 11 | ** |
| 12 | **===================================================================*/ |
| 13 | |
| 14 | #include <palsuite.h> |
| 15 | |
| 16 | extern "C" void FILECanonicalizePath(LPSTR lpUnixPath); |
| 17 | |
| 18 | void TestCase(LPSTR input, LPSTR expectedOutput); |
| 19 | |
| 20 | int __cdecl main(int argc, char *argv[]) |
| 21 | { |
| 22 | if (PAL_Initialize(argc,argv) != 0) |
| 23 | { |
| 24 | return FAIL; |
| 25 | } |
| 26 | |
| 27 | // Case 01: /<name> should not change |
| 28 | TestCase("/Test" , "/Test" ); |
| 29 | |
| 30 | // Case 02: /<name>/<name2> should not change |
| 31 | TestCase("/Test/Foo" , "/Test/Foo" ); |
| 32 | |
| 33 | // Case 03: // transforms to / |
| 34 | TestCase("//" , "/" ); |
| 35 | |
| 36 | // Case 04: /./ transforms to / |
| 37 | TestCase("/./" , "/" ); |
| 38 | |
| 39 | // Case 05: /<name>/../ transforms to / |
| 40 | TestCase("/Test/../" , "/" ); |
| 41 | |
| 42 | // Case 06: /Test/Foo/.. transforms to /Test |
| 43 | TestCase("/Test/Foo/.." , "/Test" ); |
| 44 | |
| 45 | // Case 07: /Test/.. transforms to / |
| 46 | TestCase("/Test/.." , "/" ); |
| 47 | |
| 48 | // Case 08: /. transforms to / |
| 49 | TestCase("/." , "/" ); |
| 50 | |
| 51 | // Case 09: /<name/. transforms to /<name> |
| 52 | TestCase("/Test/." , "/Test" ); |
| 53 | |
| 54 | // Case 10: /<name>/../. transforms to / |
| 55 | TestCase("/Test/../." , "/" ); |
| 56 | |
| 57 | // Case 11: /.. transforms to / |
| 58 | TestCase("/.." , "/" ); |
| 59 | |
| 60 | PAL_Terminate(); |
| 61 | return PASS; |
| 62 | } |
| 63 | |
| 64 | void TestCase(LPSTR input, LPSTR expectedOutput) |
| 65 | { |
| 66 | // Save the input for debug logging since the input is edited in-place |
| 67 | char* pOriginalInput = (char*)malloc(strlen(input) * sizeof(char) + 1); |
| 68 | strcpy(pOriginalInput, input); |
| 69 | |
| 70 | char* pInput = (char*)malloc(strlen(input) * sizeof(char) + 1); |
| 71 | strcpy(pInput, pOriginalInput); |
| 72 | |
| 73 | FILECanonicalizePath(pInput); |
| 74 | if (strcmp(pInput, expectedOutput) != 0) |
| 75 | { |
| 76 | free(pOriginalInput); |
| 77 | free(pInput); |
| 78 | Fail("FILECanonicalizePath error: input %s did not match expected output %s; got %s instead" , pOriginalInput, expectedOutput, pInput); |
| 79 | } |
| 80 | |
| 81 | free(pOriginalInput); |
| 82 | free(pInput); |
| 83 | } |
| 84 | |