1 use test_programs::p3::wasi::cli::{
2 environment, stderr, stdin, stdout, terminal_stderr, terminal_stdin, terminal_stdout,
3 };
4 use test_programs::p3::wit_stream;
5 use wit_bindgen::StreamResult;
6
7 struct Component;
8
9 test_programs::p3::export!(Component);
10
11 impl test_programs::p3::exports::wasi::cli::run::Guest for Component {
run() -> Result<(), ()>12 async fn run() -> Result<(), ()> {
13 assert_eq!(environment::get_arguments(), ["p3_cli.component", "."]);
14 assert_ne!(environment::get_environment(), []);
15 assert_eq!(environment::get_initial_cwd(), None);
16
17 assert!(terminal_stdin::get_terminal_stdin().is_none());
18 assert!(terminal_stdout::get_terminal_stdout().is_none());
19 assert!(terminal_stderr::get_terminal_stderr().is_none());
20
21 let (mut stdin, result) = stdin::read_via_stream();
22 assert!(stdin.next().await.is_none());
23
24 let (mut stdout_tx, stdout_rx) = wit_stream::new();
25 futures::join!(
26 async {
27 stdout::write_via_stream(stdout_rx).await.unwrap();
28 },
29 async {
30 let (res, buf) = stdout_tx.write(b"hello stdout\n".into()).await;
31 assert_eq!(res, StreamResult::Complete(13));
32 assert_eq!(buf.into_vec(), []);
33 drop(stdout_tx);
34 }
35 );
36
37 let (mut stderr_tx, stderr_rx) = wit_stream::new();
38 futures::join!(
39 async {
40 stderr::write_via_stream(stderr_rx).await.unwrap();
41 },
42 async {
43 let (res, buf) = stderr_tx.write(b"hello stderr\n".into()).await;
44 assert_eq!(res, StreamResult::Complete(13));
45 assert_eq!(buf.into_vec(), []);
46 drop(stderr_tx);
47 }
48 );
49
50 drop(stdin);
51 result.await.unwrap();
52
53 Ok(())
54 }
55 }
56
main()57 fn main() {}
58