6 个版本 (破坏性更新)
0.5.0 | 2023年7月17日 |
---|---|
0.4.0 | 2023年4月6日 |
0.3.1 | 2023年3月24日 |
0.2.0 | 2023年3月13日 |
0.1.0 | 2023年3月12日 |
在 #grammar-based 中排名 8
每月下载量 29
40KB
574 行
tree-splicer
tree-splicer 是一个简单的基于语法的测试用例生成器。它使用 tree-sitter 语法解析多个输入文件,并生成由它们的 AST 拼接而成的新文件。
tree-splicer 可以在 tree-crasher 漏洞挖掘器和 icemaker 中生成测试用例,尽管它也可以作为一个独立的工具使用。
tree-sitter 语法对语法错误有抵抗力。因此,tree-splicer 甚至可以突变语法无效的输入!您还可以使用 tree-splicer 与不完整的语法。
示例
给定这个简单的 Rust 程序
use std::env;
fn even(x: usize) -> bool {
if x % 2 == 0 {
return true;
} else {
return false;
}
}
fn main() -> () {
let argc = env::args().len();
println!("Hello, world!");
if even(argc) {
println!("Even!");
} else {
println!("Odd!");
}
return ();
}
以下是 tree-splicer-rust
创建的一些候选者
use even::env;
fn even() -> bool {
if even(argc) {
println!("Even!");
} else {
println!("Odd!");
}
}
fn std() -> () {
return true;
}
use args::env;
fn argc(main: usize) -> bool {
return true;
}
fn even(x: usize) -> bool {
if x % 2 == 0 {
return true;
} else {
return false;
}
}
use std::env;
fn x(x: usize) -> bool {
return true;
}
fn x(x: usize) -> () {
return false;
}
支持的语言
添加语言很简单,请参阅 PR #3 中的示例。
- JavaScript
- Rust
- TypeScript
发现的错误
boa
clang
#61635 #61666 #61667 #61746 #61747
deno
rustc
#109066 #109071 #109072 #109078 #109079 #109090 #109129 #109141 #109143 #109144 #109146 #109147 #109148 #109152 #109178 #109188 #109191 #109204 #109232 #109239 #109296 #109297 #109298 #109299 #109300 #109304 #109305
rustfmt
安装
预编译的二进制文件
预编译的二进制文件可在 发布页面 上找到。
从源代码构建
要从源代码安装,您需要安装 Rust 和 Cargo。按照 Rust 安装页面 上的说明进行操作。
从 crates.io 的发布版
您可以从 crates.io 构建发布版本。要为 <LANG>
语言安装 tree-splicer 的最新版本,请运行
cargo install tree-splicer-<LANG>
这将自动从 crates.io 下载源代码,构建它,并将其安装到 Cargo 的全局二进制目录(默认为 ~/.cargo/bin/
)。
从 GitHub 上的最新未发布版本
要构建和安装最新未发布版本,请运行
cargo install --git https://github.com/langston-barrett/tree-splicer.git tree-splicer-LANG
卸载
要卸载,请运行 cargo uninstall tree-splicer-<LANG>
。
构建
要从源代码构建,您需要安装 Rust 和 Cargo。按照 Rust 安装页面 上的说明进行操作。然后,获取源代码
git clone https://github.com/langston-barrett/tree-splicer
cd tree-splicer
最后,构建所有内容
cargo build --release
您可以在 target/release
中找到二进制文件。使用 cargo test
运行测试。
依赖项
约 12–24MB
约 401K SLoC