#codegen #proc-macro #file-path #glob-pattern #test

test-each-codegen

test-each 内部 proc-macro 包

3 个不稳定版本

0.2.1 2023年6月1日
0.2.0 2023年6月1日
0.1.0 2023年5月30日

#45 in #glob-pattern

Download history 50/week @ 2024-04-22 98/week @ 2024-04-29 37/week @ 2024-05-06 54/week @ 2024-05-13 442/week @ 2024-05-20 532/week @ 2024-05-27 320/week @ 2024-06-03 397/week @ 2024-06-10 390/week @ 2024-06-17 246/week @ 2024-06-24 100/week @ 2024-07-01 195/week @ 2024-07-08 110/week @ 2024-07-15 186/week @ 2024-07-22 33/week @ 2024-07-29 100/week @ 2024-08-05

每月下载量 429
2 个包中使用 (通过 test-each)

自定义许可证

8KB
152

test-each

在编译时根据文件和目录生成测试。

用法

此包包含三个属性,所有属性都根据文件 glob 模式生成测试。每个属性都生成具有不同参数类型的测试。生成的测试名称将采用清理后的文件名版本。

文本文件

使用 &'static strtest_each::file 接收文件内容。这将忽略任何匹配的目录。

#[test_each::file(glob = "data/*.txt")]
fn test_file(content: &str) {
    // check contents
}

如果 data 包含文件 foo.txtbar.txt,则以下代码将被生成

#[test]
fn test_file_foo() {
    test_file(include_str("data/foo.txt"))
}

#[test]
fn test_file_bar() {
    test_file(include_str("data/bar.txt"))
}

二进制文件

使用 &'static [u8]test_each::blob 接收文件内容。这将忽略任何匹配的目录。

#[test_each::blob(glob = "data/*.bin")]
fn test_bytes(content: &[u8]) {
    // check contents
}

声明第二个参数以接收文件路径。

#[test_each::blob(glob = "data/*.bin")]
fn test_bytes(content: &[u8], path: PathBuf) {
    // check contents and path
}

文件和目录的路径

使用 PathBuftest_each::path 接收文件路径。这将包括任何匹配的目录。

#[test_each::path(glob = "data/*")]
fn test_bytes(path: PathBuf) {
    // check path
}

自定义函数名称

默认情况下,生成的测试名称将由没有扩展名的转义文件名组成。使用 name 属性可以更改函数名称的格式。

使用name(segments = <n>)向名称中添加n个路径段(从右到左)。

使用name(index)在测试名称的末尾添加一个唯一的索引。这将防止名称冲突。

使用name(extension)在测试名称的末尾包含文件扩展名。

/// The generated function name will be `test_file_bar_baz_data_txt_0`
#[test_each::file(glob = "foo/bar/baz/data.txt", name(segments = 3, index, extension))]
fn test_file(_: &str) {}

注意

对已包含文件的任何更改都将正确触发重新编译,但创建一个匹配glob的新文件可能不会导致重新编译。要修复此问题,请添加一个生成cargo-rerun-if-changed={<glob directories>}的构建文件。

依赖关系

~300–750KB
~18K SLoC