summaryrefslogtreecommitdiff
path: root/tests/tests.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/tests.rs')
-rw-r--r--tests/tests.rs124
1 files changed, 78 insertions, 46 deletions
diff --git a/tests/tests.rs b/tests/tests.rs
index cf04af50..01f46ac6 100644
--- a/tests/tests.rs
+++ b/tests/tests.rs
@@ -8,15 +8,18 @@ use std::fs;
use std::io::{BufRead, BufReader, Error, ErrorKind, Read, Write};
use std::path::PathBuf;
-#[path="../src/options.rs"]
+#[path = "../src/options.rs"]
mod options;
use options::builder_from_flags;
-fn compare_generated_header(header: &PathBuf,
- builder: Builder)
- -> Result<(), Error> {
- let file_name = try!(header.file_name()
- .ok_or(Error::new(ErrorKind::Other, "spawn_bindgen expects a file")));
+fn compare_generated_header(
+ header: &PathBuf,
+ builder: Builder,
+) -> Result<(), Error> {
+ let file_name = try!(header.file_name().ok_or(Error::new(
+ ErrorKind::Other,
+ "spawn_bindgen expects a file",
+ )));
let mut expected = PathBuf::from(header);
expected.pop();
@@ -40,7 +43,7 @@ fn compare_generated_header(header: &PathBuf,
expected.push("libclang-3.8");
} else {
match clang_version().parsed {
- None => {},
+ None => {}
Some(version) => {
let (maj, min) = version;
let version_str = if maj >= 4 {
@@ -56,10 +59,12 @@ fn compare_generated_header(header: &PathBuf,
expected.push(file_name);
if !expected.is_file() {
- panic!("missing test expectation file and/or 'testing_only_libclang_$VERSION' \
+ panic!(
+ "missing test expectation file and/or 'testing_only_libclang_$VERSION' \
feature for header '{}'; looking for expectation file at '{}'",
- header.display(),
- expected.display());
+ header.display(),
+ expected.display()
+ );
}
}
@@ -80,8 +85,10 @@ fn compare_generated_header(header: &PathBuf,
if !output.is_empty() {
return Ok(());
}
- return Err(Error::new(ErrorKind::Other,
- "Something's gone really wrong!"));
+ return Err(Error::new(
+ ErrorKind::Other,
+ "Something's gone really wrong!",
+ ));
}
println!("diff expected generated");
@@ -126,13 +133,15 @@ fn create_bindgen_builder(header: &PathBuf) -> Result<Option<Builder>, Error> {
flags.extend(extra_flags.into_iter());
} else if line.contains("bindgen-osx-only") {
let prepend_flags = ["--raw-line", "#![cfg(target_os=\"macos\")]"];
- flags = prepend_flags.into_iter()
+ flags = prepend_flags
+ .into_iter()
.map(ToString::to_string)
.chain(flags)
.collect();
} else if line.contains("bindgen-generate-bindings-on-linux-only") &&
- !cfg!(target_os = "linux") {
- return Ok(None);
+ !cfg!(target_os = "linux")
+ {
+ return Ok(None);
}
}
@@ -155,25 +164,29 @@ fn create_bindgen_builder(header: &PathBuf) -> Result<Option<Builder>, Error> {
// - add header filename as 1st element
// - prepend raw lines so they're in the right order for expected output
// - append the test header's bindgen flags
- let header_str = try!(header.to_str()
- .ok_or(Error::new(ErrorKind::Other, "Invalid header file name")));
-
- let prepend = ["bindgen",
- "--with-derive-default",
- header_str,
- "--raw-line",
- "",
- "--raw-line",
- "#![allow(dead_code, non_snake_case, non_camel_case_types, non_upper_case_globals)]",
- "--raw-line",
- ""];
-
- let args = prepend.into_iter()
- .map(ToString::to_string)
- .chain(flags.into_iter());
-
- builder_from_flags(args)
- .map(|(builder, _, _)| Some(builder))
+ let header_str = try!(header.to_str().ok_or(Error::new(
+ ErrorKind::Other,
+ "Invalid header file name",
+ )));
+
+ let prepend = [
+ "bindgen",
+ "--with-derive-default",
+ header_str,
+ "--raw-line",
+ "",
+ "--raw-line",
+ "#![allow(dead_code, non_snake_case, non_camel_case_types, non_upper_case_globals)]",
+ "--raw-line",
+ "",
+ ];
+
+ let args = prepend.into_iter().map(ToString::to_string).chain(
+ flags
+ .into_iter(),
+ );
+
+ builder_from_flags(args).map(|(builder, _, _)| Some(builder))
}
macro_rules! test_header {
@@ -207,24 +220,33 @@ fn test_header_contents() {
.generate()
.unwrap()
.to_string();
- assert_eq!(bindings, "/* automatically generated by rust-bindgen */
+ assert_eq!(
+ bindings,
+ "/* automatically generated by rust-bindgen */
extern \"C\" {
pub fn foo(a: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int;
}
-");
+"
+ );
}
#[test]
fn test_multiple_header_calls_in_builder() {
let actual = builder()
- .header(concat!(env!("CARGO_MANIFEST_DIR"), "/tests/headers/func_ptr.h"))
+ .header(concat!(
+ env!("CARGO_MANIFEST_DIR"),
+ "/tests/headers/func_ptr.h"
+ ))
.header(concat!(env!("CARGO_MANIFEST_DIR"), "/tests/headers/char.h"))
.generate()
.unwrap()
.to_string();
- let expected = include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/tests/expectations/tests/test_multiple_header_calls_in_builder.rs"));
+ let expected = include_str!(concat!(
+ env!("CARGO_MANIFEST_DIR"),
+ "/tests/expectations/tests/test_multiple_header_calls_in_builder.rs"
+ ));
if actual != expected {
println!("Generated bindings differ from expected!");
@@ -247,19 +269,25 @@ fn test_multiple_header_calls_in_builder() {
#[cfg(not(target_os = "windows"))]
fn no_system_header_includes() {
use std::process::Command;
- assert!(Command::new("./ci/no-includes.sh")
+ assert!(
+ Command::new("./ci/no-includes.sh")
.current_dir(env!("CARGO_MANIFEST_DIR"))
.spawn()
.expect("should spawn ./ci/no-includes.sh OK")
.wait()
.expect("should wait for ./ci/no-includes OK")
- .success());
+ .success()
+ );
}
#[test]
fn dump_preprocessed_input() {
- let arg_keyword = concat!(env!("CARGO_MANIFEST_DIR"), "/tests/headers/arg_keyword.hpp");
- let empty_layout = concat!(env!("CARGO_MANIFEST_DIR"), "/tests/headers/cpp-empty-layout.hpp");
+ let arg_keyword =
+ concat!(env!("CARGO_MANIFEST_DIR"), "/tests/headers/arg_keyword.hpp");
+ let empty_layout = concat!(
+ env!("CARGO_MANIFEST_DIR"),
+ "/tests/headers/cpp-empty-layout.hpp"
+ );
builder()
.header(arg_keyword)
@@ -278,8 +306,12 @@ fn dump_preprocessed_input() {
let arg_keyword = slurp(arg_keyword);
let empty_layout = slurp(empty_layout);
- assert!(bindgen_ii.find(&arg_keyword).is_some(),
- "arg_keyword.hpp is in the preprocessed file");
- assert!(bindgen_ii.find(&empty_layout).is_some(),
- "cpp-empty-layout.hpp is in the preprocessed file");
+ assert!(
+ bindgen_ii.find(&arg_keyword).is_some(),
+ "arg_keyword.hpp is in the preprocessed file"
+ );
+ assert!(
+ bindgen_ii.find(&empty_layout).is_some(),
+ "cpp-empty-layout.hpp is in the preprocessed file"
+ );
}