summaryrefslogtreecommitdiff
path: root/cli/test_runner.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/test_runner.rs')
-rw-r--r--cli/test_runner.rs81
1 files changed, 81 insertions, 0 deletions
diff --git a/cli/test_runner.rs b/cli/test_runner.rs
new file mode 100644
index 000000000..e05013889
--- /dev/null
+++ b/cli/test_runner.rs
@@ -0,0 +1,81 @@
+// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
+
+use crate::installer::is_remote_url;
+use deno_core::ErrBox;
+use std;
+use std::path::PathBuf;
+use url::Url;
+
+pub fn prepare_test_modules_urls(
+ include: Vec<String>,
+ 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));
+
+ 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);
+ }
+
+ for remote_url in include_urls {
+ let url = Url::parse(&remote_url)?;
+ prepared.push(url);
+ }
+
+ Ok(prepared)
+}
+
+pub fn render_test_file(modules: Vec<Url>, fail_fast: bool) -> String {
+ let mut test_file = "".to_string();
+
+ for module in modules {
+ test_file.push_str(&format!("import \"{}\";\n", module.to_string()));
+ }
+
+ let run_tests_cmd =
+ format!("Deno.runTests({{ exitOnFail: {} }});\n", fail_fast);
+ test_file.push_str(&run_tests_cmd);
+
+ test_file
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::test_util;
+
+ #[test]
+ fn test_prepare_test_modules_urls() {
+ let test_data_path = test_util::root_path().join("cli/tests/subdir");
+ let mut matched_urls = prepare_test_modules_urls(
+ vec![
+ "https://example.com/colors_test.ts".to_string(),
+ "./mod1.ts".to_string(),
+ "./mod3.js".to_string(),
+ "subdir2/mod2.ts".to_string(),
+ "http://example.com/printf_test.ts".to_string(),
+ ],
+ test_data_path.clone(),
+ )
+ .unwrap();
+ let test_data_url =
+ Url::from_file_path(test_data_path).unwrap().to_string();
+
+ let expected: Vec<Url> = vec![
+ format!("{}/mod1.ts", test_data_url),
+ format!("{}/mod3.js", test_data_url),
+ format!("{}/subdir2/mod2.ts", test_data_url),
+ "http://example.com/printf_test.ts".to_string(),
+ "https://example.com/colors_test.ts".to_string(),
+ ]
+ .into_iter()
+ .map(|f| Url::parse(&f).unwrap())
+ .collect();
+ matched_urls.sort();
+ assert_eq!(matched_urls, expected);
+ }
+}