From 5e20a29b4fdc8a2d442d1093681b396dcb4b816b Mon Sep 17 00:00:00 2001 From: Robin Krahl Date: Tue, 7 Jan 2020 11:18:04 +0000 Subject: Add structopt dependency in version 0.3.7 This patch series replaces argparse with structopt in the argument handling code. As a first step, we need structopt as a dependency. Import subrepo structopt/:structopt at efbdda4753592e27bc430fb01f7b9650b2f3174d Import subrepo bitflags/:bitflags at 30668016aca6bd3b02c766e8347e0b4080d4c296 Import subrepo clap/:clap at 784524f7eb193e35f81082cc69454c8c21b948f7 Import subrepo heck/:heck at 093d56fbf001e1506e56dbfa38631d99b1066df1 Import subrepo proc-macro-error/:proc-macro-error at 6c4cfe79a622c5de8ae68557993542be46eacae2 Import subrepo proc-macro2/:proc-macro2 at d5d48eddca4566e5438e8a2cbed4a74e049544de Import subrepo quote/:quote at 727436c6c137b20f0f34dde5d8fda2679b9747ad Import subrepo rustversion/:rustversion at 0c5663313516263059ce9059ef81fc7a1cf655ca Import subrepo syn-mid/:syn-mid at 5d3d85414a9e6674e1857ec22a87b96e04a6851a Import subrepo syn/:syn at e87c27e87f6f4ef8919d0372bdb056d53ef0d8f3 Import subrepo textwrap/:textwrap at abcd618beae3f74841032aa5b53c1086b0a57ca2 Import subrepo unicode-segmentation/:unicode-segmentation at 637c9874c4fe0c205ff27787faf150a40295c6c3 Import subrepo unicode-width/:unicode-width at 3033826f8bf05e82724140a981d5941e48fce393 Import subrepo unicode-xid/:unicode-xid at 4baae9fffb156ba229665b972a9cd5991787ceb7 --- bitflags/test_suite/Cargo.toml | 13 ++++++++ .../test_suite/tests/compile-fail/private_flags.rs | 20 +++++++++++++ bitflags/test_suite/tests/compiletest.rs | 33 ++++++++++++++++++++ .../test_suite/tests/conflicting_trait_impls.rs | 17 +++++++++++ bitflags/test_suite/tests/external.rs | 19 ++++++++++++ bitflags/test_suite/tests/external_no_std.rs | 21 +++++++++++++ bitflags/test_suite/tests/i128_bitflags.rs | 30 +++++++++++++++++++ bitflags/test_suite/tests/serde.rs | 35 ++++++++++++++++++++++ 8 files changed, 188 insertions(+) create mode 100644 bitflags/test_suite/Cargo.toml create mode 100644 bitflags/test_suite/tests/compile-fail/private_flags.rs create mode 100644 bitflags/test_suite/tests/compiletest.rs create mode 100644 bitflags/test_suite/tests/conflicting_trait_impls.rs create mode 100644 bitflags/test_suite/tests/external.rs create mode 100644 bitflags/test_suite/tests/external_no_std.rs create mode 100644 bitflags/test_suite/tests/i128_bitflags.rs create mode 100644 bitflags/test_suite/tests/serde.rs (limited to 'bitflags/test_suite') 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); +} -- cgit v1.2.3