diff options
Diffstat (limited to 'bitflags/test_suite')
-rw-r--r-- | bitflags/test_suite/Cargo.toml | 13 | ||||
-rw-r--r-- | bitflags/test_suite/tests/compile-fail/private_flags.rs | 20 | ||||
-rw-r--r-- | bitflags/test_suite/tests/compiletest.rs | 33 | ||||
-rw-r--r-- | bitflags/test_suite/tests/conflicting_trait_impls.rs | 17 | ||||
-rw-r--r-- | bitflags/test_suite/tests/external.rs | 19 | ||||
-rw-r--r-- | bitflags/test_suite/tests/external_no_std.rs | 21 | ||||
-rw-r--r-- | bitflags/test_suite/tests/i128_bitflags.rs | 30 | ||||
-rw-r--r-- | bitflags/test_suite/tests/serde.rs | 35 |
8 files changed, 188 insertions, 0 deletions
diff --git a/bitflags/test_suite/Cargo.toml b/bitflags/test_suite/Cargo.toml new file mode 100644 index 0000000..2a02d80 --- /dev/null +++ b/bitflags/test_suite/Cargo.toml @@ -0,0 +1,13 @@ +[project] +name = "test_suite" +version = "0.0.0" + +[features] +unstable = ["compiletest_rs"] + +[dependencies] +bitflags = { path = "../" } +compiletest_rs = { version = "0.3.18", optional = true, features=["stable"] } +serde = "1.0" +serde_derive = "1.0" +serde_json = "1.0" diff --git a/bitflags/test_suite/tests/compile-fail/private_flags.rs b/bitflags/test_suite/tests/compile-fail/private_flags.rs new file mode 100644 index 0000000..d31c28d --- /dev/null +++ b/bitflags/test_suite/tests/compile-fail/private_flags.rs @@ -0,0 +1,20 @@ +#[macro_use] +extern crate bitflags; + +mod example { + bitflags! { + pub struct Flags1: u32 { + const FLAG_A = 0b00000001; + } + } + bitflags! { + struct Flags2: u32 { + const FLAG_B = 0b00000010; + } + } +} + +fn main() { + let flag1 = example::Flags1::FLAG_A; + let flag2 = example::Flags2::FLAG_B; //~ ERROR struct `Flags2` is private +} diff --git a/bitflags/test_suite/tests/compiletest.rs b/bitflags/test_suite/tests/compiletest.rs new file mode 100644 index 0000000..2beeae0 --- /dev/null +++ b/bitflags/test_suite/tests/compiletest.rs @@ -0,0 +1,33 @@ +#![cfg(feature = "unstable")] + +extern crate compiletest_rs as compiletest; + +use std::fs; +use std::result::Result; + +use compiletest::common::Mode; + +fn run_mode(mode: Mode) { + let config = compiletest::Config { + mode: mode, + src_base: format!("tests/{}", mode).into(), + target_rustcflags: fs::read_dir("../target/debug/deps") + .unwrap() + .map(Result::unwrap) + .filter(|entry| { + let file_name = entry.file_name(); + let file_name = file_name.to_string_lossy(); + file_name.starts_with("libbitflags-") && file_name.ends_with(".rlib") + }) + .max_by_key(|entry| entry.metadata().unwrap().modified().unwrap()) + .map(|entry| format!("--extern bitflags={}", entry.path().to_string_lossy())), + ..Default::default() + }; + + compiletest::run_tests(&config); +} + +#[test] +fn compile_test() { + run_mode(Mode::CompileFail); +} diff --git a/bitflags/test_suite/tests/conflicting_trait_impls.rs b/bitflags/test_suite/tests/conflicting_trait_impls.rs new file mode 100644 index 0000000..eb7a325 --- /dev/null +++ b/bitflags/test_suite/tests/conflicting_trait_impls.rs @@ -0,0 +1,17 @@ +#![no_std] + +#[macro_use] +extern crate bitflags; + +#[allow(unused_imports)] +use core::fmt::Display; + +bitflags! { + /// baz + struct Flags: u32 { + const A = 0b00000001; + } +} + +#[test] +fn main() {} diff --git a/bitflags/test_suite/tests/external.rs b/bitflags/test_suite/tests/external.rs new file mode 100644 index 0000000..4c88387 --- /dev/null +++ b/bitflags/test_suite/tests/external.rs @@ -0,0 +1,19 @@ +#[macro_use] +extern crate bitflags; + +bitflags! { + /// baz + struct Flags: u32 { + const A = 0b00000001; + #[doc = "bar"] + const B = 0b00000010; + const C = 0b00000100; + #[doc = "foo"] + const ABC = Flags::A.bits | Flags::B.bits | Flags::C.bits; + } +} + +#[test] +fn smoke() { + assert_eq!(Flags::ABC, Flags::A | Flags::B | Flags::C); +} diff --git a/bitflags/test_suite/tests/external_no_std.rs b/bitflags/test_suite/tests/external_no_std.rs new file mode 100644 index 0000000..31f87e4 --- /dev/null +++ b/bitflags/test_suite/tests/external_no_std.rs @@ -0,0 +1,21 @@ +#![no_std] + +#[macro_use] +extern crate bitflags; + +bitflags! { + /// baz + struct Flags: u32 { + const A = 0b00000001; + #[doc = "bar"] + const B = 0b00000010; + const C = 0b00000100; + #[doc = "foo"] + const ABC = Flags::A.bits | Flags::B.bits | Flags::C.bits; + } +} + +#[test] +fn smoke() { + assert_eq!(Flags::ABC, Flags::A | Flags::B | Flags::C); +} diff --git a/bitflags/test_suite/tests/i128_bitflags.rs b/bitflags/test_suite/tests/i128_bitflags.rs new file mode 100644 index 0000000..1b6f7c5 --- /dev/null +++ b/bitflags/test_suite/tests/i128_bitflags.rs @@ -0,0 +1,30 @@ +#![cfg(feature = "unstable")] + +#[macro_use] +extern crate bitflags; + +bitflags! { + /// baz + struct Flags128: u128 { + const A = 0x0000_0000_0000_0000_0000_0000_0000_0001; + const B = 0x0000_0000_0000_1000_0000_0000_0000_0000; + const C = 0x8000_0000_0000_0000_0000_0000_0000_0000; + const ABC = Self::A.bits | Self::B.bits | Self::C.bits; + } +} + +#[test] +fn test_i128_bitflags() { + assert_eq!(Flags128::ABC, Flags128::A | Flags128::B | Flags128::C); + assert_eq!(Flags128::A.bits, 0x0000_0000_0000_0000_0000_0000_0000_0001); + assert_eq!(Flags128::B.bits, 0x0000_0000_0000_1000_0000_0000_0000_0000); + assert_eq!(Flags128::C.bits, 0x8000_0000_0000_0000_0000_0000_0000_0000); + assert_eq!( + Flags128::ABC.bits, + 0x8000_0000_0000_1000_0000_0000_0000_0001 + ); + assert_eq!(format!("{:?}", Flags128::A), "A"); + assert_eq!(format!("{:?}", Flags128::B), "B"); + assert_eq!(format!("{:?}", Flags128::C), "C"); + assert_eq!(format!("{:?}", Flags128::ABC), "A | B | C | ABC"); +} diff --git a/bitflags/test_suite/tests/serde.rs b/bitflags/test_suite/tests/serde.rs new file mode 100644 index 0000000..0424af5 --- /dev/null +++ b/bitflags/test_suite/tests/serde.rs @@ -0,0 +1,35 @@ +#[macro_use] +extern crate bitflags; + +#[macro_use] +extern crate serde_derive; +extern crate serde; +extern crate serde_json; + +bitflags! { + #[derive(Serialize, Deserialize)] + struct Flags: u32 { + const A = 1; + const B = 2; + const C = 4; + const D = 8; + } +} + +#[test] +fn serialize() { + let flags = Flags::A | Flags::B; + + let serialized = serde_json::to_string(&flags).unwrap(); + + assert_eq!(serialized, r#"{"bits":3}"#); +} + +#[test] +fn deserialize() { + let deserialized: Flags = serde_json::from_str(r#"{"bits":12}"#).unwrap(); + + let expected = Flags::C | Flags::D; + + assert_eq!(deserialized.bits, expected.bits); +} |