Skip to content

Commit 5201aa6

Browse files
committed
tests: added annotations coverage test
1 parent 1e79e87 commit 5201aa6

5 files changed

Lines changed: 52 additions & 17 deletions

File tree

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ pyo3 = { version = "0.28", features = ["multiple-pymethods", "uuid"], optional =
6262
# extra
6363
async-trait = { version = "0.1", optional = true }
6464
serde = { version = "1.0", features = ["derive"], optional = true }
65-
syn = { version = "2.0.117", features = ["full", "visit"] }
65+
syn = { version = "2.0.117", features = ["full", "visit"], optional = true }
66+
regex = { version = "1.12", optional = true }
6667

6768
[build-dependencies]
6869
# glue (js)
@@ -77,7 +78,7 @@ async-trait = ["dep:async-trait"]
7778
serialize = ["dep:serde", "uuid/serde"]
7879
# special tests which require more setup
7980
test-e2e = []
80-
test-coverage = []
81+
test-coverage = ["dep:syn", "dep:regex"]
8182
# ffi
8283
java = ["dep:jni", "dep:tracing-subscriber", "dep:jni-toolbox"]
8384
js = ["dep:napi-build", "dep:tracing-subscriber", "dep:napi", "dep:napi-derive"]

src/tests/coverage/annotations.rs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#[test]
2+
#[cfg(all(test, feature = "lua"))]
3+
fn lua_annotations_should_cover_ffi_api_surface() {
4+
let annotations = include_str!("../../../dist/lua/annotations.lua");
5+
6+
let source = concat!(
7+
include_str!("../../ffi/lua/client.rs"),
8+
include_str!("../../ffi/lua/workspace.rs"),
9+
include_str!("../../ffi/lua/buffer.rs"),
10+
include_str!("../../ffi/lua/cursor.rs"),
11+
);
12+
13+
let re = regex::Regex::new("add_method\\(\\s+\"(\\w+)\",").expect("failed building regex");
14+
15+
let mut missing = Vec::new();
16+
for (_, [fn_name]) in re.captures_iter(source).map(|c| c.extract()) {
17+
if !annotations.contains(fn_name) {
18+
#[cfg(feature = "ci")]
19+
{
20+
println!("::warning title=Coverage::Missing Lua annotations for method: '{fn_name}'");
21+
}
22+
missing.push(fn_name.to_string());
23+
}
24+
}
25+
26+
assert!(
27+
missing.is_empty(),
28+
"missing lua annotations for methods: '{}'",
29+
missing.join("', '"),
30+
);
31+
}
Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -181,9 +181,9 @@ fn python_ffi_should_cover_rust_api_surface() {
181181
let required = discover_core_surface(files, targets);
182182

183183
let python_src = concat!(
184-
include_str!("../ffi/python/client.rs"),
185-
include_str!("../ffi/python/workspace.rs"),
186-
include_str!("../ffi/python/controllers.rs"),
184+
include_str!("../../ffi/python/client.rs"),
185+
include_str!("../../ffi/python/workspace.rs"),
186+
include_str!("../../ffi/python/controllers.rs"),
187187
);
188188

189189
let python_ignore = ["Client.connect"];
@@ -224,10 +224,10 @@ fn javascript_ffi_should_cover_rust_api_surface() {
224224
let required = discover_core_surface(files, targets);
225225

226226
let js_src = concat!(
227-
include_str!("../ffi/js/client.rs"),
228-
include_str!("../ffi/js/workspace.rs"),
229-
include_str!("../ffi/js/buffer.rs"),
230-
include_str!("../ffi/js/cursor.rs"),
227+
include_str!("../../ffi/js/client.rs"),
228+
include_str!("../../ffi/js/workspace.rs"),
229+
include_str!("../../ffi/js/buffer.rs"),
230+
include_str!("../../ffi/js/cursor.rs"),
231231
);
232232

233233
let js_ignore = [];
@@ -268,10 +268,10 @@ fn lua_ffi_should_cover_rust_api_surface() {
268268
let required = discover_core_surface(files, targets);
269269

270270
let lua_src = concat!(
271-
include_str!("../ffi/lua/client.rs"),
272-
include_str!("../ffi/lua/workspace.rs"),
273-
include_str!("../ffi/lua/buffer.rs"),
274-
include_str!("../ffi/lua/cursor.rs"),
271+
include_str!("../../ffi/lua/client.rs"),
272+
include_str!("../../ffi/lua/workspace.rs"),
273+
include_str!("../../ffi/lua/buffer.rs"),
274+
include_str!("../../ffi/lua/cursor.rs"),
275275
);
276276

277277
let lua_ignore = ["Client.connect"];
@@ -312,10 +312,10 @@ fn java_ffi_should_cover_rust_api_surface() {
312312
let required = discover_core_surface(files, targets);
313313

314314
let java_src = concat!(
315-
include_str!("../ffi/java/client.rs"),
316-
include_str!("../ffi/java/workspace.rs"),
317-
include_str!("../ffi/java/buffer.rs"),
318-
include_str!("../ffi/java/cursor.rs"),
315+
include_str!("../../ffi/java/client.rs"),
316+
include_str!("../../ffi/java/workspace.rs"),
317+
include_str!("../../ffi/java/buffer.rs"),
318+
include_str!("../../ffi/java/cursor.rs"),
319319
);
320320

321321
let java_ignore = [];

src/tests/coverage/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
pub mod ffi;
2+
pub mod annotations;

0 commit comments

Comments
 (0)