diff options
Diffstat (limited to 'cli/test_runner.rs')
-rw-r--r-- | cli/test_runner.rs | 71 |
1 files changed, 66 insertions, 5 deletions
diff --git a/cli/test_runner.rs b/cli/test_runner.rs index e05013889..3d177f60e 100644 --- a/cli/test_runner.rs +++ b/cli/test_runner.rs @@ -3,12 +3,28 @@ use crate::installer::is_remote_url; use deno_core::ErrBox; use std; +use std::path::Path; use std::path::PathBuf; use url::Url; +fn is_supported(p: &Path) -> bool { + use std::path::Component; + if let Some(Component::Normal(basename_os_str)) = p.components().next_back() { + let basename = basename_os_str.to_string_lossy(); + basename.ends_with("_test.ts") + || basename.ends_with("_test.js") + || basename.ends_with(".test.ts") + || basename.ends_with(".test.js") + || basename == "test.ts" + || basename == "test.js" + } else { + false + } +} + pub fn prepare_test_modules_urls( include: Vec<String>, - root_path: PathBuf, + root_path: &PathBuf, ) -> Result<Vec<Url>, ErrBox> { let (include_paths, include_urls): (Vec<String>, Vec<String>) = include.into_iter().partition(|n| !is_remote_url(n)); @@ -16,9 +32,19 @@ pub fn prepare_test_modules_urls( let mut prepared = vec![]; for path in include_paths { - let p = root_path.join(path).canonicalize()?; - let url = Url::from_file_path(p).unwrap(); - prepared.push(url); + let q = root_path.join(path); + let p = q.canonicalize()?; + if p.is_dir() { + let test_files = crate::fs::files_in_subtree(p, is_supported); + let test_files_as_urls = test_files + .iter() + .map(|f| Url::from_file_path(f).unwrap()) + .collect::<Vec<Url>>(); + prepared.extend(test_files_as_urls); + } else { + let url = Url::from_file_path(p).unwrap(); + prepared.push(url); + } } for remote_url in include_urls { @@ -59,7 +85,7 @@ mod tests { "subdir2/mod2.ts".to_string(), "http://example.com/printf_test.ts".to_string(), ], - test_data_path.clone(), + &test_data_path, ) .unwrap(); let test_data_url = @@ -78,4 +104,39 @@ mod tests { matched_urls.sort(); assert_eq!(matched_urls, expected); } + + #[test] + fn test_is_supported() { + assert!(is_supported(Path::new("tests/subdir/foo_test.ts"))); + assert!(is_supported(Path::new("tests/subdir/foo_test.js"))); + assert!(is_supported(Path::new("bar/foo.test.ts"))); + assert!(is_supported(Path::new("bar/foo.test.js"))); + assert!(is_supported(Path::new("foo/bar/test.js"))); + assert!(is_supported(Path::new("foo/bar/test.ts"))); + assert!(!is_supported(Path::new("README.md"))); + assert!(!is_supported(Path::new("lib/typescript.d.ts"))); + assert!(!is_supported(Path::new("notatest.js"))); + assert!(!is_supported(Path::new("NotAtest.ts"))); + } + + #[test] + fn supports_dirs() { + let root = test_util::root_path().join("std").join("http"); + println!("root {:?}", root); + let mut matched_urls = + prepare_test_modules_urls(vec![".".to_string()], &root).unwrap(); + matched_urls.sort(); + let root_url = Url::from_file_path(root).unwrap().to_string(); + println!("root_url {}", root_url); + let expected: Vec<Url> = vec![ + format!("{}/cookie_test.ts", root_url), + format!("{}/file_server_test.ts", root_url), + format!("{}/racing_server_test.ts", root_url), + format!("{}/server_test.ts", root_url), + ] + .into_iter() + .map(|f| Url::parse(&f).unwrap()) + .collect(); + assert_eq!(matched_urls, expected); + } } |