@@ -87,164 +87,6 @@ eventPredicate ev =
87-- Event lists to be matched with
87-- Event lists to be matched with
88-------------------------------------------------------------------------------
88-------------------------------------------------------------------------------
90−-- XXX Use a tuple (path, flags) instead of a string with flags
92−#if defined(CABAL_OS_WINDOWS)
94−singleDirCreateEvents :: [String]
95−singleDirCreateEvents =
98−singleDirRemoveEvents :: [String]
99−singleDirRemoveEvents =
102−singleDirRenameEvents :: [String]
103−singleDirRenameEvents =
105− , "dir1SingleRenamed_5"
108−nestedDirCreateEvents :: [String]
109−nestedDirCreateEvents =
112− , "dir1\\dir2\\dir3_1"
115−nestedDirRemoveEvents :: [String]
116−nestedDirRemoveEvents =
119− , "dir1\\dir2\\dir3_2"
120− , "dir1\\dir2_2","dir1_2"
123−nestedDirRenameEvents :: [String]
124−nestedDirRenameEvents =
126− , "dir1\\dir2\\dir3_4"
127− , "dir1\\dir2\\dir3Renamed_5"
131−createFileRootDirEvents :: [String]
132−createFileRootDirEvents =
133− [ "FileCreated.txt_1"
134− , "FileCreated.txt_3"
135− , "FileCreated.txt_3"
138−removeFileRootDirEvents :: [String]
139−removeFileRootDirEvents =
140− [ "FileCreated.txt_2" ]
142−renameFileRootDirEvents :: [String]
143−renameFileRootDirEvents =
144− [ "FileCreated.txt_4"
145− , "FileRenamed.txt_5"
148−createFileNestedDirEvents :: [String]
149−createFileNestedDirEvents =
150− [ "dir1\\dir2\\dir3\\FileCreated.txt_1"
151− , "dir1\\dir2\\dir3\\FileCreated.txt_3"
154−removeFileNestedDirEvents :: [String]
155−removeFileNestedDirEvents =
156− ["dir1\\dir2\\dir3\\FileCreated.txt_2"]
158−renameFileNestedDirEvents :: [String]
159−renameFileNestedDirEvents =
160− [ "dir1\\dir2\\dir3_3"
161− , "dir1\\dir2\\dir3\\FileCreated.txt_4"
162− , "dir1\\dir2\\dir3\\FileRenamed.txt_5"
165−-- | Convert an 'Event' record to a short representation for unit test.
166−showEventShort :: Event.Event -> String
167−showEventShort ev@Event.Event{..} =
168− Event.getRelPath ev ++ "_" ++ show eventFlags
172−singleDirCreateEvents :: [String]
173−singleDirCreateEvents =
174− [ "dir1Single_1073742080_Dir"
175− , "dir1Single_1073741856_Dir"
176− , "dir1Single_1073741825_Dir"
177− , "dir1Single_1073741840_Dir"
180−singleDirRemoveEvents :: [String]
181−singleDirRemoveEvents =
183− , "dir1Single_32768"
186−singleDirRenameEvents :: [String]
187−singleDirRenameEvents =
188− [ "dir1Single_1073741888_Dir"
189− , "dir1SingleRenamed_1073741952_Dir"
192−nestedDirCreateEvents :: [String]
193−nestedDirCreateEvents =
194− [ "dir1_1073742080_Dir"
195− , "dir1_1073741856_Dir"
196− , "dir1_1073741825_Dir"
197− , "dir1_1073741840_Dir"
200−nestedDirRemoveEvents :: [String]
201−nestedDirRemoveEvents =
202− [ "dir1/dir2/dir3_1073742336_Dir"
203− , "dir1/dir2_1073742336_Dir"
204− , "dir1_1073742336_Dir"
207−nestedDirRenameEvents :: [String]
208−nestedDirRenameEvents =
209− [ "dir1/dir2/dir3_1073741888_Dir"
210− , "dir1/dir2/dir3Renamed_1073741952_Dir"
213−createFileRootDirEvents :: [String]
214−createFileRootDirEvents =
215− [ "FileCreated.txt_256"
216− , "FileCreated.txt_32"
217− , "FileCreated.txt_2"
220−removeFileRootDirEvents :: [String]
221−removeFileRootDirEvents =
222− ["FileCreated.txt_512"]
224−renameFileRootDirEvents :: [String]
225−renameFileRootDirEvents =
226− [ "FileCreated.txt_64"
227− , "FileRenamed.txt_128"
230−createFileNestedDirEvents :: [String]
231−createFileNestedDirEvents =
232− [ "dir1/dir2/dir3/FileCreated.txt_256"
233− , "dir1/dir2/dir3/FileCreated.txt_32"
234− , "dir1/dir2/dir3/FileCreated.txt_2"
235− , "dir1/dir2/dir3/FileCreated.txt_8"
238−removeFileNestedDirEvents :: [String]
239−removeFileNestedDirEvents =
240− ["dir1/dir2/dir3/FileCreated.txt_512"]
242−renameFileNestedDirEvents :: [String]
243−renameFileNestedDirEvents =
244− [ "dir1/dir2/dir3/FileCreated.txt_64"
245− , "dir1/dir2/dir3/FileRenamed.txt_128"
248removeTrailingSlash :: Array Word8 -> Array Word8
90removeTrailingSlash :: Array Word8 -> Array Word8
249removeTrailingSlash path =
91removeTrailingSlash path =
250 if Array.length path == 0
92 if Array.length path == 0
@@ -261,14 +103,23 @@ removeTrailingSlash path =
261 $ Array.toStream path
103 $ Array.toStream path
262 else path
104 else path
106+-- XXX Return a tuple (path, flags) instead of appending flags to path. And
107+-- then check the flags using an event mask.
264showEventShort :: Event.Event -> String
109showEventShort :: Event.Event -> String
110+#if defined(CABAL_OS_WINDOWS)
111+-- | Convert an 'Event' record to a short representation for unit test.
112+showEventShort ev@Event.Event{..} =
113+ Event.getRelPath ev ++ "_" ++ show eventFlags
114+#elif defined(CABAL_OS_LINUX)
265showEventShort ev@Event.Event{..} =
115showEventShort ev@Event.Event{..} =
266 (utf8ToString $ removeTrailingSlash $ Event.getRelPath ev)
116 (utf8ToString $ removeTrailingSlash $ Event.getRelPath ev)
267 ++ "_" ++ show eventFlags
117 ++ "_" ++ show eventFlags
268 ++ showev Event.isDir "Dir"
118 ++ showev Event.isDir "Dir"
270 where showev f str = if f ev then "_" ++ str else ""
120 where showev f str = if f ev then "_" ++ str else ""
122+#error "Unsupported OS
274-------------------------------------------------------------------------------
125-------------------------------------------------------------------------------
@@ -374,12 +225,26 @@ testDesc =
374 ( "Create a single directory"
225 ( "Create a single directory"
375 , const (return ())
226 , const (return ())
376 , \fp -> createDirectoryIfMissing True (fp </> "dir1Single")
227 , \fp -> createDirectoryIfMissing True (fp </> "dir1Single")
377− , singleDirCreateEvents
228+#if defined(CABAL_OS_WINDOWS)
229+ , [ "dir1Single_1" ]
230+#elif defined(CABAL_OS_LINUX)
231+ , [ "dir1Single_1073742080_Dir"
232+ , "dir1Single_1073741856_Dir"
233+ , "dir1Single_1073741825_Dir"
234+ , "dir1Single_1073741840_Dir"
379 , ( "Remove a single directory"
238 , ( "Remove a single directory"
380 , \fp -> createDirectoryIfMissing True (fp </> "dir1Single")
239 , \fp -> createDirectoryIfMissing True (fp </> "dir1Single")
381 , \fp -> removeDirectory (fp </> "dir1Single")
240 , \fp -> removeDirectory (fp </> "dir1Single")
382− , singleDirRemoveEvents
241+#if defined(CABAL_OS_WINDOWS)
242+ , [ "dir1Single_2" ]
243+#elif defined(CABAL_OS_LINUX)
244+ , [ "dir1Single_1024"
245+ , "dir1Single_32768"
384 , ( "Rename a single directory"
249 , ( "Rename a single directory"
385 , \fp -> createDirectoryIfMissing True (fp </> "dir1Single")
250 , \fp -> createDirectoryIfMissing True (fp </> "dir1Single")
@@ -387,19 +252,49 @@ testDesc =
387 let spath = fp </> "dir1Single"
252 let spath = fp </> "dir1Single"
388 tpath = fp </> "dir1SingleRenamed"
253 tpath = fp </> "dir1SingleRenamed"
389 in renameDirectory spath tpath
254 in renameDirectory spath tpath
390− , singleDirRenameEvents
255+#if defined(CABAL_OS_WINDOWS)
257+ , "dir1SingleRenamed_5"
259+#elif defined(CABAL_OS_LINUX)
260+ , [ "dir1Single_1073741888_Dir"
261+ , "dir1SingleRenamed_1073741952_Dir"
392 , ( "Create a nested directory"
265 , ( "Create a nested directory"
393 , const (return ())
266 , const (return ())
395 createDirectoryIfMissing True (fp </> "dir1" </> "dir2" </> "dir3")
268 createDirectoryIfMissing True (fp </> "dir1" </> "dir2" </> "dir3")
396− , nestedDirCreateEvents
269+#if defined(CABAL_OS_WINDOWS)
272+ , "dir1\\dir2\\dir3_1"
274+#elif defined(CABAL_OS_LINUX)
275+ , [ "dir1_1073742080_Dir"
276+ , "dir1_1073741856_Dir"
277+ , "dir1_1073741825_Dir"
278+ , "dir1_1073741840_Dir"
398 , ( "Remove a nested directory"
282 , ( "Remove a nested directory"
400 createDirectoryIfMissing True (fp </> "dir1" </> "dir2" </> "dir3")
284 createDirectoryIfMissing True (fp </> "dir1" </> "dir2" </> "dir3")
401 , \fp -> removePathForcibly (fp </> "dir1")
285 , \fp -> removePathForcibly (fp </> "dir1")
402− , nestedDirRemoveEvents
286+#if defined(CABAL_OS_WINDOWS)
289+ , "dir1\\dir2\\dir3_2"
290+ , "dir1\\dir2_2","dir1_2"
292+#elif defined(CABAL_OS_LINUX)
293+ , [ "dir1/dir2/dir3_1073742336_Dir"
294+ , "dir1/dir2_1073742336_Dir"
295+ , "dir1_1073742336_Dir"
404 , ( "Rename a nested directory"
299 , ( "Rename a nested directory"
405 , \fp -> createDirectoryIfMissing True
300 , \fp -> createDirectoryIfMissing True
@@ -408,17 +303,41 @@ testDesc =
408 let spath = fp </> "dir1" </> "dir2" </> "dir3"
303 let spath = fp </> "dir1" </> "dir2" </> "dir3"
409 tpath = fp </> "dir1" </> "dir2" </> "dir3Renamed"
304 tpath = fp </> "dir1" </> "dir2" </> "dir3Renamed"
410 in renameDirectory spath tpath
305 in renameDirectory spath tpath
411− , nestedDirRenameEvents
306+#if defined(CABAL_OS_WINDOWS)
308+ , "dir1\\dir2\\dir3_4"
309+ , "dir1\\dir2\\dir3Renamed_5"
312+#elif defined(CABAL_OS_LINUX)
313+ , [ "dir1/dir2/dir3_1073741888_Dir"
314+ , "dir1/dir2/dir3Renamed_1073741952_Dir"
413 , ( "Create a file in root Dir"
318 , ( "Create a file in root Dir"
414 , const (return ())
319 , const (return ())
415 , \fp -> writeFile (fp </> "FileCreated.txt") "Test Data"
320 , \fp -> writeFile (fp </> "FileCreated.txt") "Test Data"
416− , createFileRootDirEvents
321+#if defined(CABAL_OS_WINDOWS)
322+ , [ "FileCreated.txt_1"
323+ , "FileCreated.txt_3"
324+ , "FileCreated.txt_3"
326+#elif defined(CABAL_OS_LINUX)
327+ , [ "FileCreated.txt_256"
328+ , "FileCreated.txt_32"
329+ , "FileCreated.txt_2"
418 , ( "Remove a file in root Dir"
333 , ( "Remove a file in root Dir"
419 , \fp -> writeFile (fp </> "FileCreated.txt") "Test Data"
334 , \fp -> writeFile (fp </> "FileCreated.txt") "Test Data"
420 , \fp -> removeFile (fp </> "FileCreated.txt")
335 , \fp -> removeFile (fp </> "FileCreated.txt")
421− , removeFileRootDirEvents
336+#if defined(CABAL_OS_WINDOWS)
337+ , [ "FileCreated.txt_2" ]
338+#elif defined(CABAL_OS_LINUX)
339+ , [ "FileCreated.txt_512" ]
423 , ( "Rename a file in root Dir"
342 , ( "Rename a file in root Dir"
424 , \fp -> writeFile (fp </> "FileCreated.txt") "Test Data"
343 , \fp -> writeFile (fp </> "FileCreated.txt") "Test Data"
@@ -426,7 +345,15 @@ testDesc =
426 let spath = (fp </> "FileCreated.txt")
345 let spath = (fp </> "FileCreated.txt")
427 tpath = (fp </> "FileRenamed.txt")
346 tpath = (fp </> "FileRenamed.txt")
428 in renamePath spath tpath
347 in renamePath spath tpath
429− , renameFileRootDirEvents
348+#if defined(CABAL_OS_WINDOWS)
349+ , [ "FileCreated.txt_4"
350+ , "FileRenamed.txt_5"
352+#elif defined(CABAL_OS_LINUX)
353+ , [ "FileCreated.txt_64"
354+ , "FileRenamed.txt_128"
431 , ( "Create a file in a nested Dir"
358 , ( "Create a file in a nested Dir"
@@ -434,7 +361,17 @@ testDesc =
435 let p = fp </> "dir1" </> "dir2" </> "dir3" </> "FileCreated.txt"
362 let p = fp </> "dir1" </> "dir2" </> "dir3" </> "FileCreated.txt"
436 in writeFile p "Test Data"
363 in writeFile p "Test Data"
437− , createFileNestedDirEvents
364+#if defined(CABAL_OS_WINDOWS)
365+ , [ "dir1\\dir2\\dir3\\FileCreated.txt_1"
366+ , "dir1\\dir2\\dir3\\FileCreated.txt_3"
368+#elif defined(CABAL_OS_LINUX)
369+ , [ "dir1/dir2/dir3/FileCreated.txt_256"
370+ , "dir1/dir2/dir3/FileCreated.txt_32"
371+ , "dir1/dir2/dir3/FileCreated.txt_2"
372+ , "dir1/dir2/dir3/FileCreated.txt_8"
439 , ( "Remove a file in a nested Dir"
376 , ( "Remove a file in a nested Dir"
@@ -446,7 +383,11 @@ testDesc =
447 let p = fp </> "dir1" </> "dir2" </> "dir3" </> "FileCreated.txt"
384 let p = fp </> "dir1" </> "dir2" </> "dir3" </> "FileCreated.txt"
448 in removeFile p
385 in removeFile p
449− , removeFileNestedDirEvents
386+#if defined(CABAL_OS_WINDOWS)
387+ , ["dir1\\dir2\\dir3\\FileCreated.txt_2"]
388+#elif defined(CABAL_OS_LINUX)
389+ , ["dir1/dir2/dir3/FileCreated.txt_512"]
451 , ( "Rename a file in a nested Dir"
392 , ( "Rename a file in a nested Dir"
@@ -459,7 +400,16 @@ testDesc =
459 let s = (fp </> "dir1" </> "dir2" </> "dir3" </> "FileCreated.txt")
400 let s = (fp </> "dir1" </> "dir2" </> "dir3" </> "FileCreated.txt")
460 t = (fp </> "dir1" </> "dir2" </> "dir3" </> "FileRenamed.txt")
401 t = (fp </> "dir1" </> "dir2" </> "dir3" </> "FileRenamed.txt")
461 in renamePath s t
402 in renamePath s t
462− , renameFileNestedDirEvents
403+#if defined(CABAL_OS_WINDOWS)
404+ , [ "dir1\\dir2\\dir3_3"
405+ , "dir1\\dir2\\dir3\\FileCreated.txt_4"
406+ , "dir1\\dir2\\dir3\\FileRenamed.txt_5"
408+#elif defined(CABAL_OS_LINUX)
409+ , [ "dir1/dir2/dir3/FileCreated.txt_64"
410+ , "dir1/dir2/dir3/FileRenamed.txt_128"