summaryrefslogtreecommitdiff
path: root/cli/tools/jupyter/mod.rs
diff options
context:
space:
mode:
authorNayeem Rahman <nayeemrmn99@gmail.com>2023-10-05 21:45:11 +0100
committerGitHub <noreply@github.com>2023-10-05 21:45:11 +0100
commitac464ead49c9f676d7117baa2ab06433e132e188 (patch)
tree646d0674bb8d585478d3520b61785c7d453044e3 /cli/tools/jupyter/mod.rs
parent820e93e3e742a22f010f3200312039c50ae0d63a (diff)
feat(jupyter): support Deno.test() (#20778)
Diffstat (limited to 'cli/tools/jupyter/mod.rs')
-rw-r--r--cli/tools/jupyter/mod.rs59
1 files changed, 53 insertions, 6 deletions
diff --git a/cli/tools/jupyter/mod.rs b/cli/tools/jupyter/mod.rs
index fb0860e36..62b298352 100644
--- a/cli/tools/jupyter/mod.rs
+++ b/cli/tools/jupyter/mod.rs
@@ -3,6 +3,7 @@
use crate::args::Flags;
use crate::args::JupyterFlags;
use crate::ops;
+use crate::tools::jupyter::server::StdioMsg;
use crate::tools::repl;
use crate::util::logger;
use crate::CliFactory;
@@ -12,9 +13,17 @@ use deno_core::located_script_name;
use deno_core::resolve_url_or_path;
use deno_core::serde::Deserialize;
use deno_core::serde_json;
+use deno_runtime::deno_io::Stdio;
+use deno_runtime::deno_io::StdioPipe;
use deno_runtime::permissions::Permissions;
use deno_runtime::permissions::PermissionsContainer;
use tokio::sync::mpsc;
+use tokio::sync::mpsc::unbounded_channel;
+use tokio::sync::mpsc::UnboundedSender;
+
+use super::test::reporters::PrettyTestReporter;
+use super::test::TestEvent;
+use super::test::TestEventSender;
mod install;
pub(crate) mod jupyter_msg;
@@ -71,13 +80,25 @@ pub async fn kernel(
connection_filepath
)
})?;
-
+ let (test_event_sender, test_event_receiver) =
+ unbounded_channel::<TestEvent>();
+ let test_event_sender = TestEventSender::new(test_event_sender);
+ let stdout = StdioPipe::File(test_event_sender.stdout());
+ let stderr = StdioPipe::File(test_event_sender.stderr());
let mut worker = worker_factory
.create_custom_worker(
main_module.clone(),
permissions,
- vec![ops::jupyter::deno_jupyter::init_ops(stdio_tx)],
- Default::default(),
+ vec![
+ ops::jupyter::deno_jupyter::init_ops(stdio_tx.clone()),
+ ops::testing::deno_test::init_ops(test_event_sender.clone()),
+ ],
+ // FIXME(nayeemrmn): Test output capturing currently doesn't work.
+ Stdio {
+ stdin: StdioPipe::Inherit,
+ stdout,
+ stderr,
+ },
)
.await?;
worker.setup_repl().await?;
@@ -86,9 +107,35 @@ pub async fn kernel(
"Deno[Deno.internal].enableJupyter();",
)?;
let worker = worker.into_main_worker();
- let repl_session =
- repl::ReplSession::initialize(cli_options, npm_resolver, resolver, worker)
- .await?;
+ let mut repl_session = repl::ReplSession::initialize(
+ cli_options,
+ npm_resolver,
+ resolver,
+ worker,
+ main_module,
+ test_event_sender,
+ test_event_receiver,
+ )
+ .await?;
+ struct TestWriter(UnboundedSender<StdioMsg>);
+ impl std::io::Write for TestWriter {
+ fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
+ self
+ .0
+ .send(StdioMsg::Stdout(String::from_utf8_lossy(buf).into_owned()))
+ .ok();
+ Ok(buf.len())
+ }
+ fn flush(&mut self) -> std::io::Result<()> {
+ Ok(())
+ }
+ }
+ repl_session.set_test_reporter_factory(Box::new(move || {
+ Box::new(
+ PrettyTestReporter::new(false, true, false, true)
+ .with_writer(Box::new(TestWriter(stdio_tx.clone()))),
+ )
+ }));
server::JupyterServer::start(spec, stdio_rx, repl_session).await?;