mirror of
https://github.com/denoland/deno.git
synced 2024-12-23 07:44:48 -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();
|
||||
}
|
||||
|
||||
#[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]
|
||||
async fn inspector_pause() {
|
||||
let script = deno::test_util::root_path()
|
||||
|
|
Loading…
Reference in a new issue