10 个版本
0.4.8 | 2024年2月17日 |
---|---|
0.4.7 | 2023年6月10日 |
0.4.6 | 2023年5月6日 |
0.4.5 | 2022年11月19日 |
0.3.0 | 2020年6月1日 |
#17 在 配置
12,972 每月下载量
用于 libc-test
91KB
2K SLoC
ctest2
注意:这是一个 ctest
的分支,旨在作为 ctest
维护恢复前的临时替代品。
Rust 中 FFI 绑定的自动化测试。此仓库旨在验证可在 crates.io 上找到的 *-sys
crates,以确保 Rust 中的 API 与在 C 中定义的 API 相匹配。
MSRV (最低支持 Rust 版本)
由于传递依赖项,MSRV 为 1.56.0。请注意,MSRV 可能随时因依赖项而更改。
示例
遗憾的是,目前的用法有点奇怪,但为了使用此库,首先,在你的仓库中创建一个新的 Cargo 项目
$ cargo new --bin systest
然后,编辑 systest/Cargo.toml
以添加以下依赖项
[package]
# ...
build = "build.rs"
[dependencies]
mylib-sys = { path = "../mylib-sys" }
libc = "0.2"
[build-dependencies]
ctest2 = "0.4"
接下来,向 systest/build.rs
添加构建脚本
fn main() {
let mut cfg = ctest2::TestGenerator::new();
// Include the header files where the C APIs are defined
cfg.header("foo.h")
.header("bar.h");
// Include the directory where the header files are defined
cfg.include("path/to/include");
// Generate the tests, passing the path to the `*-sys` library as well as
// the module to generate.
cfg.generate("../mylib-sys/lib.rs", "all.rs");
}
接下来,将此添加到 src/main.rs
#![allow(bad_style)]
use libc::*;
use mylib_sys::*;
include!(concat!(env!("OUT_DIR"), "/all.rs"));
然后就可以使用了!要运行测试,请在 systest
目录中执行 cargo run
,一切应该都会启动!
工作原理
此库将解析 *-sys
crate,以了解所有 extern fn 定义。然后,它将生成一个测试套件,以确保所有函数签名、常量值、结构体布局/对齐、类型大小/对齐等都与它们的 C 等价物匹配。
生成的测试有两种形式。一种是一个包含 main
函数的 Rust 文件(因此上面的 include!
),另一种是作为构建脚本一部分编译的 C 文件。C 文件包含所有头文件,并返回有关 C 方面的信息(在 Rust 中进行验证)。
可以对如何生成 C 文件应用大量的配置,您可以浏览 文档。
使用 ctest2 的项目
许可证
此项目受以下任一许可证的许可:
- Apache许可证,版本2.0,(LICENSE-APACHE 或 https://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 https://opensource.org/licenses/MIT)
由您自行选择。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义的您有意提交以包含在ctest2中的任何贡献,应以上述双许可方式授权,不附加任何额外条款或条件。
依赖项
~2.5–3.5MB
~81K SLoC