mirror of
https://github.com/denoland/deno.git
synced 2024-12-23 15:49:44 -05:00
test(inspector): add coverage test case (#4725)
This commit is contained in:
parent
e4c130d89b
commit
a7a3a771a0
2 changed files with 91 additions and 0 deletions
16
cli/tests/inspector_coverage.js
Normal file
16
cli/tests/inspector_coverage.js
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
function a() {
|
||||||
|
console.log("hello a");
|
||||||
|
}
|
||||||
|
|
||||||
|
function b() {
|
||||||
|
console.log("hello b");
|
||||||
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
|
function c() {
|
||||||
|
console.log("hello c");
|
||||||
|
}
|
||||||
|
|
||||||
|
a();
|
||||||
|
b();
|
||||||
|
b();
|
|
@ -2207,6 +2207,81 @@ async fn inspector_break_on_first_line() {
|
||||||
child.kill().unwrap();
|
child.kill().unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn inspector_coverage() {
|
||||||
|
let script = deno::test_util::root_path()
|
||||||
|
.join("cli")
|
||||||
|
.join("tests")
|
||||||
|
.join("inspector_coverage.js");
|
||||||
|
let mut child = util::deno_cmd()
|
||||||
|
.arg("run")
|
||||||
|
// Warning: each inspector test should be on its own port to avoid
|
||||||
|
// conflicting with another inspector test.
|
||||||
|
.arg("--inspect-brk=127.0.0.1:9231")
|
||||||
|
.arg(script)
|
||||||
|
.stdout(std::process::Stdio::piped())
|
||||||
|
.stderr(std::process::Stdio::piped())
|
||||||
|
.spawn()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let stderr = child.stderr.as_mut().unwrap();
|
||||||
|
let ws_url = extract_ws_url_from_stderr(stderr);
|
||||||
|
let (socket, response) = tokio_tungstenite::connect_async(ws_url)
|
||||||
|
.await
|
||||||
|
.expect("Can't connect");
|
||||||
|
assert_eq!(response.status(), 101); // Switching protocols.
|
||||||
|
|
||||||
|
let (mut socket_tx, mut socket_rx) = socket.split();
|
||||||
|
|
||||||
|
let stdout = child.stdout.as_mut().unwrap();
|
||||||
|
let mut stdout_lines = std::io::BufReader::new(stdout).lines();
|
||||||
|
|
||||||
|
use TestStep::*;
|
||||||
|
let test_steps = vec![
|
||||||
|
WsSend(r#"{"id":1,"method":"Runtime.enable"}"#),
|
||||||
|
WsSend(r#"{"id":2,"method":"Profiler.enable"}"#),
|
||||||
|
WsSend(
|
||||||
|
r#"{"id":3,"method":"Profiler.startPreciseCoverage", "params": {"callCount": false, "detailed": true } }"#,
|
||||||
|
),
|
||||||
|
WsRecv(
|
||||||
|
r#"{"method":"Runtime.executionContextCreated","params":{"context":{"id":1,"#,
|
||||||
|
),
|
||||||
|
WsRecv(r#"{"id":1,"result":{}}"#),
|
||||||
|
WsRecv(r#"{"id":2,"result":{}}"#),
|
||||||
|
WsRecv(r#"{"id":3,"result":{"timestamp":"#),
|
||||||
|
WsSend(r#"{"id":4,"method":"Runtime.runIfWaitingForDebugger"}"#),
|
||||||
|
WsRecv(r#"{"id":4,"result":{}}"#),
|
||||||
|
StdOut("hello a"),
|
||||||
|
StdOut("hello b"),
|
||||||
|
StdOut("hello b"),
|
||||||
|
WsSend(r#"{"id":5,"method":"Profiler.takePreciseCoverage"}"#),
|
||||||
|
WsSend(r#"{"id":6,"method":"Profiler.stopPreciseCoverage"}"#),
|
||||||
|
WsRecv(r#"{"id":5,"result":{"result":[{"#),
|
||||||
|
];
|
||||||
|
|
||||||
|
for step in test_steps {
|
||||||
|
match step {
|
||||||
|
StdOut(s) => match stdout_lines.next() {
|
||||||
|
Some(Ok(line)) => assert_eq!(line, s),
|
||||||
|
other => panic!(other),
|
||||||
|
},
|
||||||
|
WsRecv(s) => loop {
|
||||||
|
let msg = match socket_rx.next().await {
|
||||||
|
Some(Ok(msg)) => msg.to_string(),
|
||||||
|
other => panic!(other),
|
||||||
|
};
|
||||||
|
if !msg.starts_with(r#"{"method":"Debugger.scriptParsed","#) {
|
||||||
|
assert!(msg.starts_with(s));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
WsSend(s) => socket_tx.send(s.into()).await.unwrap(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
child.kill().unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn inspector_pause() {
|
async fn inspector_pause() {
|
||||||
let script = deno::test_util::root_path()
|
let script = deno::test_util::root_path()
|
||||||
|
|
Loading…
Reference in a new issue