247 } 248 } 249 250 /** 251 * Tests all possible ways to invoke move 252 */ 253 static void testMove(Path dir1, Path dir2, boolean supportsLinks) 254 throws IOException 255 { 256 Path source, target, entry; 257 258 boolean sameDevice = getFileStore(dir1).equals(getFileStore(dir2)); 259 260 // -- regular file -- 261 262 /** 263 * Test: move regular file, target does not exist 264 */ 265 source = createSourceFile(dir1); 266 target = getTargetFile(dir2); 267 moveAndVerify(source, target); 268 delete(target); 269 270 /** 271 * Test: move regular file, target exists 272 */ 273 source = createSourceFile(dir1); 274 target = getTargetFile(dir2); 275 createFile(target); 276 try { 277 moveAndVerify(source, target); 278 throw new RuntimeException("FileAlreadyExistsException expected"); 279 } catch (FileAlreadyExistsException x) { 280 } 281 delete(target); 282 createDirectory(target); 283 try { 284 moveAndVerify(source, target); 285 throw new RuntimeException("FileAlreadyExistsException expected"); 286 } catch (FileAlreadyExistsException x) { 287 } 288 delete(source); 289 delete(target); 290 291 /** 292 * Test: move regular file, target does not exist 293 */ 294 source = createSourceFile(dir1); 295 target = getTargetFile(dir2); 296 moveAndVerify(source, target, REPLACE_EXISTING); 297 delete(target); 298 299 /** 300 * Test: move regular file, target exists 301 */ 302 source = createSourceFile(dir1); 303 target = getTargetFile(dir2); 304 createFile(target); 305 moveAndVerify(source, target, REPLACE_EXISTING); 306 delete(target); 307 308 /** 309 * Test: move regular file, target exists and is empty directory 310 */ 311 source = createSourceFile(dir1); 312 target = getTargetFile(dir2); 313 createDirectory(target); 314 moveAndVerify(source, target, REPLACE_EXISTING); 315 delete(target); 316 317 /** 318 * Test: move regular file, target exists and is non-empty directory 319 */ 320 source = createSourceFile(dir1); 321 target = getTargetFile(dir2); 322 createDirectory(target); 323 entry = target.resolve("foo"); 324 createFile(entry); 325 try { 326 moveAndVerify(source, target); 327 throw new RuntimeException("FileAlreadyExistsException expected"); 328 } catch (FileAlreadyExistsException x) { 329 } 330 delete(entry); 331 delete(source); 332 delete(target); 333 334 /** 335 * Test atomic move of regular file (same file store) 343 * Test atomic move of regular file (different file store) 344 */ 345 if (!sameDevice) { 346 source = createSourceFile(dir1); 347 target = getTargetFile(dir2); 348 try { 349 moveAndVerify(source, target, ATOMIC_MOVE); 350 throw new RuntimeException("AtomicMoveNotSupportedException expected"); 351 } catch (AtomicMoveNotSupportedException x) { 352 } 353 delete(source); 354 } 355 356 // -- directories -- 357 358 /* 359 * Test: move empty directory, target does not exist 360 */ 361 source = createSourceDirectory(dir1); 362 target = getTargetFile(dir2); 363 moveAndVerify(source, target); 364 delete(target); 365 366 /** 367 * Test: move empty directory, target exists 368 */ 369 source = createSourceDirectory(dir1); 370 target = getTargetFile(dir2); 371 createFile(target); 372 try { 373 moveAndVerify(source, target); 374 throw new RuntimeException("FileAlreadyExistsException expected"); 375 } catch (FileAlreadyExistsException x) { 376 } 377 delete(target); 378 createDirectory(target); 379 try { 380 moveAndVerify(source, target); 381 throw new RuntimeException("FileAlreadyExistsException expected"); 382 } catch (FileAlreadyExistsException x) { 383 } 384 delete(source); 385 delete(target); 386 387 /** 388 * Test: move empty directory, target does not exist 389 */ 390 source = createSourceDirectory(dir1); 391 target = getTargetFile(dir2); 392 moveAndVerify(source, target, REPLACE_EXISTING); 393 delete(target); 394 395 /** 396 * Test: move empty directory, target exists 397 */ 398 source = createSourceDirectory(dir1); 399 target = getTargetFile(dir2); 400 createFile(target); 401 moveAndVerify(source, target, REPLACE_EXISTING); 402 delete(target); 403 404 /** 405 * Test: move empty, target exists and is empty directory 406 */ 407 source = createSourceDirectory(dir1); 408 target = getTargetFile(dir2); 409 createDirectory(target); 410 moveAndVerify(source, target, REPLACE_EXISTING); 411 delete(target); 412 413 /** 414 * Test: move empty directory, target exists and is non-empty directory 415 */ 416 source = createSourceDirectory(dir1); 417 target = getTargetFile(dir2); 418 createDirectory(target); 419 entry = target.resolve("foo"); 420 createFile(entry); 421 try { 422 moveAndVerify(source, target, REPLACE_EXISTING); 423 throw new RuntimeException("DirectoryNotEmptyException expected"); 424 } catch (DirectoryNotEmptyException x) { 425 } 426 delete(entry); 427 delete(source); 428 delete(target); 429 430 /** 431 * Test: move non-empty directory (same file system) 432 */ 433 source = createSourceDirectory(dir1); 434 createFile(source.resolve("foo")); 435 target = getTargetFile(dir1); 436 moveAndVerify(source, target); 437 delete(target.resolve("foo")); 438 delete(target); 439 440 /** 441 * Test: move non-empty directory (different file store) 442 */ 443 if (!sameDevice) { 444 source = createSourceDirectory(dir1); 445 createFile(source.resolve("foo")); 446 target = getTargetFile(dir2); 447 try { 448 moveAndVerify(source, target); 449 throw new RuntimeException("IOException expected"); 450 } catch (IOException x) { 451 } 452 delete(source.resolve("foo")); 453 delete(source); 454 } 455 456 /** 457 * Test atomic move of directory (same file store) 458 */ 459 source = createSourceDirectory(dir1); 460 createFile(source.resolve("foo")); 461 target = getTargetFile(dir1); 462 moveAndVerify(source, target, ATOMIC_MOVE); 463 delete(target.resolve("foo")); 464 delete(target); 465 466 // -- symbolic links -- 467 468 /** 469 * Test: Move symbolic link to file, target does not exist 470 */ | 247 } 248 } 249 250 /** 251 * Tests all possible ways to invoke move 252 */ 253 static void testMove(Path dir1, Path dir2, boolean supportsLinks) 254 throws IOException 255 { 256 Path source, target, entry; 257 258 boolean sameDevice = getFileStore(dir1).equals(getFileStore(dir2)); 259 260 // -- regular file -- 261 262 /** 263 * Test: move regular file, target does not exist 264 */ 265 source = createSourceFile(dir1); 266 target = getTargetFile(dir2); 267 //XXX moveAndVerify(source, target); 268 //XXX delete(target); 269 270 /** 271 * Test: move regular file, target exists 272 */ 273 source = createSourceFile(dir1); 274 target = getTargetFile(dir2); 275 createFile(target); 276 try { 277 moveAndVerify(source, target); 278 throw new RuntimeException("FileAlreadyExistsException expected"); 279 } catch (FileAlreadyExistsException x) { 280 } 281 delete(target); 282 createDirectory(target); 283 try { 284 moveAndVerify(source, target); 285 throw new RuntimeException("FileAlreadyExistsException expected"); 286 } catch (FileAlreadyExistsException x) { 287 } 288 delete(source); 289 delete(target); 290 291 /** 292 * Test: move regular file, target does not exist 293 */ 294 source = createSourceFile(dir1); 295 target = getTargetFile(dir2); 296 //XXX moveAndVerify(source, target, REPLACE_EXISTING); 297 //XXX delete(target); 298 299 /** 300 * Test: move regular file, target exists 301 */ 302 source = createSourceFile(dir1); 303 target = getTargetFile(dir2); 304 //XXX createFile(target); 305 //XXX moveAndVerify(source, target, REPLACE_EXISTING); 306 //XXX delete(target); 307 308 /** 309 * Test: move regular file, target exists and is empty directory 310 */ 311 source = createSourceFile(dir1); 312 target = getTargetFile(dir2); 313 //XXX createDirectory(target); 314 //XXX moveAndVerify(source, target, REPLACE_EXISTING); 315 //XXX delete(target); 316 317 /** 318 * Test: move regular file, target exists and is non-empty directory 319 */ 320 source = createSourceFile(dir1); 321 target = getTargetFile(dir2); 322 createDirectory(target); 323 entry = target.resolve("foo"); 324 createFile(entry); 325 try { 326 moveAndVerify(source, target); 327 throw new RuntimeException("FileAlreadyExistsException expected"); 328 } catch (FileAlreadyExistsException x) { 329 } 330 delete(entry); 331 delete(source); 332 delete(target); 333 334 /** 335 * Test atomic move of regular file (same file store) 343 * Test atomic move of regular file (different file store) 344 */ 345 if (!sameDevice) { 346 source = createSourceFile(dir1); 347 target = getTargetFile(dir2); 348 try { 349 moveAndVerify(source, target, ATOMIC_MOVE); 350 throw new RuntimeException("AtomicMoveNotSupportedException expected"); 351 } catch (AtomicMoveNotSupportedException x) { 352 } 353 delete(source); 354 } 355 356 // -- directories -- 357 358 /* 359 * Test: move empty directory, target does not exist 360 */ 361 source = createSourceDirectory(dir1); 362 target = getTargetFile(dir2); 363 //XXX moveAndVerify(source, target); 364 //XXX delete(target); 365 366 /** 367 * Test: move empty directory, target exists 368 */ 369 source = createSourceDirectory(dir1); 370 target = getTargetFile(dir2); 371 createFile(target); 372 try { 373 moveAndVerify(source, target); 374 throw new RuntimeException("FileAlreadyExistsException expected"); 375 } catch (FileAlreadyExistsException x) { 376 } 377 delete(target); 378 createDirectory(target); 379 try { 380 moveAndVerify(source, target); 381 throw new RuntimeException("FileAlreadyExistsException expected"); 382 } catch (FileAlreadyExistsException x) { 383 } 384 delete(source); 385 delete(target); 386 387 /** 388 * Test: move empty directory, target does not exist 389 */ 390 source = createSourceDirectory(dir1); 391 target = getTargetFile(dir2); 392 //XXX moveAndVerify(source, target, REPLACE_EXISTING); 393 //XXX delete(target); 394 395 /** 396 * Test: move empty directory, target exists 397 */ 398 source = createSourceDirectory(dir1); 399 target = getTargetFile(dir2); 400 //XXX createFile(target); 401 //XXX moveAndVerify(source, target, REPLACE_EXISTING); 402 //XXX delete(target); 403 404 /** 405 * Test: move empty, target exists and is empty directory 406 */ 407 source = createSourceDirectory(dir1); 408 target = getTargetFile(dir2); 409 //XXX createDirectory(target); 410 //XXX moveAndVerify(source, target, REPLACE_EXISTING); 411 //XXX delete(target); 412 413 /** 414 * Test: move empty directory, target exists and is non-empty directory 415 */ 416 source = createSourceDirectory(dir1); 417 target = getTargetFile(dir2); 418 createDirectory(target); 419 entry = target.resolve("foo"); 420 createFile(entry); 421 try { 422 moveAndVerify(source, target, REPLACE_EXISTING); 423 throw new RuntimeException("DirectoryNotEmptyException expected"); 424 } catch (DirectoryNotEmptyException x) { 425 } 426 delete(entry); 427 delete(source); 428 delete(target); 429 430 /** 431 * Test: move non-empty directory (same file system) 432 */ 433 source = createSourceDirectory(dir1); 434 createFile(source.resolve("foo")); 435 target = getTargetFile(dir1); 436 moveAndVerify(source, target); 437 delete(target.resolve("foo")); 438 delete(target); 439 440 /** 441 * Test: move non-empty directory (different file store) 442 */ 443 if (!sameDevice) { 444 System.out.println("Moving non-empty directory to different store"); 445 source = createSourceDirectory(dir1); 446 createFile(source.resolve("foo")); 447 target = getTargetFile(dir2); 448 try { 449 moveAndVerify(source, target); 450 throw new RuntimeException("IOException expected"); 451 } catch (IOException x) { 452 x.printStackTrace(); 453 } 454 delete(source.resolve("foo")); 455 delete(source); 456 } 457 458 /** 459 * Test atomic move of directory (same file store) 460 */ 461 source = createSourceDirectory(dir1); 462 createFile(source.resolve("foo")); 463 target = getTargetFile(dir1); 464 moveAndVerify(source, target, ATOMIC_MOVE); 465 delete(target.resolve("foo")); 466 delete(target); 467 468 // -- symbolic links -- 469 470 /** 471 * Test: Move symbolic link to file, target does not exist 472 */ |