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
16extern "C" void FILECanonicalizePath(LPSTR lpUnixPath);
17
18void TestCase(LPSTR input, LPSTR expectedOutput);
19
20int __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
64void 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