]> git.lizzy.rs Git - rust.git/blob - src/test/ui/privacy/associated-item-privacy-trait.rs
update ui tests
[rust.git] / src / test / ui / privacy / associated-item-privacy-trait.rs
1 // ignore-tidy-linelength
2
3 #![feature(decl_macro, associated_type_defaults)]
4 #![allow(unused, private_in_public)]
5
6 mod priv_trait {
7     trait PrivTr {
8         fn method(&self) {}
9         const CONST: u8 = 0;
10         type AssocTy = u8;
11     }
12     pub struct Pub;
13     impl PrivTr for Pub {}
14     pub trait PubTr: PrivTr {}
15
16     pub macro mac() {
17         let value = <Pub as PrivTr>::method;
18         //~^ ERROR type `for<'r> fn(&'r priv_trait::Pub) {<priv_trait::Pub as priv_trait::PrivTr>::method}` is private
19         value;
20         //~^ ERROR type `for<'r> fn(&'r priv_trait::Pub) {<priv_trait::Pub as priv_trait::PrivTr>::method}` is private
21         Pub.method();
22         //~^ ERROR type `for<'r> fn(&'r Self) {<Self as priv_trait::PrivTr>::method}` is private
23         <Pub as PrivTr>::CONST;
24         //~^ ERROR associated constant `PrivTr::CONST` is private
25         let _: <Pub as PrivTr>::AssocTy;
26         //~^ ERROR trait `priv_trait::PrivTr` is private
27         //~| ERROR trait `priv_trait::PrivTr` is private
28         pub type InSignatureTy = <Pub as PrivTr>::AssocTy;
29         //~^ ERROR trait `priv_trait::PrivTr` is private
30         pub trait InSignatureTr: PrivTr {}
31         //~^ ERROR trait `priv_trait::PrivTr` is private
32         impl PrivTr for u8 {}
33         //~^ ERROR trait `priv_trait::PrivTr` is private
34     }
35 }
36 fn priv_trait() {
37     priv_trait::mac!();
38 }
39
40 mod priv_signature {
41     pub trait PubTr {
42         fn method(&self, arg: Priv) {}
43     }
44     struct Priv;
45     pub struct Pub;
46     impl PubTr for Pub {}
47
48     pub macro mac() {
49         let value = <Pub as PubTr>::method;
50         //~^ ERROR type `priv_signature::Priv` is private
51         value;
52         //~^ ERROR type `priv_signature::Priv` is private
53         Pub.method(loop {});
54         //~^ ERROR type `priv_signature::Priv` is private
55     }
56 }
57 fn priv_signature() {
58     priv_signature::mac!();
59 }
60
61 mod priv_substs {
62     pub trait PubTr {
63         fn method<T>(&self) {}
64     }
65     struct Priv;
66     pub struct Pub;
67     impl PubTr for Pub {}
68
69     pub macro mac() {
70         let value = <Pub as PubTr>::method::<Priv>;
71         //~^ ERROR type `priv_substs::Priv` is private
72         value;
73         //~^ ERROR type `priv_substs::Priv` is private
74         Pub.method::<Priv>();
75         //~^ ERROR type `priv_substs::Priv` is private
76     }
77 }
78 fn priv_substs() {
79     priv_substs::mac!();
80 }
81
82 mod priv_parent_substs {
83     pub trait PubTr<T = Priv> {
84         fn method(&self) {}
85         const CONST: u8 = 0;
86         type AssocTy = u8;
87     }
88     struct Priv;
89     pub struct Pub;
90     impl PubTr<Priv> for Pub {}
91     impl PubTr<Pub> for Priv {}
92
93     pub macro mac() {
94         let value = <Pub as PubTr>::method;
95         //~^ ERROR type `priv_parent_substs::Priv` is private
96         value;
97         //~^ ERROR type `priv_parent_substs::Priv` is private
98         let value = <Pub as PubTr<_>>::method;
99         //~^ ERROR type `priv_parent_substs::Priv` is private
100         value;
101         //~^ ERROR type `priv_parent_substs::Priv` is private
102         Pub.method();
103         //~^ ERROR type `priv_parent_substs::Priv` is private
104
105         let value = <Priv as PubTr<_>>::method;
106         //~^ ERROR type `priv_parent_substs::Priv` is private
107         value;
108         //~^ ERROR type `priv_parent_substs::Priv` is private
109         Priv.method();
110         //~^ ERROR type `priv_parent_substs::Priv` is private
111
112         <Pub as PubTr>::CONST;
113         //~^ ERROR type `priv_parent_substs::Priv` is private
114         <Pub as PubTr<_>>::CONST;
115         //~^ ERROR type `priv_parent_substs::Priv` is private
116         <Priv as PubTr<_>>::CONST;
117         //~^ ERROR type `priv_parent_substs::Priv` is private
118
119         let _: <Pub as PubTr>::AssocTy;
120         //~^ ERROR type `priv_parent_substs::Priv` is private
121         //~| ERROR type `priv_parent_substs::Priv` is private
122         let _: <Pub as PubTr<_>>::AssocTy;
123         //~^ ERROR type `priv_parent_substs::Priv` is private
124         //~| ERROR type `priv_parent_substs::Priv` is private
125         let _: <Priv as PubTr<_>>::AssocTy;
126         //~^ ERROR type `priv_parent_substs::Priv` is private
127         //~| ERROR type `priv_parent_substs::Priv` is private
128
129         pub type InSignatureTy1 = <Pub as PubTr>::AssocTy;
130         //~^ ERROR type `priv_parent_substs::Priv` is private
131         pub type InSignatureTy2 = <Priv as PubTr<Pub>>::AssocTy;
132         //~^ ERROR type `priv_parent_substs::Priv` is private
133         impl PubTr for u8 {}
134         //~^ ERROR type `priv_parent_substs::Priv` is private
135     }
136 }
137 fn priv_parent_substs() {
138     priv_parent_substs::mac!();
139 }
140
141 fn main() {}