mirror of
https://github.com/nushell/nushell.git
synced 2025-04-29 15:44:28 +02:00
Add job messaging tests
This commit is contained in:
parent
d126914aca
commit
669f2456fe
@ -19,6 +19,181 @@ fn jobs_do_run() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn job_send_root_job_works() {
|
||||||
|
let actual = nu!(r#"
|
||||||
|
job spawn { 'beep' | job send 0 }
|
||||||
|
job recv --timeout 10sec"#);
|
||||||
|
|
||||||
|
assert_eq!(actual.out, "beep");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn job_send_background_job_works() {
|
||||||
|
let actual = nu!(r#"
|
||||||
|
let job = job spawn { job recv | job send 0 }
|
||||||
|
'boop' | job send $job
|
||||||
|
job recv --timeout 10sec"#);
|
||||||
|
|
||||||
|
assert_eq!(actual.out, "boop");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn job_send_to_self_works() {
|
||||||
|
let actual = nu!(r#"
|
||||||
|
"meep" | job send 0
|
||||||
|
job recv"#);
|
||||||
|
|
||||||
|
assert_eq!(actual.out, "meep");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn job_send_to_self_from_background_works() {
|
||||||
|
let actual = nu!(r#"
|
||||||
|
job spawn {
|
||||||
|
'beep' | job send (job id)
|
||||||
|
job recv | job send 0
|
||||||
|
}
|
||||||
|
|
||||||
|
job recv --timeout 10sec"#);
|
||||||
|
|
||||||
|
assert_eq!(actual.out, "beep");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn job_id_of_root_job_is_zero() {
|
||||||
|
let actual = nu!(r#"job id"#);
|
||||||
|
|
||||||
|
assert_eq!(actual.out, "0");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn job_id_of_background_jobs_works() {
|
||||||
|
let actual = nu!(r#"
|
||||||
|
let job1 = job spawn { job id | job send 0 }
|
||||||
|
let id1 = job recv --timeout 5sec
|
||||||
|
|
||||||
|
let job2 = job spawn { job id | job send 0 }
|
||||||
|
let id2 = job recv --timeout 5sec
|
||||||
|
|
||||||
|
let job3 = job spawn { job id | job send 0 }
|
||||||
|
let id3 = job recv --timeout 5sec
|
||||||
|
|
||||||
|
[($job1 == $id1) ($job2 == $id2) ($job3 == $id3)] | to nuon
|
||||||
|
|
||||||
|
"#);
|
||||||
|
|
||||||
|
assert_eq!(actual.out, "[true, true, true]");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn untagged_job_recv_accepts_tagged_messages() {
|
||||||
|
let actual = nu!(r#"
|
||||||
|
job spawn { "boop" | job send 0 --tag 123 }
|
||||||
|
job recv --timeout 10sec
|
||||||
|
"#);
|
||||||
|
|
||||||
|
assert_eq!(actual.out, "boop");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn tagged_job_recv_filters_untagged_messages() {
|
||||||
|
let actual = nu!(r#"
|
||||||
|
job spawn { "boop" | job send 0 }
|
||||||
|
job recv --tag 123 --timeout 1sec
|
||||||
|
"#);
|
||||||
|
|
||||||
|
assert_eq!(actual.out, "");
|
||||||
|
assert!(actual.err.contains("timeout"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn tagged_job_recv_filters_badly_tagged_messages() {
|
||||||
|
let actual = nu!(r#"
|
||||||
|
job spawn { "boop" | job send 0 --tag 321 }
|
||||||
|
job recv --tag 123 --timeout 1sec
|
||||||
|
"#);
|
||||||
|
|
||||||
|
assert_eq!(actual.out, "");
|
||||||
|
assert!(actual.err.contains("timeout"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn tagged_job_recv_accepts_properly_tagged_messages() {
|
||||||
|
let actual = nu!(r#"
|
||||||
|
job spawn { "boop" | job send 0 --tag 123 }
|
||||||
|
job recv --tag 123 --timeout 5sec
|
||||||
|
"#);
|
||||||
|
|
||||||
|
assert_eq!(actual.out, "boop");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn filtered_messages_are_not_erased() {
|
||||||
|
let actual = nu!(r#"
|
||||||
|
"msg1" | job send 0 --tag 123
|
||||||
|
"msg2" | job send 0 --tag 456
|
||||||
|
"msg3" | job send 0 --tag 789
|
||||||
|
|
||||||
|
let first = job recv --tag 789 --timeout 5sec
|
||||||
|
let second = job recv --timeout 1sec
|
||||||
|
let third = job recv --timeout 1sec
|
||||||
|
|
||||||
|
|
||||||
|
[($first) ($second) ($third)] | to nuon
|
||||||
|
"#);
|
||||||
|
|
||||||
|
assert_eq!(actual.out, r#"["msg3", "msg1", "msg2"]"#);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn job_recv_timeout_works() {
|
||||||
|
let actual = nu!(r#"
|
||||||
|
job spawn {
|
||||||
|
sleep 2sec
|
||||||
|
"boop" | job send 0
|
||||||
|
}
|
||||||
|
|
||||||
|
job recv --timeout 1sec
|
||||||
|
"#);
|
||||||
|
|
||||||
|
assert_eq!(actual.out, "");
|
||||||
|
assert!(actual.err.contains("timeout"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn job_flush_clears_messages() {
|
||||||
|
let actual = nu!(r#"
|
||||||
|
"SALE!!!" | job send 0
|
||||||
|
"[HYPERLINK BLOCKED]" | job send 0
|
||||||
|
|
||||||
|
job flush
|
||||||
|
|
||||||
|
job recv --timeout 1sec
|
||||||
|
"#);
|
||||||
|
|
||||||
|
assert_eq!(actual.out, "");
|
||||||
|
assert!(actual.err.contains("timeout"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn job_flush_clears_filtered_messages() {
|
||||||
|
let actual = nu!(r#"
|
||||||
|
"msg1" | job send 0 --tag 123
|
||||||
|
"msg2" | job send 0 --tag 456
|
||||||
|
"msg3" | job send 0 --tag 789
|
||||||
|
|
||||||
|
job recv --tag 789 --timeout 1sec
|
||||||
|
|
||||||
|
job flush
|
||||||
|
|
||||||
|
job recv --timeout 1sec
|
||||||
|
"#);
|
||||||
|
|
||||||
|
assert_eq!(actual.out, "");
|
||||||
|
assert!(actual.err.contains("timeout"));
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn first_job_id_is_one() {
|
fn first_job_id_is_one() {
|
||||||
let actual = nu!(r#"job spawn {} | to nuon"#);
|
let actual = nu!(r#"job spawn {} | to nuon"#);
|
||||||
|
@ -273,7 +273,7 @@ impl Mailbox {
|
|||||||
while waited_so_far < timeout {
|
while waited_so_far < timeout {
|
||||||
let (tag, value) = self.receiver.recv_timeout(timeout - waited_so_far)?;
|
let (tag, value) = self.receiver.recv_timeout(timeout - waited_so_far)?;
|
||||||
|
|
||||||
if filter_tag.is_none() || filter_tag == tag {
|
if filter_tag.is_none() || filter_tag == tag {
|
||||||
return Ok(value);
|
return Ok(value);
|
||||||
} else {
|
} else {
|
||||||
self.ignored_mail.add((tag, value));
|
self.ignored_mail.add((tag, value));
|
||||||
|
Loading…
Reference in New Issue
Block a user