// use std::io::{ErrorKind, Result}; use std::path::{Path, PathBuf}; use std::sync::mpsc; use std::thread; extern crate fs_extra; use fs_extra::error::*; use fs_extra::file::*; const TEST_FOLDER: &'static str = "./tests/temp/file"; fn files_eq(file1: P, file2: Q) -> Result where P: AsRef, Q: AsRef, { let content1 = read_to_string(file1)?; let content2 = read_to_string(file2)?; Ok(content1 == content2) } #[test] fn it_read_and_write_work() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_read_and_write_work"); test_file.push("test.txt"); fs_extra::dir::create_all(test_file.parent().unwrap(), true).unwrap(); let content1 = "test_1"; let content2 = "test_2"; write_all(&test_file, &content1).unwrap(); assert!(test_file.exists()); let read1 = read_to_string(&test_file).unwrap(); assert_eq!(content1, read1); write_all(&test_file, &content2).unwrap(); let read2 = read_to_string(&test_file).unwrap(); assert_eq!(content2, read2); } #[test] fn it_read_not_exist_file() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_read_not_exist_file"); test_file.push("test.txt"); fs_extra::dir::create_all(test_file.parent().unwrap(), true).unwrap(); assert!(!test_file.exists()); match read_to_string(&test_file) { Ok(_) => panic!("should be error"), Err(err) => match err.kind { ErrorKind::NotFound => {} _ => panic!("wrong error"), }, } } #[test] fn it_read_not_file() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_read_not_file"); fs_extra::dir::create_all(&test_file, true).unwrap(); match read_to_string(&test_file) { Ok(_) => panic!("should be error"), Err(err) => match err.kind { ErrorKind::InvalidFile => {} _ => panic!("wrong error"), }, } } #[test] fn it_write_not_file() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_write_not_file"); test_file.push("test.txt"); fs_extra::dir::create_all(test_file.parent().unwrap(), true).unwrap(); assert!(!test_file.exists()); test_file.pop(); match write_all(test_file, "content") { Ok(_) => panic!("should be error"), Err(err) => match err.kind { ErrorKind::InvalidFile => {} _ => panic!("wrong error"), }, } } #[test] fn it_remove_file() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_remove_file"); test_file.push("test.txt"); fs_extra::dir::create_all(test_file.parent().unwrap(), true).unwrap(); write_all(&test_file, "test").unwrap(); assert!(test_file.exists()); remove(&test_file).unwrap(); assert!(!test_file.exists()); } #[test] fn it_copy_work() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_copy_work"); let mut test_file_out = test_file.clone(); test_file.push("test.txt"); test_file_out.push("out"); test_file_out.push("test.txt"); fs_extra::dir::create_all(&test_file.parent().unwrap(), true).unwrap(); fs_extra::dir::create_all(&test_file_out.parent().unwrap(), true).unwrap(); write_all(&test_file, "test_data").unwrap(); assert!(test_file.exists()); assert!(!test_file_out.exists()); let options = CopyOptions::new(); copy(&test_file, &test_file_out, &options).unwrap(); assert!(test_file.exists()); assert!(test_file_out.exists()); assert_eq!(test_file.file_name(), test_file_out.file_name()); assert!(files_eq(test_file, test_file_out).unwrap()); } #[test] fn it_copy_not_file() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_copy_work"); let mut test_file_out = test_file.clone(); test_file.push("test.txt"); test_file_out.push("out"); test_file_out.push("test.txt"); fs_extra::dir::create_all(&test_file.parent().unwrap(), true).unwrap(); fs_extra::dir::create_all(&test_file_out.parent().unwrap(), true).unwrap(); write_all(&test_file, "test_data").unwrap(); assert!(test_file.exists()); assert!(!test_file_out.exists()); test_file.pop(); let options = CopyOptions::new(); match copy(&test_file, &test_file_out, &options) { Err(err) => match err.kind { ErrorKind::InvalidFile => { let wrong_path = format!("Path \"{}\" is not a file!", test_file.to_str().unwrap()); assert_eq!(wrong_path, err.to_string()); } _ => { panic!("wrong error"); } }, Ok(_) => { panic!("should be error"); } } } #[test] fn it_copy_source_not_exist() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_copy_source_not_exist"); let mut test_file_out = test_file.clone(); test_file.push("test1.txt"); test_file_out.push("out"); test_file_out.push("test.txt"); fs_extra::dir::create_all(&test_file.parent().unwrap(), true).unwrap(); fs_extra::dir::create_all(&test_file_out.parent().unwrap(), true).unwrap(); assert!(!test_file.exists()); let options = CopyOptions::new(); match copy(&test_file, test_file_out, &options) { Ok(_) => panic!("should be error"), Err(err) => match err.kind { ErrorKind::NotFound => { let wrong_path = format!( "Path \"{}\" does not exist or you don't have \ access!", test_file.to_str().unwrap() ); assert_eq!(wrong_path, err.to_string()); () } _ => panic!("wrong error"), }, } } #[test] fn it_copy_exist_overwrite() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_copy_exist_overwrite"); let mut test_file_out = test_file.clone(); test_file.push("test.txt"); test_file_out.push("out"); test_file_out.push("test.txt"); fs_extra::dir::create_all(&test_file.parent().unwrap(), true).unwrap(); fs_extra::dir::create_all(&test_file_out.parent().unwrap(), true).unwrap(); write_all(&test_file, "test_data").unwrap(); let mut options = CopyOptions::new(); copy(&test_file, &test_file_out, &options).unwrap(); assert!(test_file.exists()); assert!(files_eq(&test_file, &test_file_out).unwrap()); options.overwrite = true; write_all(&test_file, "test_data2").unwrap(); match copy(&test_file, &test_file_out, &options) { Ok(_) => { assert!(test_file.exists()); assert_eq!(read_to_string(test_file_out).unwrap(), "test_data2"); () } Err(err) => panic!(err.to_string()), } } #[test] fn it_copy_exist_not_overwrite() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_copy_exist_not_overwrite"); let mut test_file_out = test_file.clone(); test_file.push("test.txt"); test_file_out.push("out"); test_file_out.push("test.txt"); fs_extra::dir::create_all(&test_file.parent().unwrap(), true).unwrap(); fs_extra::dir::create_all(&test_file_out.parent().unwrap(), true).unwrap(); write_all(&test_file, "test_data").unwrap(); let mut options = CopyOptions::new(); copy(&test_file, &test_file_out, &options).unwrap(); assert!(test_file.exists()); options.overwrite = false; write_all(&test_file, "test_data2").unwrap(); match copy(&test_file, &test_file_out, &options) { Ok(_) => panic!("should be error"), Err(err) => { let file_path = format!("Path \"{}\" exists", test_file_out.to_str().unwrap()); assert_eq!(file_path, err.to_string()); assert!(!files_eq(test_file, test_file_out).unwrap()); () } } } #[test] fn it_copy_exist_skip_exist() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_copy_exist_skip_exist"); let mut test_file_out = test_file.clone(); test_file.push("test.txt"); test_file_out.push("out"); test_file_out.push("test.txt"); fs_extra::dir::create_all(&test_file.parent().unwrap(), true).unwrap(); fs_extra::dir::create_all(&test_file_out.parent().unwrap(), true).unwrap(); write_all(&test_file, "test_data").unwrap(); let mut options = CopyOptions::new(); copy(&test_file, &test_file_out, &options).unwrap(); assert!(test_file.exists()); options.skip_exist = true; write_all(&test_file, "test_data2").unwrap(); match copy(&test_file, &test_file_out, &options) { Ok(_) => { assert!(!files_eq(test_file, test_file_out).unwrap()); () } Err(_) => panic!("should be error"), } } #[test] fn it_copy_exist_overwrite_and_skip_exist() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_copy_exist_overwrite_and_skip_exist"); let mut test_file_out = test_file.clone(); test_file.push("test.txt"); test_file_out.push("out"); test_file_out.push("test.txt"); fs_extra::dir::create_all(&test_file.parent().unwrap(), true).unwrap(); fs_extra::dir::create_all(&test_file_out.parent().unwrap(), true).unwrap(); write_all(&test_file, "test_data").unwrap(); let mut options = CopyOptions::new(); copy(&test_file, &test_file_out, &options).unwrap(); assert!(test_file.exists()); assert!(files_eq(&test_file, &test_file_out).unwrap()); options.overwrite = true; options.skip_exist = true; write_all(&test_file, "test_data2").unwrap(); match copy(&test_file, &test_file_out, &options) { Ok(_) => { assert!(test_file.exists()); assert_eq!(read_to_string(test_file_out).unwrap(), "test_data2"); () } Err(err) => panic!(err.to_string()), } } #[test] fn it_copy_with_progress_work() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_copy_with_progress_work"); let mut test_file_out = test_file.clone(); test_file.push("test.txt"); test_file_out.push("out"); test_file_out.push("test.txt"); fs_extra::dir::create_all(&test_file.parent().unwrap(), true).unwrap(); fs_extra::dir::create_all(&test_file_out.parent().unwrap(), true).unwrap(); write_all(&test_file, "test_data").unwrap(); assert!(test_file.exists()); assert!(!test_file_out.exists()); let mut options = CopyOptions::new(); options.buffer_size = 1; let (tx, rx) = mpsc::channel(); thread::spawn(move || { let func_test = |process_info: TransitProcess| { tx.send(process_info).unwrap(); }; copy_with_progress(&test_file, &test_file_out, &options, func_test).unwrap(); assert!(test_file.exists()); assert!(test_file_out.exists()); assert_eq!(test_file.file_name(), test_file_out.file_name()); assert!(files_eq(test_file, test_file_out).unwrap()); }); for i in 1..10 { let process_info: TransitProcess = rx.recv().unwrap(); assert_eq!(i, process_info.copied_bytes); assert_eq!(9, process_info.total_bytes); } } #[test] fn it_copy_progress_not_file() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_copy_progress_not_file"); let mut test_file_out = test_file.clone(); test_file.push("test.txt"); test_file_out.push("out"); test_file_out.push("test.txt"); fs_extra::dir::create_all(&test_file.parent().unwrap(), true).unwrap(); fs_extra::dir::create_all(&test_file_out.parent().unwrap(), true).unwrap(); write_all(&test_file, "test_data").unwrap(); assert!(test_file.exists()); assert!(!test_file_out.exists()); test_file.pop(); let options = CopyOptions::new(); let func_test = |process_info: TransitProcess| println!("{}", process_info.total_bytes); match copy_with_progress(&test_file, &test_file_out, &options, func_test) { Err(err) => match err.kind { ErrorKind::InvalidFile => { let wrong_path = format!("Path \"{}\" is not a file!", test_file.to_str().unwrap()); assert_eq!(wrong_path, err.to_string()); } _ => { panic!("wrong error"); } }, Ok(_) => { panic!("should be error"); } } } #[test] fn it_copy_with_progress_work_dif_buf_size() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_copy_with_progress_work_dif_buf_size"); let mut test_file_out = test_file.clone(); test_file.push("test.txt"); test_file_out.push("out"); test_file_out.push("test.txt"); fs_extra::dir::create_all(&test_file.parent().unwrap(), true).unwrap(); fs_extra::dir::create_all(&test_file_out.parent().unwrap(), true).unwrap(); write_all(&test_file, "test_data_").unwrap(); assert!(test_file.exists()); assert!(!test_file_out.exists()); let mut options = CopyOptions::new(); options.buffer_size = 1; let (tx, rx) = mpsc::channel(); thread::spawn(move || { let func_test = |process_info: TransitProcess| { tx.send(process_info).unwrap(); }; copy_with_progress(&test_file, &test_file_out, &options, func_test).unwrap(); assert!(test_file.exists()); assert!(test_file_out.exists()); assert_eq!(test_file.file_name(), test_file_out.file_name()); assert!(files_eq(&test_file, &test_file_out).unwrap()); let mut options = CopyOptions::new(); options.buffer_size = 2; options.overwrite = true; let (tx, rx) = mpsc::channel(); thread::spawn(move || { let func_test = |process_info: TransitProcess| { tx.send(process_info).unwrap(); }; copy_with_progress(&test_file, &test_file_out, &options, func_test).unwrap(); }); for i in 1..6 { let process_info: TransitProcess = rx.recv().unwrap(); assert_eq!(i * 2, process_info.copied_bytes); assert_eq!(10, process_info.total_bytes); } }); for i in 1..11 { let process_info: TransitProcess = rx.recv().unwrap(); assert_eq!(i, process_info.copied_bytes); assert_eq!(10, process_info.total_bytes); } } #[test] fn it_copy_with_progress_source_not_exist() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_copy_with_progress_source_not_exist"); let mut test_file_out = test_file.clone(); test_file.push("test1.txt"); test_file_out.push("out"); test_file_out.push("test.txt"); fs_extra::dir::create_all(&test_file.parent().unwrap(), true).unwrap(); fs_extra::dir::create_all(&test_file_out.parent().unwrap(), true).unwrap(); assert!(!test_file.exists()); let options = CopyOptions::new(); let func_test = |process_info: TransitProcess| { println!("{}", process_info.total_bytes); }; match copy_with_progress(&test_file, &test_file_out, &options, func_test) { Ok(_) => panic!("should be error"), Err(err) => match err.kind { ErrorKind::NotFound => { let wrong_path = format!( "Path \"{}\" does not exist or you don't have \ access!", test_file.to_str().unwrap() ); assert_eq!(wrong_path, err.to_string()); () } _ => panic!("wrong error"), }, } } #[test] fn it_copy_with_progress_exist_overwrite() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_copy_with_progress_exist_overwrite"); let mut test_file_out = test_file.clone(); test_file.push("test.txt"); test_file_out.push("out"); test_file_out.push("test.txt"); fs_extra::dir::create_all(&test_file.parent().unwrap(), true).unwrap(); fs_extra::dir::create_all(&test_file_out.parent().unwrap(), true).unwrap(); write_all(&test_file, "test_data").unwrap(); let mut options = CopyOptions::new(); copy(&test_file, &test_file_out, &options).unwrap(); assert!(test_file.exists()); assert!(files_eq(&test_file, &test_file_out).unwrap()); options.overwrite = true; write_all(&test_file, "test_data2").unwrap(); let func_test = |process_info: TransitProcess| { println!("{}", process_info.total_bytes); }; match copy_with_progress(&test_file, &test_file_out, &options, func_test) { Ok(_) => { assert!(test_file.exists()); assert_eq!(read_to_string(test_file_out).unwrap(), "test_data2"); () } Err(err) => panic!(err.to_string()), } } #[test] fn it_copy_with_progress_exist_not_overwrite() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_copy_with_progress_exist_not_overwrite"); let mut test_file_out = test_file.clone(); test_file.push("test.txt"); test_file_out.push("out"); test_file_out.push("test.txt"); fs_extra::dir::create_all(&test_file.parent().unwrap(), true).unwrap(); fs_extra::dir::create_all(&test_file_out.parent().unwrap(), true).unwrap(); write_all(&test_file, "test_data").unwrap(); let mut options = CopyOptions::new(); copy(&test_file, &test_file_out, &options).unwrap(); assert!(test_file.exists()); options.overwrite = false; write_all(&test_file, "test_data2").unwrap(); let func_test = |process_info: TransitProcess| { println!("{}", process_info.total_bytes); }; match copy_with_progress(&test_file, &test_file_out, &options, func_test) { Ok(_) => panic!("should be error"), Err(err) => { let file_path = format!("Path \"{}\" exists", test_file_out.to_str().unwrap()); assert_eq!(file_path, err.to_string()); assert!(!files_eq(test_file, test_file_out).unwrap()); () } } } #[test] fn it_copy_with_progress_exist_skip_exist() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_copy_with_progress_exist_skip_exist"); let mut test_file_out = test_file.clone(); test_file.push("test.txt"); test_file_out.push("out"); test_file_out.push("test.txt"); fs_extra::dir::create_all(&test_file.parent().unwrap(), true).unwrap(); fs_extra::dir::create_all(&test_file_out.parent().unwrap(), true).unwrap(); write_all(&test_file, "test_data").unwrap(); let mut options = CopyOptions::new(); copy(&test_file, &test_file_out, &options).unwrap(); assert!(test_file.exists()); options.skip_exist = true; write_all(&test_file, "test_data2").unwrap(); let func_test = |process_info: TransitProcess| { println!("{}", process_info.total_bytes); }; match copy_with_progress(&test_file, &test_file_out, &options, func_test) { Ok(_) => { assert!(!files_eq(test_file, test_file_out).unwrap()); () } Err(_) => panic!("should be error"), } } #[test] fn it_copy_with_progress_exist_overwrite_and_skip_exist() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_copy_with_progress_exist_overwrite_and_skip_exist"); let mut test_file_out = test_file.clone(); test_file.push("test.txt"); test_file_out.push("out"); test_file_out.push("test.txt"); fs_extra::dir::create_all(&test_file.parent().unwrap(), true).unwrap(); fs_extra::dir::create_all(&test_file_out.parent().unwrap(), true).unwrap(); write_all(&test_file, "test_data").unwrap(); let mut options = CopyOptions::new(); copy(&test_file, &test_file_out, &options).unwrap(); assert!(test_file.exists()); assert!(files_eq(&test_file, &test_file_out).unwrap()); options.overwrite = true; options.skip_exist = true; write_all(&test_file, "test_data2").unwrap(); let func_test = |process_info: TransitProcess| { println!("{}", process_info.total_bytes); }; match copy_with_progress(&test_file, &test_file_out, &options, func_test) { Ok(_) => { assert!(test_file.exists()); assert_eq!(read_to_string(test_file_out).unwrap(), "test_data2"); () } Err(err) => panic!(err.to_string()), } } #[test] fn it_move_work() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_move_work"); let mut test_file_out = test_file.clone(); test_file.push("test.txt"); test_file_out.push("out"); test_file_out.push("test.txt"); fs_extra::dir::create_all(&test_file.parent().unwrap(), true).unwrap(); fs_extra::dir::create_all(&test_file_out.parent().unwrap(), true).unwrap(); write_all(&test_file, "test_data").unwrap(); assert!(test_file.exists()); assert!(!test_file_out.exists()); let options = CopyOptions::new(); let old_name = test_file.file_name(); let old_content = read_to_string(&test_file).unwrap(); move_file(&test_file, &test_file_out, &options).unwrap(); assert!(!test_file.exists()); assert!(test_file_out.exists()); assert_eq!(old_name, test_file_out.file_name()); let new_content = read_to_string(&test_file_out).unwrap(); assert_eq!(old_content, new_content); } #[test] fn it_move_not_file() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_move_work"); let mut test_file_out = test_file.clone(); test_file.push("test.txt"); test_file_out.push("out"); test_file_out.push("test.txt"); fs_extra::dir::create_all(&test_file.parent().unwrap(), true).unwrap(); fs_extra::dir::create_all(&test_file_out.parent().unwrap(), true).unwrap(); write_all(&test_file, "test_data").unwrap(); assert!(test_file.exists()); assert!(!test_file_out.exists()); test_file.pop(); let options = CopyOptions::new(); match move_file(&test_file, &test_file_out, &options) { Err(err) => match err.kind { ErrorKind::InvalidFile => { let wrong_path = format!("Path \"{}\" is not a file!", test_file.to_str().unwrap()); assert_eq!(wrong_path, err.to_string()); } _ => { panic!("wrong error"); } }, Ok(_) => { panic!("should be error"); } } } #[test] fn it_move_source_not_exist() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_move_source_not_exist"); let mut test_file_out = test_file.clone(); test_file.push("test1.txt"); test_file_out.push("out"); test_file_out.push("test.txt"); fs_extra::dir::create_all(&test_file.parent().unwrap(), true).unwrap(); fs_extra::dir::create_all(&test_file_out.parent().unwrap(), true).unwrap(); assert!(!test_file.exists()); let options = CopyOptions::new(); match move_file(&test_file, &test_file_out, &options) { Ok(_) => panic!("should be error"), Err(err) => match err.kind { ErrorKind::NotFound => { let wrong_path = format!( "Path \"{}\" does not exist or you don't have \ access!", test_file.to_str().unwrap() ); assert_eq!(wrong_path, err.to_string()); () } _ => panic!("wrong error"), }, } } #[test] fn it_move_exist_overwrite() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_move_exist_overwrite"); let mut test_file_out = test_file.clone(); test_file.push("test.txt"); test_file_out.push("out"); test_file_out.push("test.txt"); fs_extra::dir::create_all(&test_file.parent().unwrap(), true).unwrap(); fs_extra::dir::create_all(&test_file_out.parent().unwrap(), true).unwrap(); write_all(&test_file, "test_data").unwrap(); let mut options = CopyOptions::new(); copy(&test_file, &test_file_out, &options).unwrap(); assert!(test_file.exists()); assert!(files_eq(&test_file, &test_file_out).unwrap()); options.overwrite = true; write_all(&test_file, "test_data2").unwrap(); match move_file(&test_file, &test_file_out, &options) { Ok(_) => { assert!(!test_file.exists()); assert_eq!(read_to_string(test_file_out).unwrap(), "test_data2"); () } Err(err) => panic!(err.to_string()), } } #[test] fn it_move_exist_not_overwrite() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_move_exist_not_overwrite"); let mut test_file_out = test_file.clone(); test_file.push("test.txt"); test_file_out.push("out"); test_file_out.push("test.txt"); fs_extra::dir::create_all(&test_file.parent().unwrap(), true).unwrap(); fs_extra::dir::create_all(&test_file_out.parent().unwrap(), true).unwrap(); write_all(&test_file, "test_data").unwrap(); let mut options = CopyOptions::new(); copy(&test_file, &test_file_out, &options).unwrap(); assert!(test_file.exists()); options.overwrite = false; write_all(&test_file, "test_data2").unwrap(); match move_file(&test_file, &test_file_out, &options) { Ok(_) => panic!("should be error"), Err(err) => { let file_path = format!("Path \"{}\" exists", test_file_out.to_str().unwrap()); assert_eq!(file_path, err.to_string()); assert!(!files_eq(test_file, test_file_out).unwrap()); () } } } #[test] fn it_move_exist_skip_exist() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_move_exist_skip_exist"); let mut test_file_out = test_file.clone(); test_file.push("test.txt"); test_file_out.push("out"); test_file_out.push("test.txt"); fs_extra::dir::create_all(&test_file.parent().unwrap(), true).unwrap(); fs_extra::dir::create_all(&test_file_out.parent().unwrap(), true).unwrap(); write_all(&test_file, "test_data").unwrap(); let mut options = CopyOptions::new(); copy(&test_file, &test_file_out, &options).unwrap(); assert!(test_file.exists()); options.skip_exist = true; write_all(&test_file, "test_data2").unwrap(); match move_file(&test_file, &test_file_out, &options) { Ok(_) => { assert!(!files_eq(test_file, test_file_out).unwrap()); () } Err(_) => panic!("should be error"), } } #[test] fn it_move_exist_overwrite_and_skip_exist() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_move_exist_overwrite_and_skip_exist"); let mut test_file_out = test_file.clone(); test_file.push("test.txt"); test_file_out.push("out"); test_file_out.push("test.txt"); fs_extra::dir::create_all(&test_file.parent().unwrap(), true).unwrap(); fs_extra::dir::create_all(&test_file_out.parent().unwrap(), true).unwrap(); write_all(&test_file, "test_data").unwrap(); let mut options = CopyOptions::new(); copy(&test_file, &test_file_out, &options).unwrap(); assert!(test_file.exists()); assert!(files_eq(&test_file, &test_file_out).unwrap()); options.overwrite = true; options.skip_exist = true; write_all(&test_file, "test_data2").unwrap(); match move_file(&test_file, &test_file_out, &options) { Ok(_) => { assert!(!test_file.exists()); assert_eq!(read_to_string(test_file_out).unwrap(), "test_data2"); () } Err(err) => panic!(err.to_string()), } } #[test] fn it_move_with_progress_work() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_move_with_progress_work"); let mut test_file_out = test_file.clone(); test_file.push("test.txt"); test_file_out.push("out"); test_file_out.push("test.txt"); fs_extra::dir::create_all(&test_file.parent().unwrap(), true).unwrap(); fs_extra::dir::create_all(&test_file_out.parent().unwrap(), true).unwrap(); write_all(&test_file, "test_data").unwrap(); assert!(test_file.exists()); assert!(!test_file_out.exists()); let mut options = CopyOptions::new(); options.buffer_size = 1; let (tx, rx) = mpsc::channel(); thread::spawn(move || { let old_name = test_file.file_name(); let old_content = read_to_string(&test_file).unwrap(); let func_test = |process_info: TransitProcess| { tx.send(process_info).unwrap(); }; move_file_with_progress(&test_file, &test_file_out, &options, func_test).unwrap(); assert!(!test_file.exists()); assert!(test_file_out.exists()); assert_eq!(old_name, test_file_out.file_name()); let new_content = read_to_string(&test_file_out).unwrap(); assert_eq!(old_content, new_content); }); for i in 1..10 { let process_info: TransitProcess = rx.recv().unwrap(); assert_eq!(i, process_info.copied_bytes); assert_eq!(9, process_info.total_bytes); } } #[test] fn it_move_progress_not_file() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_move_progress_not_file"); let mut test_file_out = test_file.clone(); test_file.push("test.txt"); test_file_out.push("out"); test_file_out.push("test.txt"); fs_extra::dir::create_all(&test_file.parent().unwrap(), true).unwrap(); fs_extra::dir::create_all(&test_file_out.parent().unwrap(), true).unwrap(); write_all(&test_file, "test_data").unwrap(); assert!(test_file.exists()); assert!(!test_file_out.exists()); test_file.pop(); let options = CopyOptions::new(); let func_test = |process_info: TransitProcess| println!("{}", process_info.total_bytes); match move_file_with_progress(&test_file, &test_file_out, &options, func_test) { Err(err) => match err.kind { ErrorKind::InvalidFile => { let wrong_path = format!("Path \"{}\" is not a file!", test_file.to_str().unwrap()); assert_eq!(wrong_path, err.to_string()); } _ => { panic!("wrong error"); } }, Ok(_) => { panic!("should be error"); } } } #[test] fn it_move_with_progress_work_dif_buf_size() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_move_with_progress_work_dif_buf_size"); let mut test_file_out = test_file.clone(); test_file.push("test.txt"); test_file_out.push("out"); test_file_out.push("test.txt"); fs_extra::dir::create_all(&test_file.parent().unwrap(), true).unwrap(); fs_extra::dir::create_all(&test_file_out.parent().unwrap(), true).unwrap(); write_all(&test_file, "test_data_").unwrap(); assert!(test_file.exists()); assert!(!test_file_out.exists()); let mut options = CopyOptions::new(); options.buffer_size = 2; let (tx, rx) = mpsc::channel(); thread::spawn(move || { let old_name = test_file.file_name(); let old_content = read_to_string(&test_file).unwrap(); let func_test = |process_info: TransitProcess| { tx.send(process_info).unwrap(); }; move_file_with_progress(&test_file, &test_file_out, &options, func_test).unwrap(); assert!(!test_file.exists()); assert!(test_file_out.exists()); assert_eq!(old_name, test_file_out.file_name()); let new_content = read_to_string(&test_file_out).unwrap(); assert_eq!(old_content, new_content); }); for i in 1..6 { let process_info: TransitProcess = rx.recv().unwrap(); assert_eq!(i * 2, process_info.copied_bytes); assert_eq!(10, process_info.total_bytes); } } #[test] fn it_move_with_progress_source_not_exist() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_move_with_progress_source_not_exist"); let mut test_file_out = test_file.clone(); test_file.push("test1.txt"); test_file_out.push("out"); test_file_out.push("test.txt"); fs_extra::dir::create_all(&test_file.parent().unwrap(), true).unwrap(); fs_extra::dir::create_all(&test_file_out.parent().unwrap(), true).unwrap(); assert!(!test_file.exists()); let options = CopyOptions::new(); let func_test = |process_info: TransitProcess| { println!("{}", process_info.total_bytes); }; match move_file_with_progress(&test_file, &test_file_out, &options, func_test) { Ok(_) => panic!("should be error"), Err(err) => match err.kind { ErrorKind::NotFound => { let wrong_path = format!( "Path \"{}\" does not exist or you don't have \ access!", test_file.to_str().unwrap() ); assert_eq!(wrong_path, err.to_string()); () } _ => panic!("wrong error"), }, } } #[test] fn it_move_with_progress_exist_overwrite() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_move_with_progress_exist_overwrite"); let mut test_file_out = test_file.clone(); test_file.push("test.txt"); test_file_out.push("out"); test_file_out.push("test.txt"); fs_extra::dir::create_all(&test_file.parent().unwrap(), true).unwrap(); fs_extra::dir::create_all(&test_file_out.parent().unwrap(), true).unwrap(); write_all(&test_file, "test_data").unwrap(); let mut options = CopyOptions::new(); copy(&test_file, &test_file_out, &options).unwrap(); assert!(test_file.exists()); assert!(files_eq(&test_file, &test_file_out).unwrap()); options.overwrite = true; write_all(&test_file, "test_data2").unwrap(); let func_test = |process_info: TransitProcess| { println!("{}", process_info.total_bytes); }; match move_file_with_progress(&test_file, &test_file_out, &options, func_test) { Ok(_) => { assert!(!test_file.exists()); assert_eq!(read_to_string(test_file_out).unwrap(), "test_data2"); () } Err(err) => panic!(err.to_string()), } } #[test] fn it_move_with_progress_exist_not_overwrite() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_move_with_progress_exist_not_overwrite"); let mut test_file_out = test_file.clone(); test_file.push("test.txt"); test_file_out.push("out"); test_file_out.push("test.txt"); fs_extra::dir::create_all(&test_file.parent().unwrap(), true).unwrap(); fs_extra::dir::create_all(&test_file_out.parent().unwrap(), true).unwrap(); write_all(&test_file, "test_data").unwrap(); let mut options = CopyOptions::new(); copy(&test_file, &test_file_out, &options).unwrap(); assert!(test_file.exists()); options.overwrite = false; write_all(&test_file, "test_data2").unwrap(); let func_test = |process_info: TransitProcess| { println!("{}", process_info.total_bytes); }; match move_file_with_progress(&test_file, &test_file_out, &options, func_test) { Ok(_) => panic!("should be error"), Err(err) => { let file_path = format!("Path \"{}\" exists", test_file_out.to_str().unwrap()); assert_eq!(file_path, err.to_string()); assert!(!files_eq(test_file, test_file_out).unwrap()); () } } } #[test] fn it_move_with_progress_exist_skip_exist() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_move_with_progress_exist_skip_exist"); let mut test_file_out = test_file.clone(); test_file.push("test.txt"); test_file_out.push("out"); test_file_out.push("test.txt"); fs_extra::dir::create_all(&test_file.parent().unwrap(), true).unwrap(); fs_extra::dir::create_all(&test_file_out.parent().unwrap(), true).unwrap(); write_all(&test_file, "test_data").unwrap(); let mut options = CopyOptions::new(); copy(&test_file, &test_file_out, &options).unwrap(); assert!(test_file.exists()); options.skip_exist = true; write_all(&test_file, "test_data2").unwrap(); let func_test = |process_info: TransitProcess| { println!("{}", process_info.total_bytes); }; match move_file_with_progress(&test_file, &test_file_out, &options, func_test) { Ok(_) => { assert!(!files_eq(test_file, test_file_out).unwrap()); () } Err(_) => panic!("should be error"), } } #[test] fn it_move_with_progress_exist_overwrite_and_skip_exist() { let mut test_file = PathBuf::from(TEST_FOLDER); test_file.push("it_move_with_progress_exist_overwrite_and_skip_exist"); let mut test_file_out = test_file.clone(); test_file.push("test.txt"); test_file_out.push("out"); test_file_out.push("test.txt"); fs_extra::dir::create_all(&test_file.parent().unwrap(), true).unwrap(); fs_extra::dir::create_all(&test_file_out.parent().unwrap(), true).unwrap(); write_all(&test_file, "test_data").unwrap(); let mut options = CopyOptions::new(); copy(&test_file, &test_file_out, &options).unwrap(); assert!(test_file.exists()); assert!(files_eq(&test_file, &test_file_out).unwrap()); options.overwrite = true; options.skip_exist = true; write_all(&test_file, "test_data2").unwrap(); let func_test = |process_info: TransitProcess| { println!("{}", process_info.total_bytes); }; match move_file_with_progress(&test_file, &test_file_out, &options, func_test) { Ok(_) => { assert!(!test_file.exists()); assert!(test_file_out.exists()); assert_eq!(read_to_string(test_file_out).unwrap(), "test_data2"); () } Err(err) => panic!(err.to_string()), } }