2 个版本

0.0.2 2024年7月13日
0.0.1 2024年7月12日

命令行界面 中排名第 252

Download history 19/week @ 2024-07-06 193/week @ 2024-07-13 5/week @ 2024-07-20 1/week @ 2024-07-27

每月下载量 218

Apache-2.0 协议

15KB
129 行代码(不含注释)

r3bl_test_fixtures

这是一个提供可重复使用组件的测试用例库,旨在由 r3bl-open-core 单一仓库中的所有crate使用。此crate旨在成为单一仓库中其他crate的 dev-dependency

它提供异步流和标准输出的测试用例,这使得TUI框架能够进行“端到端”测试。

  1. 异步流测试用例用于测试TUI框架的输入流。
  2. 标准输出测试用例用于测试TUI框架的输出。

async_stream_fixtures

以下是一个从 Vec 创建 T 流的示例。

#[tokio::test]
async fn test_gen_input_stream() {
    use futures_util::StreamExt;
    use r3bl_test_fixtures::gen_input_stream;

    let mut input_stream = gen_input_stream(vec![1, 2, 3]);
    for _ in 1..=3 {
        input_stream.next().await;
    }
    pretty_assertions::assert_eq!(input_stream.next().await, None);
}

以下是如何使用延迟的另一个示例。

#[tokio::test]
async fn test_gen_input_stream_with_delay() {
    use futures_util::StreamExt;
    use r3bl_test_fixtures::gen_input_stream_with_delay;

    let delay = 100;

    // Start timer.
    let start_time = std::time::Instant::now();

    let mut input_stream = gen_input_stream_with_delay(vec![1, 2, 3], Duration::from_millis(delay));
    for _ in 1..=3 {
        input_stream.next().await;
    }

    // End timer.
    let end_time = std::time::Instant::now();

    pretty_assertions::assert_eq!(input_stream.next().await, None);

    assert!(end_time - start_time >= Duration::from_millis(delay * 3));
}

stdout_fixtures

以下是如何使用此库的示例。

#[tokio::test]
async fn test_stdout_mock_no_strip_ansi() {
    use strip_ansi_escapes::strip;

    use super::*;
    use std::{
        io::{Result, Write},
        sync::Arc,
    };

    let mut stdout_mock = StdoutMock::default();
    let stdout_mock_clone = stdout_mock.clone(); // Points to the same inner value as `stdout_mock`.

    let normal_text = "hello world";

    stdout_mock.write_all(normal_text.as_bytes()).unwrap();
    stdout_mock.flush().unwrap();

    pretty_assertions::assert_eq!(stdout_mock.get_copy_of_buffer_as_string(), normal_text);
    pretty_assertions::assert_eq!(
        stdout_mock_clone.get_copy_of_buffer_as_string(),
        normal_text
    );
}

依赖关系

约9-16MB
约201K 行代码