-
Notifications
You must be signed in to change notification settings - Fork 121
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
6 changed files
with
1,255 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
extern crate difference; | ||
extern crate wayland_scanner; | ||
|
||
|
||
use difference::{Changeset, Difference}; | ||
use std::io::Cursor; | ||
use std::str::from_utf8; | ||
use wayland_scanner::Side; | ||
|
||
const PROTOCOL: &'static str = include_str!("./scanner_assets/protocol.xml"); | ||
|
||
const C_INTERFACES_TARGET: &'static str = include_str!("./scanner_assets/c_interfaces.rs"); | ||
|
||
const CLIENT_C_CODE_TARGET: &'static str = include_str!("./scanner_assets/client_c_code.rs"); | ||
|
||
const SERVER_C_CODE_TARGET: &'static str = include_str!("./scanner_assets/server_c_code.rs"); | ||
|
||
fn print_diff(diffs: &[Difference]) { | ||
println!(""); | ||
for d in diffs { | ||
match *d { | ||
Difference::Same(ref x) => for l in x.lines() { | ||
println!(" {}", l); | ||
}, | ||
Difference::Add(ref x) => for l in x.lines() { | ||
println!("\x1b[92m + {}\x1b[0m", l); | ||
}, | ||
Difference::Rem(ref x) => for l in x.lines() { | ||
println!("\x1b[91m - {}\x1b[0m", l); | ||
}, | ||
} | ||
} | ||
} | ||
|
||
fn only_newlines_err(diffs: &[Difference]) -> bool { | ||
for d in diffs { | ||
match *d { | ||
Difference::Add(_) | Difference::Rem(_) => return false, | ||
_ => {} | ||
} | ||
} | ||
return true; | ||
} | ||
|
||
#[test] | ||
fn c_interfaces_generation() { | ||
let mut out = Vec::new(); | ||
wayland_scanner::generate_c_interfaces_streams(Cursor::new(PROTOCOL.as_bytes()), &mut out); | ||
let changeset = Changeset::new( | ||
C_INTERFACES_TARGET, | ||
from_utf8(&out).expect("Output of scanner was not UTF8."), | ||
"\n", | ||
); | ||
if changeset.distance != 0 && !only_newlines_err(&changeset.diffs) { | ||
print_diff(&changeset.diffs); | ||
panic!( | ||
"Scanner output does not match expected output: d = {}", | ||
changeset.distance | ||
); | ||
} | ||
} | ||
|
||
#[test] | ||
fn client_c_code_generation() { | ||
let mut out = Vec::new(); | ||
wayland_scanner::generate_c_code_streams(Cursor::new(PROTOCOL.as_bytes()), &mut out, Side::Client); | ||
let changeset = Changeset::new( | ||
CLIENT_C_CODE_TARGET, | ||
from_utf8(&out).expect("Output of scanner was not UTF8."), | ||
"\n", | ||
); | ||
if changeset.distance != 0 && !only_newlines_err(&changeset.diffs) { | ||
print_diff(&changeset.diffs); | ||
panic!( | ||
"Scanner output does not match expected output: d = {}", | ||
changeset.distance | ||
); | ||
} | ||
} | ||
|
||
#[test] | ||
fn server_c_code_generation() { | ||
let mut out = Vec::new(); | ||
wayland_scanner::generate_c_code_streams(Cursor::new(PROTOCOL.as_bytes()), &mut out, Side::Server); | ||
let changeset = Changeset::new( | ||
SERVER_C_CODE_TARGET, | ||
from_utf8(&out).expect("Output of scanner was not UTF8."), | ||
"\n", | ||
); | ||
if changeset.distance != 0 && !only_newlines_err(&changeset.diffs) { | ||
print_diff(&changeset.diffs); | ||
panic!( | ||
"Scanner output does not match expected output: d = {}", | ||
changeset.distance | ||
); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,108 @@ | ||
// | ||
// This file was auto-generated, do not edit directly | ||
// | ||
|
||
/* | ||
This is an example copyright. | ||
It contains several lines. | ||
AS WELL AS ALL CAPS TEXT. | ||
*/ | ||
|
||
use std::os::raw::{c_char, c_void}; | ||
use wayland_sys::common::*; | ||
|
||
const NULLPTR: *const c_void = 0 as *const c_void; | ||
|
||
static mut types_null: [*const wl_interface; 5] = [ | ||
NULLPTR as *const wl_interface, | ||
NULLPTR as *const wl_interface, | ||
NULLPTR as *const wl_interface, | ||
NULLPTR as *const wl_interface, | ||
NULLPTR as *const wl_interface, | ||
]; | ||
|
||
// wl_foo | ||
static mut wl_foo_requests_create_bar_types: [*const wl_interface; 1] = [ | ||
unsafe { &wl_bar_interface as *const wl_interface }, | ||
]; | ||
|
||
pub static mut wl_foo_requests: [wl_message; 2] = [ | ||
wl_message { name: b"foo_it\0" as *const u8 as *const c_char, signature: b"iusfh\0" as *const u8 as *const c_char, types: unsafe { &types_null as *const _ } }, | ||
wl_message { name: b"create_bar\0" as *const u8 as *const c_char, signature: b"n\0" as *const u8 as *const c_char, types: unsafe { &wl_foo_requests_create_bar_types as *const _ } }, | ||
]; | ||
|
||
pub static mut wl_foo_events: [wl_message; 1] = [ | ||
wl_message { name: b"cake\0" as *const u8 as *const c_char, signature: b"2uu\0" as *const u8 as *const c_char, types: unsafe { &types_null as *const _ } }, | ||
]; | ||
|
||
pub static mut wl_foo_interface: wl_interface = wl_interface { | ||
name: b"wl_foo\0" as *const u8 as *const c_char, | ||
version: 3, | ||
request_count: 2, | ||
requests: unsafe { &wl_foo_requests as *const _ }, | ||
event_count: 1, | ||
events: unsafe { &wl_foo_events as *const _ }, | ||
}; | ||
|
||
// wl_bar | ||
static mut wl_bar_requests_bar_delivery_types: [*const wl_interface; 3] = [ | ||
NULLPTR as *const wl_interface, | ||
unsafe { &wl_foo_interface as *const wl_interface }, | ||
NULLPTR as *const wl_interface, | ||
]; | ||
|
||
pub static mut wl_bar_requests: [wl_message; 2] = [ | ||
wl_message { name: b"bar_delivery\0" as *const u8 as *const c_char, signature: b"2uoa\0" as *const u8 as *const c_char, types: unsafe { &wl_bar_requests_bar_delivery_types as *const _ } }, | ||
wl_message { name: b"release\0" as *const u8 as *const c_char, signature: b"\0" as *const u8 as *const c_char, types: unsafe { &types_null as *const _ } }, | ||
]; | ||
|
||
pub static mut wl_bar_interface: wl_interface = wl_interface { | ||
name: b"wl_bar\0" as *const u8 as *const c_char, | ||
version: 1, | ||
request_count: 2, | ||
requests: unsafe { &wl_bar_requests as *const _ }, | ||
event_count: 0, | ||
events: NULLPTR as *const wl_message, | ||
}; | ||
|
||
// wl_display | ||
pub static mut wl_display_interface: wl_interface = wl_interface { | ||
name: b"wl_display\0" as *const u8 as *const c_char, | ||
version: 1, | ||
request_count: 0, | ||
requests: NULLPTR as *const wl_message, | ||
event_count: 0, | ||
events: NULLPTR as *const wl_message, | ||
}; | ||
|
||
// wl_registry | ||
|
||
pub static mut wl_registry_requests: [wl_message; 1] = [ | ||
wl_message { name: b"bind\0" as *const u8 as *const c_char, signature: b"usun\0" as *const u8 as *const c_char, types: unsafe { &types_null as *const _ } }, | ||
]; | ||
|
||
pub static mut wl_registry_interface: wl_interface = wl_interface { | ||
name: b"wl_registry\0" as *const u8 as *const c_char, | ||
version: 1, | ||
request_count: 1, | ||
requests: unsafe { &wl_registry_requests as *const _ }, | ||
event_count: 0, | ||
events: NULLPTR as *const wl_message, | ||
}; | ||
|
||
// wl_callback | ||
|
||
pub static mut wl_callback_events: [wl_message; 1] = [ | ||
wl_message { name: b"done\0" as *const u8 as *const c_char, signature: b"u\0" as *const u8 as *const c_char, types: unsafe { &types_null as *const _ } }, | ||
]; | ||
|
||
pub static mut wl_callback_interface: wl_interface = wl_interface { | ||
name: b"wl_callback\0" as *const u8 as *const c_char, | ||
version: 1, | ||
request_count: 0, | ||
requests: NULLPTR as *const wl_message, | ||
event_count: 1, | ||
events: unsafe { &wl_callback_events as *const _ }, | ||
}; | ||
|
||
|
Oops, something went wrong.