Initial vendor packages
Signed-off-by: Valentin Popov <valentin@popov.link>
This commit is contained in:
20
vendor/bitflags-1.3.2/tests/basic.rs
vendored
Normal file
20
vendor/bitflags-1.3.2/tests/basic.rs
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
#![no_std]
|
||||
|
||||
use bitflags::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 basic() {
|
||||
assert_eq!(Flags::ABC, Flags::A | Flags::B | Flags::C);
|
||||
}
|
10
vendor/bitflags-1.3.2/tests/compile-fail/impls/copy.rs
vendored
Normal file
10
vendor/bitflags-1.3.2/tests/compile-fail/impls/copy.rs
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
use bitflags::bitflags;
|
||||
|
||||
bitflags! {
|
||||
#[derive(Clone, Copy)]
|
||||
struct Flags: u32 {
|
||||
const A = 0b00000001;
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
27
vendor/bitflags-1.3.2/tests/compile-fail/impls/copy.stderr.beta
vendored
Normal file
27
vendor/bitflags-1.3.2/tests/compile-fail/impls/copy.stderr.beta
vendored
Normal file
@ -0,0 +1,27 @@
|
||||
error[E0119]: conflicting implementations of trait `std::clone::Clone` for type `Flags`
|
||||
--> $DIR/copy.rs:3:1
|
||||
|
|
||||
3 | / bitflags! {
|
||||
4 | | #[derive(Clone, Copy)]
|
||||
| | ----- first implementation here
|
||||
5 | | struct Flags: u32 {
|
||||
6 | | const A = 0b00000001;
|
||||
7 | | }
|
||||
8 | | }
|
||||
| |_^ conflicting implementation for `Flags`
|
||||
|
|
||||
= note: this error originates in the derive macro `Clone` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0119]: conflicting implementations of trait `std::marker::Copy` for type `Flags`
|
||||
--> $DIR/copy.rs:3:1
|
||||
|
|
||||
3 | / bitflags! {
|
||||
4 | | #[derive(Clone, Copy)]
|
||||
| | ---- first implementation here
|
||||
5 | | struct Flags: u32 {
|
||||
6 | | const A = 0b00000001;
|
||||
7 | | }
|
||||
8 | | }
|
||||
| |_^ conflicting implementation for `Flags`
|
||||
|
|
||||
= note: this error originates in the derive macro `Copy` (in Nightly builds, run with -Z macro-backtrace for more info)
|
10
vendor/bitflags-1.3.2/tests/compile-fail/impls/eq.rs
vendored
Normal file
10
vendor/bitflags-1.3.2/tests/compile-fail/impls/eq.rs
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
use bitflags::bitflags;
|
||||
|
||||
bitflags! {
|
||||
#[derive(PartialEq, Eq)]
|
||||
struct Flags: u32 {
|
||||
const A = 0b00000001;
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
55
vendor/bitflags-1.3.2/tests/compile-fail/impls/eq.stderr.beta
vendored
Normal file
55
vendor/bitflags-1.3.2/tests/compile-fail/impls/eq.stderr.beta
vendored
Normal file
@ -0,0 +1,55 @@
|
||||
error[E0119]: conflicting implementations of trait `std::cmp::PartialEq` for type `Flags`
|
||||
--> $DIR/eq.rs:3:1
|
||||
|
|
||||
3 | / bitflags! {
|
||||
4 | | #[derive(PartialEq, Eq)]
|
||||
| | --------- first implementation here
|
||||
5 | | struct Flags: u32 {
|
||||
6 | | const A = 0b00000001;
|
||||
7 | | }
|
||||
8 | | }
|
||||
| |_^ conflicting implementation for `Flags`
|
||||
|
|
||||
= note: this error originates in the derive macro `PartialEq` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0119]: conflicting implementations of trait `std::cmp::Eq` for type `Flags`
|
||||
--> $DIR/eq.rs:3:1
|
||||
|
|
||||
3 | / bitflags! {
|
||||
4 | | #[derive(PartialEq, Eq)]
|
||||
| | -- first implementation here
|
||||
5 | | struct Flags: u32 {
|
||||
6 | | const A = 0b00000001;
|
||||
7 | | }
|
||||
8 | | }
|
||||
| |_^ conflicting implementation for `Flags`
|
||||
|
|
||||
= note: this error originates in the derive macro `Eq` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0119]: conflicting implementations of trait `std::marker::StructuralPartialEq` for type `Flags`
|
||||
--> $DIR/eq.rs:3:1
|
||||
|
|
||||
3 | / bitflags! {
|
||||
4 | | #[derive(PartialEq, Eq)]
|
||||
| | --------- first implementation here
|
||||
5 | | struct Flags: u32 {
|
||||
6 | | const A = 0b00000001;
|
||||
7 | | }
|
||||
8 | | }
|
||||
| |_^ conflicting implementation for `Flags`
|
||||
|
|
||||
= note: this error originates in the derive macro `PartialEq` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0119]: conflicting implementations of trait `std::marker::StructuralEq` for type `Flags`
|
||||
--> $DIR/eq.rs:3:1
|
||||
|
|
||||
3 | / bitflags! {
|
||||
4 | | #[derive(PartialEq, Eq)]
|
||||
| | -- first implementation here
|
||||
5 | | struct Flags: u32 {
|
||||
6 | | const A = 0b00000001;
|
||||
7 | | }
|
||||
8 | | }
|
||||
| |_^ conflicting implementation for `Flags`
|
||||
|
|
||||
= note: this error originates in the derive macro `Eq` (in Nightly builds, run with -Z macro-backtrace for more info)
|
123
vendor/bitflags-1.3.2/tests/compile-fail/non_integer_base/all_defined.rs
vendored
Normal file
123
vendor/bitflags-1.3.2/tests/compile-fail/non_integer_base/all_defined.rs
vendored
Normal file
@ -0,0 +1,123 @@
|
||||
use std::{
|
||||
fmt::{
|
||||
self,
|
||||
Debug,
|
||||
Display,
|
||||
LowerHex,
|
||||
UpperHex,
|
||||
Octal,
|
||||
Binary,
|
||||
},
|
||||
ops::{
|
||||
BitAnd,
|
||||
BitOr,
|
||||
BitXor,
|
||||
BitAndAssign,
|
||||
BitOrAssign,
|
||||
BitXorAssign,
|
||||
Not,
|
||||
},
|
||||
};
|
||||
|
||||
use bitflags::bitflags;
|
||||
|
||||
// Ideally we'd actually want this to work, but currently need something like `num`'s `Zero`
|
||||
// With some design work it could be made possible
|
||||
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
||||
struct MyInt(u8);
|
||||
|
||||
impl BitAnd for MyInt {
|
||||
type Output = Self;
|
||||
|
||||
fn bitand(self, other: Self) -> Self {
|
||||
MyInt(self.0 & other.0)
|
||||
}
|
||||
}
|
||||
|
||||
impl BitOr for MyInt {
|
||||
type Output = Self;
|
||||
|
||||
fn bitor(self, other: Self) -> Self {
|
||||
MyInt(self.0 | other.0)
|
||||
}
|
||||
}
|
||||
|
||||
impl BitXor for MyInt {
|
||||
type Output = Self;
|
||||
|
||||
fn bitxor(self, other: Self) -> Self {
|
||||
MyInt(self.0 ^ other.0)
|
||||
}
|
||||
}
|
||||
|
||||
impl BitAndAssign for MyInt {
|
||||
fn bitand_assign(&mut self, other: Self) {
|
||||
self.0 &= other.0
|
||||
}
|
||||
}
|
||||
|
||||
impl BitOrAssign for MyInt {
|
||||
fn bitor_assign(&mut self, other: Self) {
|
||||
self.0 |= other.0
|
||||
}
|
||||
}
|
||||
|
||||
impl BitXorAssign for MyInt {
|
||||
fn bitxor_assign(&mut self, other: Self) {
|
||||
self.0 ^= other.0
|
||||
}
|
||||
}
|
||||
|
||||
impl Debug for MyInt {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
Debug::fmt(&self.0, f)
|
||||
}
|
||||
}
|
||||
|
||||
impl Display for MyInt {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
Display::fmt(&self.0, f)
|
||||
}
|
||||
}
|
||||
|
||||
impl LowerHex for MyInt {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
LowerHex::fmt(&self.0, f)
|
||||
}
|
||||
}
|
||||
|
||||
impl UpperHex for MyInt {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
UpperHex::fmt(&self.0, f)
|
||||
}
|
||||
}
|
||||
|
||||
impl Octal for MyInt {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
Octal::fmt(&self.0, f)
|
||||
}
|
||||
}
|
||||
|
||||
impl Binary for MyInt {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
Binary::fmt(&self.0, f)
|
||||
}
|
||||
}
|
||||
|
||||
impl Not for MyInt {
|
||||
type Output = MyInt;
|
||||
|
||||
fn not(self) -> Self {
|
||||
MyInt(!self.0)
|
||||
}
|
||||
}
|
||||
|
||||
bitflags! {
|
||||
struct Flags128: MyInt {
|
||||
const A = MyInt(0b0000_0001u8);
|
||||
const B = MyInt(0b0000_0010u8);
|
||||
const C = MyInt(0b0000_0100u8);
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
27
vendor/bitflags-1.3.2/tests/compile-fail/non_integer_base/all_defined.stderr.beta
vendored
Normal file
27
vendor/bitflags-1.3.2/tests/compile-fail/non_integer_base/all_defined.stderr.beta
vendored
Normal file
@ -0,0 +1,27 @@
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/all_defined.rs:115:1
|
||||
|
|
||||
115 | / bitflags! {
|
||||
116 | | struct Flags128: MyInt {
|
||||
117 | | const A = MyInt(0b0000_0001u8);
|
||||
118 | | const B = MyInt(0b0000_0010u8);
|
||||
119 | | const C = MyInt(0b0000_0100u8);
|
||||
120 | | }
|
||||
121 | | }
|
||||
| |_^ expected struct `MyInt`, found integer
|
||||
|
|
||||
= note: this error originates in the macro `__impl_all_bitflags` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/all_defined.rs:115:1
|
||||
|
|
||||
115 | / bitflags! {
|
||||
116 | | struct Flags128: MyInt {
|
||||
117 | | const A = MyInt(0b0000_0001u8);
|
||||
118 | | const B = MyInt(0b0000_0010u8);
|
||||
119 | | const C = MyInt(0b0000_0100u8);
|
||||
120 | | }
|
||||
121 | | }
|
||||
| |_^ expected struct `MyInt`, found integer
|
||||
|
|
||||
= note: this error originates in the macro `__impl_bitflags` (in Nightly builds, run with -Z macro-backtrace for more info)
|
13
vendor/bitflags-1.3.2/tests/compile-fail/non_integer_base/all_missing.rs
vendored
Normal file
13
vendor/bitflags-1.3.2/tests/compile-fail/non_integer_base/all_missing.rs
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
use bitflags::bitflags;
|
||||
|
||||
struct MyInt(u8);
|
||||
|
||||
bitflags! {
|
||||
struct Flags128: MyInt {
|
||||
const A = MyInt(0b0000_0001);
|
||||
const B = MyInt(0b0000_0010);
|
||||
const C = MyInt(0b0000_0100);
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
13
vendor/bitflags-1.3.2/tests/compile-fail/non_integer_base/all_missing.stderr.beta
vendored
Normal file
13
vendor/bitflags-1.3.2/tests/compile-fail/non_integer_base/all_missing.stderr.beta
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
error[E0204]: the trait `Copy` may not be implemented for this type
|
||||
--> $DIR/all_missing.rs:5:1
|
||||
|
|
||||
5 | / bitflags! {
|
||||
6 | | struct Flags128: MyInt {
|
||||
7 | | const A = MyInt(0b0000_0001);
|
||||
8 | | const B = MyInt(0b0000_0010);
|
||||
9 | | const C = MyInt(0b0000_0100);
|
||||
10 | | }
|
||||
11 | | }
|
||||
| |_^ this field does not implement `Copy`
|
||||
|
|
||||
= note: this error originates in the derive macro `Copy` (in Nightly builds, run with -Z macro-backtrace for more info)
|
13
vendor/bitflags-1.3.2/tests/compile-fail/visibility/private_field.rs
vendored
Normal file
13
vendor/bitflags-1.3.2/tests/compile-fail/visibility/private_field.rs
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
mod example {
|
||||
use bitflags::bitflags;
|
||||
|
||||
bitflags! {
|
||||
pub struct Flags1: u32 {
|
||||
const FLAG_A = 0b00000001;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let flag1 = example::Flags1::FLAG_A.bits;
|
||||
}
|
10
vendor/bitflags-1.3.2/tests/compile-fail/visibility/private_field.stderr.beta
vendored
Normal file
10
vendor/bitflags-1.3.2/tests/compile-fail/visibility/private_field.stderr.beta
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
error[E0616]: field `bits` of struct `Flags1` is private
|
||||
--> $DIR/private_field.rs:12:41
|
||||
|
|
||||
12 | let flag1 = example::Flags1::FLAG_A.bits;
|
||||
| ^^^^ private field
|
||||
|
|
||||
help: a method `bits` also exists, call it with parentheses
|
||||
|
|
||||
12 | let flag1 = example::Flags1::FLAG_A.bits();
|
||||
| ^^
|
18
vendor/bitflags-1.3.2/tests/compile-fail/visibility/private_flags.rs
vendored
Normal file
18
vendor/bitflags-1.3.2/tests/compile-fail/visibility/private_flags.rs
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
mod example {
|
||||
use bitflags::bitflags;
|
||||
|
||||
bitflags! {
|
||||
pub struct Flags1: u32 {
|
||||
const FLAG_A = 0b00000001;
|
||||
}
|
||||
|
||||
struct Flags2: u32 {
|
||||
const FLAG_B = 0b00000010;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let flag1 = example::Flags1::FLAG_A;
|
||||
let flag2 = example::Flags2::FLAG_B;
|
||||
}
|
18
vendor/bitflags-1.3.2/tests/compile-fail/visibility/private_flags.stderr.beta
vendored
Normal file
18
vendor/bitflags-1.3.2/tests/compile-fail/visibility/private_flags.stderr.beta
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
error[E0603]: struct `Flags2` is private
|
||||
--> $DIR/private_flags.rs:17:26
|
||||
|
|
||||
17 | let flag2 = example::Flags2::FLAG_B;
|
||||
| ^^^^^^ private struct
|
||||
|
|
||||
note: the struct `Flags2` is defined here
|
||||
--> $DIR/private_flags.rs:4:5
|
||||
|
|
||||
4 | / bitflags! {
|
||||
5 | | pub struct Flags1: u32 {
|
||||
6 | | const FLAG_A = 0b00000001;
|
||||
7 | | }
|
||||
... |
|
||||
11 | | }
|
||||
12 | | }
|
||||
| |_____^
|
||||
= note: this error originates in the macro `bitflags` (in Nightly builds, run with -Z macro-backtrace for more info)
|
9
vendor/bitflags-1.3.2/tests/compile-fail/visibility/pub_const.rs
vendored
Normal file
9
vendor/bitflags-1.3.2/tests/compile-fail/visibility/pub_const.rs
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
use bitflags::bitflags;
|
||||
|
||||
bitflags! {
|
||||
pub struct Flags1: u32 {
|
||||
pub const FLAG_A = 0b00000001;
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
5
vendor/bitflags-1.3.2/tests/compile-fail/visibility/pub_const.stderr.beta
vendored
Normal file
5
vendor/bitflags-1.3.2/tests/compile-fail/visibility/pub_const.stderr.beta
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
error: no rules expected the token `pub`
|
||||
--> $DIR/pub_const.rs:5:9
|
||||
|
|
||||
5 | pub const FLAG_A = 0b00000001;
|
||||
| ^^^ no rules expected this token in macro call
|
17
vendor/bitflags-1.3.2/tests/compile-pass/impls/convert.rs
vendored
Normal file
17
vendor/bitflags-1.3.2/tests/compile-pass/impls/convert.rs
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
use bitflags::bitflags;
|
||||
|
||||
bitflags! {
|
||||
struct Flags: u32 {
|
||||
const A = 0b00000001;
|
||||
}
|
||||
}
|
||||
|
||||
impl From<u32> for Flags {
|
||||
fn from(v: u32) -> Flags {
|
||||
Flags::from_bits_truncate(v)
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
|
||||
}
|
10
vendor/bitflags-1.3.2/tests/compile-pass/impls/default.rs
vendored
Normal file
10
vendor/bitflags-1.3.2/tests/compile-pass/impls/default.rs
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
use bitflags::bitflags;
|
||||
|
||||
bitflags! {
|
||||
#[derive(Default)]
|
||||
struct Flags: u32 {
|
||||
const A = 0b00000001;
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
15
vendor/bitflags-1.3.2/tests/compile-pass/impls/inherent_methods.rs
vendored
Normal file
15
vendor/bitflags-1.3.2/tests/compile-pass/impls/inherent_methods.rs
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
use bitflags::bitflags;
|
||||
|
||||
bitflags! {
|
||||
struct Flags: u32 {
|
||||
const A = 0b00000001;
|
||||
}
|
||||
}
|
||||
|
||||
impl Flags {
|
||||
pub fn new() -> Flags {
|
||||
Flags::A
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
14
vendor/bitflags-1.3.2/tests/compile-pass/redefinition/core.rs
vendored
Normal file
14
vendor/bitflags-1.3.2/tests/compile-pass/redefinition/core.rs
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
use bitflags::bitflags;
|
||||
|
||||
// Checks for possible errors caused by overriding names used by `bitflags!` internally.
|
||||
|
||||
mod core {}
|
||||
mod _core {}
|
||||
|
||||
bitflags! {
|
||||
struct Test: u8 {
|
||||
const A = 1;
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
19
vendor/bitflags-1.3.2/tests/compile-pass/redefinition/stringify.rs
vendored
Normal file
19
vendor/bitflags-1.3.2/tests/compile-pass/redefinition/stringify.rs
vendored
Normal file
@ -0,0 +1,19 @@
|
||||
use bitflags::bitflags;
|
||||
|
||||
// Checks for possible errors caused by overriding names used by `bitflags!` internally.
|
||||
|
||||
#[allow(unused_macros)]
|
||||
macro_rules! stringify {
|
||||
($($t:tt)*) => { "..." };
|
||||
}
|
||||
|
||||
bitflags! {
|
||||
struct Test: u8 {
|
||||
const A = 1;
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
// Just make sure we don't call the redefined `stringify` macro
|
||||
assert_eq!(format!("{:?}", Test::A), "A");
|
||||
}
|
10
vendor/bitflags-1.3.2/tests/compile-pass/repr/c.rs
vendored
Normal file
10
vendor/bitflags-1.3.2/tests/compile-pass/repr/c.rs
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
use bitflags::bitflags;
|
||||
|
||||
bitflags! {
|
||||
#[repr(C)]
|
||||
struct Flags: u32 {
|
||||
const A = 0b00000001;
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
10
vendor/bitflags-1.3.2/tests/compile-pass/repr/transparent.rs
vendored
Normal file
10
vendor/bitflags-1.3.2/tests/compile-pass/repr/transparent.rs
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
use bitflags::bitflags;
|
||||
|
||||
bitflags! {
|
||||
#[repr(transparent)]
|
||||
struct Flags: u32 {
|
||||
const A = 0b00000001;
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
11
vendor/bitflags-1.3.2/tests/compile-pass/visibility/bits_field.rs
vendored
Normal file
11
vendor/bitflags-1.3.2/tests/compile-pass/visibility/bits_field.rs
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
use bitflags::bitflags;
|
||||
|
||||
bitflags! {
|
||||
pub struct Flags1: u32 {
|
||||
const FLAG_A = 0b00000001;
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
assert_eq!(0b00000001, Flags1::FLAG_A.bits);
|
||||
}
|
19
vendor/bitflags-1.3.2/tests/compile-pass/visibility/pub_in.rs
vendored
Normal file
19
vendor/bitflags-1.3.2/tests/compile-pass/visibility/pub_in.rs
vendored
Normal file
@ -0,0 +1,19 @@
|
||||
mod a {
|
||||
mod b {
|
||||
use bitflags::bitflags;
|
||||
|
||||
bitflags! {
|
||||
pub(in crate::a) struct Flags: u32 {
|
||||
const FLAG_A = 0b00000001;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn flags() -> u32 {
|
||||
b::Flags::FLAG_A.bits()
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
assert_eq!(0b00000001, a::flags());
|
||||
}
|
63
vendor/bitflags-1.3.2/tests/compile.rs
vendored
Normal file
63
vendor/bitflags-1.3.2/tests/compile.rs
vendored
Normal file
@ -0,0 +1,63 @@
|
||||
use std::{
|
||||
fs,
|
||||
ffi::OsStr,
|
||||
io,
|
||||
path::Path,
|
||||
};
|
||||
|
||||
use walkdir::WalkDir;
|
||||
|
||||
#[test]
|
||||
fn fail() {
|
||||
prepare_stderr_files("tests/compile-fail").unwrap();
|
||||
|
||||
let t = trybuild::TestCases::new();
|
||||
t.compile_fail("tests/compile-fail/**/*.rs");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pass() {
|
||||
let t = trybuild::TestCases::new();
|
||||
t.pass("tests/compile-pass/**/*.rs");
|
||||
}
|
||||
|
||||
// Compiler messages may change between versions
|
||||
// We don't want to have to track these too closely for `bitflags`, but
|
||||
// having some message to check makes sure user-facing errors are sensical.
|
||||
//
|
||||
// The approach we use is to run the test on all compilers, but only check stderr
|
||||
// output on beta (which is the next stable release). We do this by default ignoring
|
||||
// any `.stderr` files in the `compile-fail` directory, and copying `.stderr.beta` files
|
||||
// when we happen to be running on a beta compiler.
|
||||
fn prepare_stderr_files(path: impl AsRef<Path>) -> io::Result<()> {
|
||||
for entry in WalkDir::new(path) {
|
||||
let entry = entry?;
|
||||
|
||||
if entry.path().extension().and_then(OsStr::to_str) == Some("beta") {
|
||||
let renamed = entry.path().with_extension("");
|
||||
|
||||
// Unconditionally remove a corresponding `.stderr` file for a `.stderr.beta`
|
||||
// file if it exists. On `beta` compilers, we'll recreate it. On other compilers,
|
||||
// we don't want to end up checking it anyways.
|
||||
if renamed.exists() {
|
||||
fs::remove_file(&renamed)?;
|
||||
}
|
||||
|
||||
rename_beta_stderr(entry.path(), renamed)?;
|
||||
}
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[rustversion::beta]
|
||||
fn rename_beta_stderr(from: impl AsRef<Path>, to: impl AsRef<Path>) -> io::Result<()> {
|
||||
fs::copy(from, to)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[rustversion::not(beta)]
|
||||
fn rename_beta_stderr(_: impl AsRef<Path>, _: impl AsRef<Path>) -> io::Result<()> {
|
||||
Ok(())
|
||||
}
|
Reference in New Issue
Block a user