summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTING.md11
-rw-r--r--src/ir/dot.rs7
-rwxr-xr-xtests/test-one.sh36
3 files changed, 51 insertions, 3 deletions
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index df32998b..0aad4f2c 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -94,6 +94,17 @@ Run `cargo test` to compare generated Rust bindings to the expectations.
$ cargo test [--all-features]
```
+### Running a Single Test
+
+To generate bindings for a single test header, compile the bindings, and run the
+layout assertion tests for those bindings, use the `tests/test-one.sh`
+script. It supports fuzzy searching for test headers. For example, to test
+`tests/headers/what_is_going_on.hpp`, execute this command:
+
+```
+$ ./tests/test-one.sh going
+```
+
### Authoring New Tests
To add a new test header to the suite, simply put it in the `tests/headers`
diff --git a/src/ir/dot.rs b/src/ir/dot.rs
index e7e1f47b..7472dd8e 100644
--- a/src/ir/dot.rs
+++ b/src/ir/dot.rs
@@ -36,15 +36,16 @@ pub fn write_dot_file<P>(ctx: &BindgenContext, path: P) -> io::Result<()>
try!(writeln!(&mut dot_file, r#"</table> >];"#));
item.trace(ctx,
- &mut |sub_id: ItemId, _edge_kind| {
+ &mut |sub_id: ItemId, edge_kind| {
if err.is_some() {
return;
}
match writeln!(&mut dot_file,
- "{} -> {};",
+ "{} -> {} [label={:?}];",
id.as_usize(),
- sub_id.as_usize()) {
+ sub_id.as_usize(),
+ edge_kind) {
Ok(_) => {}
Err(e) => err = Some(Err(e)),
}
diff --git a/tests/test-one.sh b/tests/test-one.sh
new file mode 100755
index 00000000..6475df7f
--- /dev/null
+++ b/tests/test-one.sh
@@ -0,0 +1,36 @@
+#!/usr/bin/env bash
+
+# Usage:
+#
+# ./tests/test-one.sh <fuzzy-name>
+#
+# Generate bindings for the first match of `./tests/headers/*<fuzzy-name>*`, use
+# `rustc` to compile the bindings with unit tests enabled, and run the generated
+# layout tests.
+
+set -eux
+
+cd $(dirname $0)
+cd ..
+
+export RUST_BACKTRACE=1
+
+# Grab the first match
+TEST=$(find ./tests/headers -type f -iname "*$1*" | head -n 1)
+
+BINDINGS=$(mktemp -t bindings_XXXXXX.rs)
+TEST_BINDINGS_BINARY=$(mktemp -t bindings.XXXXX)
+
+./target/debug/bindgen \
+ "$TEST" \
+ --emit-ir \
+ --emit-ir-graphviz ir.dot \
+ --emit-clang-ast \
+ -o "$BINDINGS" \
+ -- -std=c++14
+
+dot -Tpng ir.dot -o ir.png
+
+rustc --test -o "$TEST_BINDINGS_BINARY" "$BINDINGS"
+
+"$TEST_BINDINGS_BINARY"