mirror of
				https://github.com/BurntSushi/ripgrep.git
				synced 2025-10-30 23:17:47 +02:00 
			
		
		
		
	Remove clap validator + add max-filesize integration tests
This commit is contained in:
		
				
					committed by
					
						 Andrew Gallant
						Andrew Gallant
					
				
			
			
				
	
			
			
			
						parent
						
							71585f6d47
						
					
				
				
					commit
					adff43fbb4
				
			
							
								
								
									
										1
									
								
								build.rs
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								build.rs
									
									
									
									
									
								
							| @@ -2,7 +2,6 @@ | |||||||
| extern crate clap; | extern crate clap; | ||||||
| #[macro_use] | #[macro_use] | ||||||
| extern crate lazy_static; | extern crate lazy_static; | ||||||
| extern crate regex; |  | ||||||
|  |  | ||||||
| use std::env; | use std::env; | ||||||
| use std::fs; | use std::fs; | ||||||
|   | |||||||
							
								
								
									
										25
									
								
								src/app.rs
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								src/app.rs
									
									
									
									
									
								
							| @@ -1,7 +1,6 @@ | |||||||
| use std::collections::HashMap; | use std::collections::HashMap; | ||||||
|  |  | ||||||
| use clap::{App, AppSettings, Arg, ArgSettings}; | use clap::{App, AppSettings, Arg, ArgSettings}; | ||||||
| use regex::Regex; |  | ||||||
|  |  | ||||||
| const ABOUT: &'static str = " | const ABOUT: &'static str = " | ||||||
| ripgrep (rg) recursively searches your current directory for a regex pattern. | ripgrep (rg) recursively searches your current directory for a regex pattern. | ||||||
| @@ -147,8 +146,7 @@ fn app<F>(next_line_help: bool, doc: F) -> App<'static, 'static> | |||||||
|              .short("m").value_name("NUM").takes_value(true) |              .short("m").value_name("NUM").takes_value(true) | ||||||
|              .validator(validate_number)) |              .validator(validate_number)) | ||||||
|         .arg(flag("max-filesize") |         .arg(flag("max-filesize") | ||||||
|              .value_name("NUM+SUFFIX?").takes_value(true) |              .value_name("NUM+SUFFIX?").takes_value(true)) | ||||||
|              .validator(validate_max_filesize)) |  | ||||||
|         .arg(flag("maxdepth") |         .arg(flag("maxdepth") | ||||||
|              .value_name("NUM").takes_value(true) |              .value_name("NUM").takes_value(true) | ||||||
|              .validator(validate_number)) |              .validator(validate_number)) | ||||||
| @@ -502,24 +500,3 @@ lazy_static! { | |||||||
| fn validate_number(s: String) -> Result<(), String> { | fn validate_number(s: String) -> Result<(), String> { | ||||||
|     s.parse::<usize>().map(|_|()).map_err(|err| err.to_string()) |     s.parse::<usize>().map(|_|()).map_err(|err| err.to_string()) | ||||||
| } | } | ||||||
|  |  | ||||||
| fn validate_max_filesize(s: String) -> Result<(), String> { |  | ||||||
|     let re = Regex::new(r#"^(\d+)([KMG])?$"#).unwrap(); |  | ||||||
|     let caps = try!(re.captures(&s) |  | ||||||
|                       .ok_or("invalid format for max-filesize argument")); |  | ||||||
|  |  | ||||||
|     let value = caps.get(1); |  | ||||||
|     let suffix = caps.get(2).map(|x| x.as_str()); |  | ||||||
|  |  | ||||||
|     match value { |  | ||||||
|         Some(value) => { |  | ||||||
|             try!(value.as_str().parse::<u64>().map_err(|err| err.to_string())); |  | ||||||
|         } |  | ||||||
|         None => () |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     match suffix { |  | ||||||
|         None | Some("K") | Some("M") | Some("G") => Ok(()), |  | ||||||
|         _ => Err(From::from("invalid suffix for max-filesize argument")) |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|   | |||||||
							
								
								
									
										16
									
								
								src/args.rs
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								src/args.rs
									
									
									
									
									
								
							| @@ -791,20 +791,18 @@ impl<'a> ArgMatches<'a> { | |||||||
|             None => return Ok(None) |             None => return Ok(None) | ||||||
|         }; |         }; | ||||||
|  |  | ||||||
|         let re = Regex::new(r#"^(\d+)([KMG])?$"#).unwrap(); |         let re = Regex::new("^([0-9]+)([KMG])?$").unwrap(); | ||||||
|         let caps = try!(re.captures(&max_filesize) |         let caps = try!(re.captures(&max_filesize) | ||||||
|                           .ok_or("invalid format for max-filesize argument")); |                           .ok_or("invalid format for max-filesize argument")); | ||||||
|  |  | ||||||
|         let value = match caps.get(1) { |         let value = try!(caps[1].parse::<u64>().map_err(|err| err.to_string())); | ||||||
|             Some(value) => Some(try!(value.as_str().parse::<u64>())), |  | ||||||
|             None => None |  | ||||||
|         }; |  | ||||||
|         let suffix = caps.get(2).map(|x| x.as_str()); |         let suffix = caps.get(2).map(|x| x.as_str()); | ||||||
|  |  | ||||||
|         match suffix { |         match suffix { | ||||||
|             None      => Ok(value), |             None      => Ok(Some(value)), | ||||||
|             Some("K") => Ok(value.map(|x| x * 1024)), |             Some("K") => Ok(Some(value * 1024)), | ||||||
|             Some("M") => Ok(value.map(|x| x * 1024 * 1024)), |             Some("M") => Ok(Some(value * 1024 * 1024)), | ||||||
|             Some("G") => Ok(value.map(|x| x * 1024 * 1024 * 1024)), |             Some("G") => Ok(Some(value * 1024 * 1024 * 1024)), | ||||||
|             _ => Err(From::from("invalid suffix for max-filesize argument")) |             _ => Err(From::from("invalid suffix for max-filesize argument")) | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -444,6 +444,51 @@ sherlock!(max_filesize_parse_error_suffix, "Sherlock", ".", | |||||||
|     wd.assert_err(&mut cmd); |     wd.assert_err(&mut cmd); | ||||||
| }); | }); | ||||||
|  |  | ||||||
|  | sherlock!(max_filesize_parse_no_suffix, "Sherlock", ".", | ||||||
|  | |wd: WorkDir, mut cmd: Command| { | ||||||
|  |     wd.remove("sherlock"); | ||||||
|  |     wd.create_size("foo", 40); | ||||||
|  |     wd.create_size("bar", 60); | ||||||
|  |  | ||||||
|  |     cmd.arg("--max-filesize").arg("50").arg("--files"); | ||||||
|  |     let lines: String = wd.stdout(&mut cmd); | ||||||
|  |     let expected = "\ | ||||||
|  | foo | ||||||
|  | "; | ||||||
|  |  | ||||||
|  |     assert_eq!(lines, expected); | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | sherlock!(max_filesize_parse_k_suffix, "Sherlock", ".", | ||||||
|  | |wd: WorkDir, mut cmd: Command| { | ||||||
|  |     wd.remove("sherlock"); | ||||||
|  |     wd.create_size("foo", 3048); | ||||||
|  |     wd.create_size("bar", 4100); | ||||||
|  |  | ||||||
|  |     cmd.arg("--max-filesize").arg("4K").arg("--files"); | ||||||
|  |     let lines: String = wd.stdout(&mut cmd); | ||||||
|  |     let expected = "\ | ||||||
|  | foo | ||||||
|  | "; | ||||||
|  |  | ||||||
|  |     assert_eq!(lines, expected); | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | sherlock!(max_filesize_parse_m_suffix, "Sherlock", ".", | ||||||
|  | |wd: WorkDir, mut cmd: Command| { | ||||||
|  |     wd.remove("sherlock"); | ||||||
|  |     wd.create_size("foo", 1000000); | ||||||
|  |     wd.create_size("bar", 1400000); | ||||||
|  |  | ||||||
|  |     cmd.arg("--max-filesize").arg("1M").arg("--files"); | ||||||
|  |     let lines: String = wd.stdout(&mut cmd); | ||||||
|  |     let expected = "\ | ||||||
|  | foo | ||||||
|  | "; | ||||||
|  |  | ||||||
|  |     assert_eq!(lines, expected); | ||||||
|  | }); | ||||||
|  |  | ||||||
| sherlock!(ignore_hidden, "Sherlock", ".", |wd: WorkDir, mut cmd: Command| { | sherlock!(ignore_hidden, "Sherlock", ".", |wd: WorkDir, mut cmd: Command| { | ||||||
|     wd.remove("sherlock"); |     wd.remove("sherlock"); | ||||||
|     wd.create(".sherlock", hay::SHERLOCK); |     wd.create(".sherlock", hay::SHERLOCK); | ||||||
|   | |||||||
| @@ -46,6 +46,13 @@ impl WorkDir { | |||||||
|         self.create_bytes(name, contents.as_bytes()); |         self.create_bytes(name, contents.as_bytes()); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /// Create a new file with the given name and size. | ||||||
|  |     pub fn create_size<P: AsRef<Path>>(&self, name: P, filesize: u64) { | ||||||
|  |         let path = self.dir.join(name); | ||||||
|  |         let file = nice_err(&path, File::create(&path)); | ||||||
|  |         nice_err(&path, file.set_len(filesize)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     /// Create a new file with the given name and contents in this directory. |     /// Create a new file with the given name and contents in this directory. | ||||||
|     pub fn create_bytes<P: AsRef<Path>>(&self, name: P, contents: &[u8]) { |     pub fn create_bytes<P: AsRef<Path>>(&self, name: P, contents: &[u8]) { | ||||||
|         let path = self.dir.join(name); |         let path = self.dir.join(name); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user