Skip to content

Commit 7e5d117

Browse files
committed
Refine tests
1 parent be42620 commit 7e5d117

File tree

6 files changed

+64
-14
lines changed

6 files changed

+64
-14
lines changed

tests/skip/field_trait.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use derive_where::derive_where;
55

66
use crate::util::{
77
self, AssertClone, AssertDebug, AssertHash, AssertOrd, AssertPartialEq, AssertPartialOrd,
8-
Wrapper,
8+
NonTrait, Wrapper,
99
};
1010

1111
#[test]
@@ -23,13 +23,13 @@ fn debug() {
2323
#[test]
2424
fn clone() {
2525
#[derive_where(Clone)]
26-
struct Test<T>(#[derive_where(skip(Clone))] Wrapper<T>);
26+
struct Test<T>(#[derive_where(skip(Clone))] NonTrait<T>);
2727

2828
let test_1 = Test(42.into());
2929

3030
let _ = AssertClone(&test_1);
3131

32-
assert_eq!(test_1.clone().0, 0)
32+
assert_eq!(test_1.clone().0.data(), 0)
3333
}
3434

3535
#[test]

tests/skip/struct_trait.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use derive_where::derive_where;
55

66
use crate::util::{
77
self, AssertClone, AssertDebug, AssertHash, AssertOrd, AssertPartialEq, AssertPartialOrd,
8-
Wrapper,
8+
NonTrait, Wrapper,
99
};
1010

1111
#[test]
@@ -25,13 +25,13 @@ fn debug() {
2525
fn clone() {
2626
#[derive_where(Clone)]
2727
#[derive_where(skip_inner(Clone))]
28-
struct Test<T>(Wrapper<T>);
28+
struct Test<T>(NonTrait<T>);
2929

3030
let test_1 = Test(42.into());
3131

3232
let _ = AssertClone(&test_1);
3333

34-
assert_eq!(test_1.clone().0, 0);
34+
assert_eq!(test_1.clone().0.data(), 0);
3535
}
3636

3737
#[test]
@@ -81,9 +81,9 @@ fn ord() {
8181

8282
#[test]
8383
fn all() {
84-
#[derive_where(Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Clone)]
85-
#[derive_where(skip_inner(Debug, EqHashOrd, Clone))]
86-
struct Test<T>(Wrapper<T>);
84+
#[derive_where(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
85+
#[derive_where(skip_inner(Clone, Debug, EqHashOrd))]
86+
struct Test<T>(NonTrait<T>);
8787

8888
let test_1 = Test(42.into());
8989
let test_2 = Test(42.into());
@@ -97,9 +97,9 @@ fn all() {
9797
let _ = AssertPartialEq(&test_1);
9898
let _ = AssertPartialOrd(&test_1);
9999

100-
assert_eq!(format!("{:?}", test_1), "Test");
100+
assert_eq!(test_1.clone().0.data(), 0);
101101

102-
assert_eq!(test_1.clone().0, 0);
102+
assert_eq!(format!("{:?}", test_1), "Test");
103103

104104
util::hash_eq(&test_1, &test_2);
105105
util::hash_eq(&test_1, &test_ge);

tests/skip/variant_trait.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use pretty_assertions::assert_eq;
66

77
use crate::util::{
88
self, AssertClone, AssertDebug, AssertHash, AssertOrd, AssertPartialEq, AssertPartialOrd,
9-
Wrapper,
9+
NonTrait, Wrapper,
1010
};
1111

1212
#[test]
@@ -29,15 +29,15 @@ fn clone() {
2929
#[derive_where(Clone)]
3030
enum Test<T> {
3131
#[derive_where(skip_inner(Clone))]
32-
A(Wrapper<T>),
32+
A(NonTrait<T>),
3333
}
3434

3535
let test_1 = Test::A(42.into());
3636

3737
let _ = AssertClone(&test_1);
3838

3939
let Test::A(cloned) = test_1.clone();
40-
assert_eq!(cloned, 0);
40+
assert_eq!(cloned.data(), 0);
4141
}
4242

4343
#[test]

tests/ui/skip.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,10 @@ struct MissingDeriveTrait<T>(#[derive_where(skip(Debug))] PhantomData<T>);
4848
#[derive_where(Clone, Copy)]
4949
struct SkipCloneWhileCopy<T>(#[derive_where(skip(Clone))] PhantomData<T>);
5050

51+
struct NonDefault<T>(PhantomData<T>);
52+
53+
#[derive_where(Clone)]
54+
#[derive_where(skip_inner(Clone))]
55+
struct SkipCloneNonDefault<T>(NonDefault<T>);
56+
5157
fn main() {}

tests/ui/skip.stderr

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,16 @@ error: Cannot skip `Clone` while deriving `Copy`
5757
|
5858
49 | struct SkipCloneWhileCopy<T>(#[derive_where(skip(Clone))] PhantomData<T>);
5959
| ^^^^^
60+
61+
error[E0277]: the trait bound `NonDefault<T>: Default` is not satisfied
62+
--> tests/ui/skip.rs:53:1
63+
|
64+
53 | #[derive_where(Clone)]
65+
| ^^^^^^^^^^^^^^^^^^^^^^ the trait `Default` is not implemented for `NonDefault<T>`
66+
|
67+
= note: this error originates in the derive macro `::derive_where::DeriveWhere` (in Nightly builds, run with -Z macro-backtrace for more info)
68+
help: consider annotating `NonDefault<T>` with `#[derive(Default)]`
69+
|
70+
51 + #[derive(Default)]
71+
52 | struct NonDefault<T>(PhantomData<T>);
72+
|

tests/util/mod.rs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,37 @@ pub struct AssertZeroize<'a, T: Zeroize>(pub &'a T);
121121
#[allow(dead_code)]
122122
pub struct AssertZeroizeOnDrop<'a, T: ZeroizeOnDrop>(pub &'a T);
123123

124+
#[allow(dead_code)]
125+
pub struct NonTrait<T = ()> {
126+
data: i32,
127+
hack: PhantomData<T>,
128+
}
129+
130+
#[allow(dead_code)]
131+
impl<T> NonTrait<T> {
132+
pub fn data(&self) -> i32 {
133+
self.data
134+
}
135+
}
136+
137+
impl<T> Default for NonTrait<T> {
138+
fn default() -> Self {
139+
Self {
140+
data: i32::default(),
141+
hack: PhantomData,
142+
}
143+
}
144+
}
145+
146+
impl From<i32> for NonTrait<()> {
147+
fn from(data: i32) -> Self {
148+
Self {
149+
data,
150+
hack: PhantomData,
151+
}
152+
}
153+
}
154+
124155
#[allow(dead_code)]
125156
pub fn hash_eq<T: Hash>(test_1: T, test_2: T) {
126157
let mut hasher = DefaultHasher::new();

0 commit comments

Comments
 (0)