Test that SIGINT interrupts non-terminating goals on unix.
Cleanup: use tokio::test instead of special test helpers Added pty_exec.py helper script to run binaries with a pseudoterminal attached (bug won't trigger otherwise). Tested CI to fail on all unixes (ubuntu+macos) with older rustyline, and pass with new one.
This commit is contained in:
@@ -38,41 +38,6 @@ pub(crate) fn load_module_test<T: Expectable>(file: &str, expected: T) {
|
||||
expected.assert_eq(wam.test_load_file(file).as_slice());
|
||||
}
|
||||
|
||||
/// Same as `load_module_test` with tokio runtime
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
pub(crate) fn load_module_test_with_tokio_runtime<T: Expectable>(file: &str, expected: T) {
|
||||
let runtime = tokio::runtime::Builder::new_multi_thread()
|
||||
.enable_all()
|
||||
.build()
|
||||
.unwrap();
|
||||
|
||||
runtime.block_on(async move {
|
||||
let mut wam = MachineBuilder::default().build();
|
||||
expected.assert_eq(wam.test_load_file(file).as_slice())
|
||||
});
|
||||
}
|
||||
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
pub(crate) fn load_module_test_with_tokio_runtime_and_input<T: Expectable>(
|
||||
file: &str,
|
||||
input: impl Into<Cow<'static, str>>,
|
||||
expected: T,
|
||||
) {
|
||||
let runtime = tokio::runtime::Builder::new_multi_thread()
|
||||
.enable_all()
|
||||
.build()
|
||||
.unwrap();
|
||||
|
||||
runtime.block_on(async move {
|
||||
let mut wam = MachineBuilder::default()
|
||||
.with_streams(
|
||||
StreamConfig::in_memory().with_user_input(InputStreamConfig::string(input)),
|
||||
)
|
||||
.build();
|
||||
expected.assert_eq(wam.test_load_file(file).as_slice())
|
||||
});
|
||||
}
|
||||
|
||||
pub(crate) fn load_module_test_with_input<T: Expectable>(
|
||||
file: &str,
|
||||
input: impl Into<Cow<'static, str>>,
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
use crate::helper::load_module_test;
|
||||
use crate::helper::load_module_test_with_input;
|
||||
#[cfg(all(feature = "http", not(target_arch = "wasm32")))]
|
||||
use crate::helper::load_module_test_with_tokio_runtime_and_input;
|
||||
use serial_test::serial;
|
||||
|
||||
// issue #831
|
||||
@@ -163,13 +161,25 @@ fn issue3262_read_from_stdin_no_newline() {
|
||||
load_module_test_with_input("tests-pl/issue3262.pl", "hello.", "hello");
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
#[cfg(all(feature = "http", not(target_arch = "wasm32")))]
|
||||
#[cfg_attr(miri, ignore = "it takes too long to run")]
|
||||
fn http_open_hanging() {
|
||||
load_module_test_with_tokio_runtime_and_input(
|
||||
async fn http_open_hanging() {
|
||||
load_module_test_with_input(
|
||||
"tests-pl/issue-http_open-hanging.pl",
|
||||
format!("PROLOG={:?}.", env!("CARGO_BIN_EXE_scryer-prolog")),
|
||||
"received response with status code:200\nreceived response with status code:200\nreceived response with status code:200\nreceived response with status code:200\nreceived response with status code:200\n"
|
||||
);
|
||||
}
|
||||
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
#[cfg(feature = "repl")]
|
||||
#[cfg(unix)]
|
||||
#[cfg_attr(miri, ignore = "it takes too long to run")]
|
||||
async fn sigint_interrupts_nonterminating_goals() {
|
||||
load_module_test_with_input(
|
||||
"tests-pl/issue-interrupt-nontermination.pl",
|
||||
format!("PROLOG={:?}.", env!("CARGO_BIN_EXE_scryer-prolog")),
|
||||
"ok\n",
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user