4 changed files with 126 additions and 57 deletions
			
			
		@ -0,0 +1,103 @@ | 
			
		|||||
 | 
				extern crate schematics;
 | 
			
		||||
 | 
				extern crate tempdir;
 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				use std::fs::File;
 | 
			
		||||
 | 
				use std::io::Write;
 | 
			
		||||
 | 
				use std::path::Path;
 | 
			
		||||
 | 
				use tempdir::TempDir;
 | 
			
		||||
 | 
				use schematics::symbols::Symbol;
 | 
			
		||||
 | 
				use schematics::symbols::file::File as FileSymbol;
 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				fn get_dir(content: Option<&str>) -> TempDir {
 | 
			
		||||
 | 
				  let tmp_dir = TempDir::new("unittest").expect("create temp dir");
 | 
			
		||||
 | 
				  if content.is_none() {
 | 
			
		||||
 | 
				    return tmp_dir;
 | 
			
		||||
 | 
				  }
 | 
			
		||||
 | 
				  let file_path = tmp_dir.path().join("filename");
 | 
			
		||||
 | 
				  let mut tmp_file = File::create(file_path).expect("create temp file");
 | 
			
		||||
 | 
				  tmp_file.write_all(content.unwrap().as_bytes()).expect("write temp file");
 | 
			
		||||
 | 
				  tmp_dir
 | 
			
		||||
 | 
				}
 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				fn get_symbol(path: &Path) -> FileSymbol<&str, String> {
 | 
			
		||||
 | 
				  FileSymbol::new(String::from(path.join("filename").to_str().unwrap()), "target content")
 | 
			
		||||
 | 
				}
 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				// Normal cases
 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				// Good
 | 
			
		||||
 | 
				#[test]
 | 
			
		||||
 | 
				fn already_reached() {
 | 
			
		||||
 | 
				  let dir = get_dir(Some("target content"));
 | 
			
		||||
 | 
				  let symbol = get_symbol(dir.path());
 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				  assert_eq!(symbol.target_reached().unwrap(), true);
 | 
			
		||||
 | 
				}
 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				// Bad
 | 
			
		||||
 | 
				#[test]
 | 
			
		||||
 | 
				fn wrong_prefix() {
 | 
			
		||||
 | 
				  let dir = get_dir(Some("not target content"));
 | 
			
		||||
 | 
				  let symbol = get_symbol(dir.path());
 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				  assert_eq!(symbol.target_reached().unwrap(), false);
 | 
			
		||||
 | 
				  symbol.execute().unwrap();
 | 
			
		||||
 | 
				  assert_eq!(symbol.target_reached().unwrap(), true);
 | 
			
		||||
 | 
				}
 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				#[test]
 | 
			
		||||
 | 
				fn wrong_postfix() {
 | 
			
		||||
 | 
				  let dir = get_dir(Some("target content not"));
 | 
			
		||||
 | 
				  let symbol = get_symbol(dir.path());
 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				  assert_eq!(symbol.target_reached().unwrap(), false);
 | 
			
		||||
 | 
				  symbol.execute().unwrap();
 | 
			
		||||
 | 
				  assert_eq!(symbol.target_reached().unwrap(), true);
 | 
			
		||||
 | 
				}
 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				#[test]
 | 
			
		||||
 | 
				fn empty_file() {
 | 
			
		||||
 | 
				  let dir = get_dir(Some(""));
 | 
			
		||||
 | 
				  let symbol = get_symbol(dir.path());
 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				  assert_eq!(symbol.target_reached().unwrap(), false);
 | 
			
		||||
 | 
				  symbol.execute().unwrap();
 | 
			
		||||
 | 
				  assert_eq!(symbol.target_reached().unwrap(), true);
 | 
			
		||||
 | 
				}
 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				#[test]
 | 
			
		||||
 | 
				fn no_file() {
 | 
			
		||||
 | 
				  let dir = get_dir(None);
 | 
			
		||||
 | 
				  let symbol = get_symbol(dir.path());
 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				  assert_eq!(symbol.target_reached().unwrap(), false);
 | 
			
		||||
 | 
				  symbol.execute().unwrap();
 | 
			
		||||
 | 
				  assert_eq!(symbol.target_reached().unwrap(), true);
 | 
			
		||||
 | 
				}
 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				// Exceptional cases
 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				#[test]
 | 
			
		||||
 | 
				fn may_not_read_file() {
 | 
			
		||||
 | 
				  let symbol = get_symbol(&Path::new("/etc/passwd"));
 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				  assert_eq!(symbol.target_reached().is_err(), true);
 | 
			
		||||
 | 
				}
 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				#[test]
 | 
			
		||||
 | 
				fn may_not_create_file() {
 | 
			
		||||
 | 
				  let symbol = get_symbol(&Path::new("/proc/somefile"));
 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				  // Could also return an error
 | 
			
		||||
 | 
				  assert_eq!(symbol.target_reached().unwrap(), false);
 | 
			
		||||
 | 
				  assert!(symbol.execute().is_err());
 | 
			
		||||
 | 
				}
 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				#[test]
 | 
			
		||||
 | 
				fn directory_missing() {
 | 
			
		||||
 | 
				  let symbol = get_symbol(&Path::new("/nonexisting"));
 | 
			
		||||
 | 
				
 | 
			
		||||
 | 
				  // Could also return an error
 | 
			
		||||
 | 
				  assert_eq!(symbol.target_reached().unwrap(), false);
 | 
			
		||||
 | 
				  assert!(symbol.execute().is_err());
 | 
			
		||||
 | 
				}
 | 
			
		||||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue