summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/repl.rs16
-rw-r--r--tools/repl_test.py15
2 files changed, 30 insertions, 1 deletions
diff --git a/cli/repl.rs b/cli/repl.rs
index 7e72b9b10..0cac6c4ea 100644
--- a/cli/repl.rs
+++ b/cli/repl.rs
@@ -76,6 +76,14 @@ impl Repl {
}
fn save_history(&mut self) -> Result<(), ErrBox> {
+ if !self.history_dir_exists() {
+ eprintln!(
+ "Unable to save REPL history: {:?} directory does not exist",
+ self.history_file
+ );
+ return Ok(());
+ }
+
self
.editor
.save_history(&self.history_file.to_str().unwrap())
@@ -86,6 +94,14 @@ impl Repl {
})
}
+ fn history_dir_exists(&self) -> bool {
+ self
+ .history_file
+ .parent()
+ .map(|ref p| p.exists())
+ .unwrap_or(false)
+ }
+
pub fn readline(&mut self, prompt: &str) -> Result<String, ErrBox> {
self
.editor
diff --git a/tools/repl_test.py b/tools/repl_test.py
index 5ad7722ee..77e54dfdf 100644
--- a/tools/repl_test.py
+++ b/tools/repl_test.py
@@ -11,7 +11,12 @@ class TestRepl(DenoTestCase):
def input(self, *lines, **kwargs):
exit_ = kwargs.pop("exit", True)
sleep_ = kwargs.pop("sleep", 0)
- p = Popen([self.deno_exe], stdout=PIPE, stderr=PIPE, stdin=PIPE)
+ env_ = kwargs.pop("env", None)
+ p = Popen([self.deno_exe],
+ stdout=PIPE,
+ stderr=PIPE,
+ stdin=PIPE,
+ env=env_)
try:
# Note: The repl takes a >100ms until it's ready.
time.sleep(sleep_)
@@ -137,6 +142,14 @@ class TestRepl(DenoTestCase):
self.assertEqual(err, '')
self.assertEqual(code, 0)
+ def test_missing_deno_dir(self):
+ new_env = os.environ.copy()
+ new_env["DENO_DIR"] = os.path.abspath("doesnt_exist")
+ out, err, code = self.input("'noop'", exit=False, env=new_env)
+ self.assertEqual(out, "noop\n")
+ self.assertTrue(err.startswith("Unable to save REPL history:"))
+ self.assertEqual(code, 0)
+
if __name__ == "__main__":
run_tests()