diff --git a/crates/tests/libs/rdl/src/lib.rs b/crates/tests/libs/rdl/src/lib.rs index 74b606770d2..4549a3e41db 100644 --- a/crates/tests/libs/rdl/src/lib.rs +++ b/crates/tests/libs/rdl/src/lib.rs @@ -1,4 +1,3 @@ -pub mod flags_enum; mod fn_abi; pub mod struct_fields; pub mod struct_values; diff --git a/crates/tests/libs/rdl/tests/flags_enum.rs b/crates/tests/libs/rdl/tests/flags_enum.rs deleted file mode 100644 index b2f6f3fff54..00000000000 --- a/crates/tests/libs/rdl/tests/flags_enum.rs +++ /dev/null @@ -1,53 +0,0 @@ -use test_rdl::flags_enum::Test::*; - -#[test] -fn test() { - windows_rdl::reader() - .input("tests/flags_enum.rdl") - .output("tests/flags_enum.winmd") - .write() - .unwrap(); - - windows_rdl::writer() - .input("tests/flags_enum.winmd") - .output("tests/flags_enum.rdl") - .filter("Test") - .write() - .unwrap(); - - windows_bindgen::bindgen([ - "--in", - "tests/flags_enum.winmd", - "--out", - "src/flags_enum.rs", - "--filter", - "Test", - "--no-comment", - ]) - .unwrap(); - - // Validates that Win32 flags enums support bitwise operations and contains. - let rw = Options::Read | Options::Write; - assert_eq!(rw.0, 3); - assert!(rw.contains(Options::Read)); - assert!(rw.contains(Options::Write)); - assert!(!rw.contains(Options::Execute)); - - let read_only = rw & Options::Read; - assert_eq!(read_only, Options::Read); - - let mut flags = Options::Read; - flags |= Options::Write; - assert!(flags.contains(Options::Read)); - assert!(flags.contains(Options::Write)); - - flags &= Options::Read; - assert!(flags.contains(Options::Read)); - assert!(!flags.contains(Options::Write)); - - // Validates that flag enum constants can be used as match patterns. - match Options::Read { - Options::Read => {} - _ => unreachable!(), - } -} diff --git a/crates/tests/libs/rdl/tests/flags_enum.rdl b/crates/tests/roundtrip/bindgen/src/enum_flags.rdl similarity index 94% rename from crates/tests/libs/rdl/tests/flags_enum.rdl rename to crates/tests/roundtrip/bindgen/src/enum_flags.rdl index 44660025e5d..a2af4304215 100644 --- a/crates/tests/libs/rdl/tests/flags_enum.rdl +++ b/crates/tests/roundtrip/bindgen/src/enum_flags.rdl @@ -1,4 +1,4 @@ -#[winrt] +#[win32] mod Test { #[repr(u32)] #[flags] diff --git a/crates/tests/libs/rdl/src/flags_enum.rs b/crates/tests/roundtrip/bindgen/src/enum_flags.rs similarity index 63% rename from crates/tests/libs/rdl/src/flags_enum.rs rename to crates/tests/roundtrip/bindgen/src/enum_flags.rs index 1d85a997eb0..0e54501f7a4 100644 --- a/crates/tests/libs/rdl/src/flags_enum.rs +++ b/crates/tests/roundtrip/bindgen/src/enum_flags.rs @@ -1,28 +1,9 @@ -#![allow( - non_snake_case, - non_upper_case_globals, - non_camel_case_types, - dead_code, - clippy::all -)] - pub mod Test { + pub const Execute: Options = Options(4u32); + pub const None: Options = Options(0u32); #[repr(transparent)] #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)] pub struct Options(pub u32); - impl Options { - pub const None: Self = Self(0u32); - pub const Read: Self = Self(1u32); - pub const Write: Self = Self(2u32); - pub const Execute: Self = Self(4u32); - } - impl windows_core::TypeKind for Options { - type TypeKind = windows_core::CopyType; - } - impl windows_core::RuntimeType for Options { - const SIGNATURE: windows_core::imp::ConstBuffer = - windows_core::imp::ConstBuffer::from_slice(b"enum(Test.Options;u4)"); - } impl Options { pub const fn contains(&self, other: Self) -> bool { self.0 & other.0 == other.0 @@ -56,4 +37,6 @@ pub mod Test { Self(self.0.not()) } } + pub const Read: Options = Options(1u32); + pub const Write: Options = Options(2u32); } diff --git a/crates/tests/roundtrip/bindgen/src/lib.rs b/crates/tests/roundtrip/bindgen/src/lib.rs index 41e3036b930..8bda3381d44 100644 --- a/crates/tests/roundtrip/bindgen/src/lib.rs +++ b/crates/tests/roundtrip/bindgen/src/lib.rs @@ -7,6 +7,7 @@ )] pub mod r#const; pub mod r#enum; +pub mod r#enum_flags; pub mod r#enum_name_conflict; pub mod r#fn; pub mod r#struct; diff --git a/crates/tests/roundtrip/bindgen/tests/roundtrip.rs b/crates/tests/roundtrip/bindgen/tests/roundtrip.rs index cc4589c6962..db0fdbff5ef 100644 --- a/crates/tests/roundtrip/bindgen/tests/roundtrip.rs +++ b/crates/tests/roundtrip/bindgen/tests/roundtrip.rs @@ -23,6 +23,10 @@ fn roundtrip_enum() { run_roundtrip("enum"); } #[test] +fn roundtrip_enum_flags() { + run_roundtrip("enum_flags"); +} +#[test] fn roundtrip_enum_name_conflict() { run_roundtrip("enum_name_conflict"); }