1--TEST--
2Test touch() function : variation: various valid and invalid paths
3--CREDITS--
4Dave Kelsey <d_kelsey@uk.ibm.com>
5--SKIPIF--
6<?php
7if (substr(PHP_OS, 0, 3) != 'WIN') {
8    die('skip.. only for Windows');
9}
10?>
11--FILE--
12<?php
13/* Prototype  : bool touch(string filename [, int time [, int atime]])
14 * Description: Set modification time of file
15 * Source code: ext/standard/filestat.c
16 * Alias to functions:
17 */
18
19$workDir = "touchVar5.tmp";
20$subDirOrFile = "aSubDirOrFile";
21chdir(__DIR__);
22mkdir($workDir);
23$cwd = getcwd();
24
25$unixifiedDirOrFile = '/'.substr(str_replace('\\','/',$cwd).'/'.$workDir.'/'.$subDirOrFile, 3);
26
27$paths = array(
28			 // relative
29             $workDir.'\\'.$subDirOrFile,
30             '.\\'.$workDir.'\\'.$subDirOrFile,
31             $workDir.'\\..\\'.$workDir.'\\'.$subDirOrFile,
32
33             // relative bad path (note p8 msgs differ)
34             $workDir.'\\..\\BADDIR\\'.$subDirOrFile,
35             'BADDIR\\'.$subDirOrFile,
36
37             //absolute
38             $cwd.'\\'.$workDir.'\\'.$subDirOrFile,
39             $cwd.'\\.\\'.$workDir.'\\'.$subDirOrFile,
40             $cwd.'\\'.$workDir.'\\..\\'.$workDir.'\\'.$subDirOrFile,
41
42             //absolute bad path (note p8 msgs differ)
43             $cwd.'\\BADDIR\\'.$subDirOrFile,
44
45             //trailing separators
46             $workDir.'\\'.$subDirOrFile.'\\',
47             $cwd.'\\'.$workDir.'\\'.$subDirOrFile.'\\',
48
49             // multiple separators
50             $workDir.'\\\\'.$subDirOrFile,
51             $cwd.'\\\\'.$workDir.'\\\\'.$subDirOrFile,
52
53             // Unixified Dir Or File
54             $unixifiedDirOrFile,
55
56             );
57
58echo "*** Testing touch() : variation ***\n";
59
60echo "\n*** testing nonexisting paths ***\n";
61test_nonexisting($paths);
62
63echo "\n*** testing existing files ***\n";
64test_existing($paths, false);
65
66echo "\n*** testing existing directories ***\n";
67test_existing($paths, true);
68
69
70rmdir($workDir);
71
72
73
74function test_nonexisting($paths) {
75	foreach($paths as $path) {
76	   echo "--- testing $path ---\n";
77
78	   if (is_dir($path) || is_file($path)) {
79	      echo "FAILED: $path - exists\n";
80	   }
81	   else {
82	      $res = touch($path);
83	      if ($res === true) {
84	         // something was created
85	         if (file_exists($path)) {
86	              // something found
87			      if (is_dir($path)) {
88			         echo "FAILED: $path - unexpected directory\n";
89			      }
90			      else {
91			         echo "PASSED: $path - created\n";
92			         unlink($path);
93			      }
94	         }
95	         else {
96	            // nothing found
97	            echo "FAILED: $path - touch returned true, nothing there\n";
98	         }
99	      }
100	      else {
101	         // nothing created
102	         if (file_exists($path)) {
103	              //something found
104	              echo "FAILED: $path - touch returned false, something there\n";
105    		      if (is_dir($path)) {
106    		         rmdir($path);
107			      }
108			      else {
109			         unlink($path);
110			      }
111	         }
112	      }
113	   }
114	}
115}
116
117function test_existing($paths, $are_dirs) {
118	foreach($paths as $path) {
119	   if ($are_dirs) {
120	      $res = @mkdir($path);
121	      if ($res == true) {
122             test_path($path);
123             rmdir($path);
124          }
125	   }
126	   else {
127	      $h = @fopen($path,"w");
128	      if ($h !== false) {
129	         fclose($h);
130             test_path($path);
131             unlink($path);
132          }
133	   }
134	}
135}
136
137
138function test_path($path) {
139   echo "--- testing $path ---\n";
140   $org_atime = get_atime($path);
141   clearstatcache();
142   $res = touch($path,0,0);
143   $next_atime = get_atime($path);
144   if ($next_atime == $org_atime) {
145      echo "FAILED: $path - access time not changed\n";
146   }
147   else {
148      echo "PASSED: $path - touched\n";
149   }
150}
151
152function get_atime($path) {
153   $temp = stat($path);
154   return $temp['atime'];
155}
156
157
158?>
159===DONE===
160--EXPECTF--
161*** Testing touch() : variation ***
162
163*** testing nonexisting paths ***
164--- testing touchVar5.tmp\aSubDirOrFile ---
165PASSED: touchVar5.tmp\aSubDirOrFile - created
166--- testing .\touchVar5.tmp\aSubDirOrFile ---
167PASSED: .\touchVar5.tmp\aSubDirOrFile - created
168--- testing touchVar5.tmp\..\touchVar5.tmp\aSubDirOrFile ---
169PASSED: touchVar5.tmp\..\touchVar5.tmp\aSubDirOrFile - created
170--- testing touchVar5.tmp\..\BADDIR\aSubDirOrFile ---
171
172Warning: touch(): Unable to create file touchVar5.tmp\..\BADDIR\aSubDirOrFile because %s in %s on line %d
173--- testing BADDIR\aSubDirOrFile ---
174
175Warning: touch(): Unable to create file BADDIR\aSubDirOrFile because %s in %s on line %d
176--- testing %s\touchVar5.tmp\aSubDirOrFile ---
177PASSED: %s\touchVar5.tmp\aSubDirOrFile - created
178--- testing %s\.\touchVar5.tmp\aSubDirOrFile ---
179PASSED: %s\.\touchVar5.tmp\aSubDirOrFile - created
180--- testing %s\touchVar5.tmp\..\touchVar5.tmp\aSubDirOrFile ---
181PASSED: %s\touchVar5.tmp\..\touchVar5.tmp\aSubDirOrFile - created
182--- testing %s\BADDIR\aSubDirOrFile ---
183
184Warning: touch(): Unable to create file %s\BADDIR\aSubDirOrFile because %s in %s on line %d
185--- testing touchVar5.tmp\aSubDirOrFile\ ---
186
187Warning: touch(): Unable to create file touchVar5.tmp\aSubDirOrFile\ because Invalid argument in %s on line %d
188--- testing %s\touchVar5.tmp\aSubDirOrFile\ ---
189
190Warning: touch(): Unable to create file %s\touchVar5.tmp\aSubDirOrFile\ because Invalid argument in %s on line %d
191--- testing touchVar5.tmp\\aSubDirOrFile ---
192PASSED: touchVar5.tmp\\aSubDirOrFile - created
193--- testing %s\\touchVar5.tmp\\aSubDirOrFile ---
194PASSED: %s\\touchVar5.tmp\\aSubDirOrFile - created
195--- testing /%s/touchVar5.tmp/aSubDirOrFile ---
196PASSED: /%s/touchVar5.tmp/aSubDirOrFile - created
197
198*** testing existing files ***
199--- testing touchVar5.tmp\aSubDirOrFile ---
200PASSED: touchVar5.tmp\aSubDirOrFile - touched
201--- testing .\touchVar5.tmp\aSubDirOrFile ---
202PASSED: .\touchVar5.tmp\aSubDirOrFile - touched
203--- testing touchVar5.tmp\..\touchVar5.tmp\aSubDirOrFile ---
204PASSED: touchVar5.tmp\..\touchVar5.tmp\aSubDirOrFile - touched
205--- testing %s\touchVar5.tmp\aSubDirOrFile ---
206PASSED: %s\touchVar5.tmp\aSubDirOrFile - touched
207--- testing %s\.\touchVar5.tmp\aSubDirOrFile ---
208PASSED: %s\.\touchVar5.tmp\aSubDirOrFile - touched
209--- testing %s\touchVar5.tmp\..\touchVar5.tmp\aSubDirOrFile ---
210PASSED: %s\touchVar5.tmp\..\touchVar5.tmp\aSubDirOrFile - touched
211--- testing touchVar5.tmp\\aSubDirOrFile ---
212PASSED: touchVar5.tmp\\aSubDirOrFile - touched
213--- testing %s\\touchVar5.tmp\\aSubDirOrFile ---
214PASSED: %s\\touchVar5.tmp\\aSubDirOrFile - touched
215--- testing /%s/touchVar5.tmp/aSubDirOrFile ---
216PASSED: /%s/touchVar5.tmp/aSubDirOrFile - touched
217
218*** testing existing directories ***
219--- testing touchVar5.tmp\aSubDirOrFile ---
220PASSED: touchVar5.tmp\aSubDirOrFile - touched
221--- testing .\touchVar5.tmp\aSubDirOrFile ---
222PASSED: .\touchVar5.tmp\aSubDirOrFile - touched
223--- testing touchVar5.tmp\..\touchVar5.tmp\aSubDirOrFile ---
224PASSED: touchVar5.tmp\..\touchVar5.tmp\aSubDirOrFile - touched
225--- testing %s\touchVar5.tmp\aSubDirOrFile ---
226PASSED: %s\touchVar5.tmp\aSubDirOrFile - touched
227--- testing %s\.\touchVar5.tmp\aSubDirOrFile ---
228PASSED: %s\.\touchVar5.tmp\aSubDirOrFile - touched
229--- testing %s\touchVar5.tmp\..\touchVar5.tmp\aSubDirOrFile ---
230PASSED: %s\touchVar5.tmp\..\touchVar5.tmp\aSubDirOrFile - touched
231--- testing touchVar5.tmp\aSubDirOrFile\ ---
232PASSED: touchVar5.tmp\aSubDirOrFile\ - touched
233--- testing %s\touchVar5.tmp\aSubDirOrFile\ ---
234PASSED: %s\touchVar5.tmp\aSubDirOrFile\ - touched
235--- testing touchVar5.tmp\\aSubDirOrFile ---
236PASSED: touchVar5.tmp\\aSubDirOrFile - touched
237--- testing %s\\touchVar5.tmp\\aSubDirOrFile ---
238PASSED: %s\\touchVar5.tmp\\aSubDirOrFile - touched
239--- testing /%s/touchVar5.tmp/aSubDirOrFile ---
240PASSED: /%s/touchVar5.tmp/aSubDirOrFile - touched
241===DONE===
242