]> Repositorios git - scryer-prolog.git/commitdiff
Test for callback streams
authorbakaq <[email protected]>
Wed, 29 Jan 2025 20:09:48 +0000 (17:09 -0300)
committerbakaq <[email protected]>
Sun, 16 Feb 2025 07:04:48 +0000 (04:04 -0300)
src/machine/lib_machine/tests.rs

index 5b89d67da59351d35a5f565cd0ff8e087286587e..40c33225e755a9d1e1d74ac3f8b32fbce301c376 100644 (file)
@@ -1,5 +1,8 @@
+use std::io::Write;
+use std::{cell::RefCell, io::Read, rc::Rc};
+
 use super::*;
-use crate::MachineBuilder;
+use crate::{MachineBuilder, StreamConfig};
 
 #[test]
 #[cfg_attr(miri, ignore = "it takes too long to run")]
@@ -608,3 +611,34 @@ fn errors_and_exceptions() {
         [Ok(LeafAnswer::Exception(Term::atom("a")))]
     );
 }
+
+#[test]
+#[cfg_attr(miri, ignore)]
+fn callback_streams() {
+    let test_string = Rc::new(RefCell::new(String::new()));
+    let test_string2 = test_string.clone();
+
+    let (mut user_input, streams) = StreamConfig::with_callbacks(
+        Some(Box::new(move |x| {
+            x.read_to_string(&mut *test_string2.borrow_mut()).unwrap();
+        })),
+        None,
+    );
+    let mut machine = MachineBuilder::default().with_streams(streams).build();
+
+    write!(&mut user_input, "a(1,2,3).").unwrap();
+
+    let complete_answer: Vec<_> = machine
+        .run_query("read(A), write('asdf'), nl, flush_output.")
+        .collect();
+
+    assert_eq!(
+        complete_answer,
+        [Ok(LeafAnswer::from_bindings([(
+            "A",
+            Term::compound("a", [Term::integer(1), Term::integer(2), Term::integer(3)])
+        ),]))]
+    );
+
+    assert_eq!(*test_string.borrow(), "asdf\n");
+}