]> git.proxmox.com Git - rustc.git/blob - vendor/wasm-bindgen/tests/wasm/getters_and_setters.rs
New upstream version 1.70.0+dfsg2
[rustc.git] / vendor / wasm-bindgen / tests / wasm / getters_and_setters.rs
1 use std::cell::Cell;
2 use std::rc::Rc;
3 use std::sync::atomic::{AtomicU32, Ordering};
4 use wasm_bindgen::prelude::*;
5 use wasm_bindgen_test::*;
6
7 #[wasm_bindgen(module = "tests/wasm/getters_and_setters.js")]
8 extern "C" {
9 fn _1_js(rules: Rules) -> Rules;
10 fn _2_js(rules: Rules) -> Rules;
11 fn _3_js(rules: Rules) -> Rules;
12 fn _4_js(rules: Rules) -> Rules;
13 fn _5_js(rules: Rules) -> Rules;
14 fn _6_js(rules: Rules) -> Rules;
15 fn _7_js(rules: Rules) -> Rules;
16 fn _8_js(rules: Rules) -> Rules;
17 fn _9_js(rules: Rules) -> Rules;
18 fn _10_js(rules: Rules) -> Rules;
19 fn _11_js(rules: Rules) -> Rules;
20 fn _12_js(rules: Rules) -> Rules;
21 fn _13_js(rules: Rules) -> Rules;
22
23 fn test_getter_compute(x: GetterCompute);
24 fn test_setter_compute(x: SetterCompute);
25 fn test_statics(x: Statics);
26 }
27
28 // Each getter/setter combination is derived
29 // from https://github.com/rustwasm/wasm-bindgen/pull/1440#issuecomment-487113564
30 #[wasm_bindgen]
31 pub struct Rules {
32 pub field: i32,
33 }
34
35 #[wasm_bindgen]
36 #[allow(non_snake_case)]
37 impl Rules {
38 #[wasm_bindgen]
39 pub fn no_js_name__no_getter_with_name__no_getter_without_name(&self) -> i32 {
40 self.field
41 }
42 #[wasm_bindgen]
43 pub fn set_no_js_name__no_setter_with_name__no_setter_without_name(&mut self, field: i32) {
44 self.field = field;
45 }
46
47 #[wasm_bindgen(getter)]
48 pub fn no_js_name__no_getter_with_name__getter_without_name(&self) -> i32 {
49 self.field
50 }
51 #[wasm_bindgen(setter)]
52 pub fn set_no_js_name__no_setter_with_name__setter_without_name(&mut self, field: i32) {
53 self.field = field;
54 }
55
56 #[wasm_bindgen(getter = new_no_js_name__getter_with_name__getter_without_name)]
57 pub fn no_js_name__getter_with_name__getter_without_name(&self) -> i32 {
58 self.field
59 }
60 #[wasm_bindgen(setter = new_no_js_name__setter_with_name__setter_without_name)]
61 pub fn set_no_js_name__setter_with_name__setter_without_name(&mut self, field: i32) {
62 self.field = field;
63 }
64
65 #[wasm_bindgen(js_name = new_js_name__no_getter_with_name__no_getter_without_name)]
66 pub fn js_name__no_getter_with_name__no_getter_without_name(&self) -> i32 {
67 self.field
68 }
69 #[wasm_bindgen(js_name = new_js_name__no_setter_with_name__no_setter_without_name)]
70 pub fn set_js_name__no_setter_with_name__no_setter_without_name(&mut self, field: i32) {
71 self.field = field;
72 }
73
74 #[wasm_bindgen(getter, js_name = new_js_name__no_getter_with_name__getter_without_name)]
75 pub fn js_name__no_getter_with_name__getter_without_name(&self) -> i32 {
76 self.field
77 }
78 #[wasm_bindgen(js_name = new_js_name__no_setter_with_name__setter_without_name, setter)]
79 pub fn set_js_name__no_setter_with_name__setter_without_name(&mut self, field: i32) {
80 self.field = field;
81 }
82
83 #[wasm_bindgen(
84 getter = new_js_name__getter_with_name__no_getter_without_name_for_field,
85 js_name = new_js_name__getter_with_name__no_getter_without_name_for_method
86 )]
87 pub fn js_name__getter_with_name__no_getter_without_name(&self) -> i32 {
88 self.field
89 }
90 #[wasm_bindgen(
91 js_name = new_js_name__setter_with_name__no_setter_without_name_for_method,
92 setter = new_js_name__setter_with_name__no_setter_without_name_for_field
93 )]
94 pub fn set_js_name__setter_with_name__no_setter_without_name_for_field(&mut self, field: i32) {
95 self.field = field;
96 }
97
98 #[wasm_bindgen(getter, js_name = new_js_name__no_getter_setter_with_name__getter_setter_without_name__same_getter_setter_name)]
99 pub fn js_name__no_getter_with_name__getter_without_name__same_getter_setter_name(
100 &self,
101 ) -> i32 {
102 self.field
103 }
104 #[wasm_bindgen(js_name = new_js_name__no_getter_setter_with_name__getter_setter_without_name__same_getter_setter_name, setter)]
105 pub fn set_js_name__no_setter_with_name__setter_without_name__same_getter_setter_name(
106 &mut self,
107 field: i32,
108 ) {
109 self.field = field;
110 }
111
112 #[wasm_bindgen(getter, js_name = new_js_name__no_getter_setter_with_name__getter_setter_without_name__same_getter_setter_name__same_getter_setter_origin_name)]
113 pub fn js_name__no_getter_setter_with_name__getter_setter_without_name__same_getter_setter_name__same_getter_setter_origin_name(
114 &self,
115 ) -> i32 {
116 self.field
117 }
118 #[wasm_bindgen(js_name = new_js_name__no_getter_setter_with_name__getter_setter_without_name__same_getter_setter_name__same_getter_setter_origin_name, setter)]
119 pub fn set_js_name__no_getter_setter_with_name__getter_setter_without_name__same_getter_setter_name__same_getter_setter_origin_name(
120 &mut self,
121 field: i32,
122 ) {
123 self.field = field;
124 }
125
126 #[wasm_bindgen(
127 getter = new_js_name__getter_setter_with_name__no_getter_setter_without_name_for_field__same_getter_setter_name,
128 js_name = new_js_name__getter_setter_with_name__no_getter_setter_without_name_for_method__same_getter_setter_name)]
129 pub fn js_name__getter_with_name__no_getter_without_name__same_getter_setter_name(
130 &self,
131 ) -> i32 {
132 self.field
133 }
134 #[wasm_bindgen(
135 js_name = new_js_name__getter_setter_with_name__no_getter_setter_without_name_for_method__same_getter_setter_name,
136 setter = new_js_name__getter_setter_with_name__no_getter_setter_without_name_for_field__same_getter_setter_name)]
137 pub fn set_js_name__setter_with_name__no_setter_without_name__same_getter_setter_name(
138 &mut self,
139 field: i32,
140 ) {
141 self.field = field;
142 }
143
144 #[wasm_bindgen(
145 getter = new_js_name__getter_with_name__no_getter_without_name_for_field__same_getter_setter_name,
146 js_name = new_js_name__getter_setter_with_name__no_getter_setter_without_name_for_method__same_getter_setter_name__no_same_field_name)]
147 pub fn js_name__getter_with_name__no_getter_without_name__same_getter_setter_name__no_same_field_name(
148 &self,
149 ) -> i32 {
150 self.field
151 }
152 #[wasm_bindgen(
153 js_name = new_js_name__getter_setter_with_name__no_getter_setter_without_name_for_method__same_getter_setter_name__no_same_field_name,
154 setter = new_js_name__setter_with_name__no_setter_without_name_for_field__same_getter_setter_name)]
155 pub fn set_js_name__setter_with_name__no_setter_without_name__same_getter_setter_name__no_same_field_name(
156 &mut self,
157 field: i32,
158 ) {
159 self.field = field;
160 }
161
162 #[wasm_bindgen(
163 getter = new_js_name__getter_setter_with_name__no_getter_setter_without_name_for_field__same_getter_setter_name__same_getter_setter_origin_name,
164 js_name = new_js_name__getter_setter_with_name__no_getter_setter_without_name_for_method__same_getter_setter_name__same_getter_setter_origin_name)]
165 pub fn js_name__getter_setter_with_name__no_getter_setter_without_name__same_getter_setter_name__same_getter_setter_origin_name(
166 &self,
167 ) -> i32 {
168 self.field
169 }
170 #[wasm_bindgen(
171 js_name = new_js_name__getter_setter_with_name__no_getter_setter_without_name_for_method__same_getter_setter_name__same_getter_setter_origin_name,
172 setter = new_js_name__getter_setter_with_name__no_getter_setter_without_name_for_field__same_getter_setter_name__same_getter_setter_origin_name)]
173 pub fn set_js_name__getter_setter_with_name__no_getter_setter_without_name__same_getter_setter_name__same_getter_setter_origin_name(
174 &mut self,
175 field: i32,
176 ) {
177 self.field = field;
178 }
179
180 #[wasm_bindgen(
181 getter = new_js_name__getter_with_name__no_getter_without_name_for_field__same_getter_setter_name__same_getter_setter_origin_name,
182 js_name = new_js_name__getter_setter_with_name__no_getter_setter_without_name_for_method__same_getter_setter_name__same_getter_setter_origin_name__no_same_field_name)]
183 pub fn js_name__getter_setter_with_name__no_getter_setter_without_name__same_getter_setter_name__same_getter_setter_origin_name__no_same_field_name(
184 &self,
185 ) -> i32 {
186 self.field
187 }
188 #[wasm_bindgen(
189 js_name = new_js_name__getter_setter_with_name__no_getter_setter_without_name_for_method__same_getter_setter_name__same_getter_setter_origin_name__no_same_field_name,
190 setter = new_js_name__setter_with_name__no_setter_without_name_for_field__same_getter_setter_name__same_getter_setter_origin_name)]
191 pub fn set_js_name__getter_setter_with_name__no_getter_setter_without_name__same_getter_setter_name__same_getter_setter_origin_name__no_same_field_name(
192 &mut self,
193 field: i32,
194 ) {
195 self.field = field;
196 }
197 }
198
199 #[wasm_bindgen_test]
200 fn _1_rust() {
201 let rules = _1_js(Rules { field: 1 });
202 assert_eq!(rules.field, 2);
203 }
204
205 #[wasm_bindgen_test]
206 fn _2_rust() {
207 let rules = _2_js(Rules { field: 2 });
208 assert_eq!(rules.field, 4);
209 }
210
211 #[wasm_bindgen_test]
212 fn _3_rust() {
213 let rules = _3_js(Rules { field: 3 });
214 assert_eq!(rules.field, 6);
215 }
216
217 #[wasm_bindgen_test]
218 fn _4_rust() {
219 let rules = _4_js(Rules { field: 4 });
220 assert_eq!(rules.field, 8);
221 }
222
223 #[wasm_bindgen_test]
224 fn _5_rust() {
225 let rules = _5_js(Rules { field: 5 });
226 assert_eq!(rules.field, 10);
227 }
228
229 #[wasm_bindgen_test]
230 fn _6_rust() {
231 let rules = _6_js(Rules { field: 6 });
232 assert_eq!(rules.field, 12);
233 }
234
235 #[wasm_bindgen_test]
236 fn _7_rust() {
237 let rules = _7_js(Rules { field: 7 });
238 assert_eq!(rules.field, 14);
239 }
240
241 #[wasm_bindgen_test]
242 fn _8_rust() {
243 let rules = _8_js(Rules { field: 8 });
244 assert_eq!(rules.field, 16);
245 }
246
247 #[wasm_bindgen_test]
248 fn _9_rust() {
249 let rules = _9_js(Rules { field: 9 });
250 assert_eq!(rules.field, 18);
251 }
252
253 #[wasm_bindgen_test]
254 fn _10_rust() {
255 let rules = _10_js(Rules { field: 10 });
256 assert_eq!(rules.field, 20);
257 }
258
259 #[wasm_bindgen_test]
260 fn _11_rust() {
261 let rules = _11_js(Rules { field: 11 });
262 assert_eq!(rules.field, 22);
263 }
264
265 #[wasm_bindgen_test]
266 fn _12_rust() {
267 let rules = _12_js(Rules { field: 12 });
268 assert_eq!(rules.field, 24);
269 }
270
271 #[wasm_bindgen_test]
272 fn _13_rust() {
273 let rules = _13_js(Rules { field: 13 });
274 assert_eq!(rules.field, 26);
275 }
276
277 #[wasm_bindgen]
278 struct GetterCompute;
279
280 #[wasm_bindgen]
281 impl GetterCompute {
282 #[wasm_bindgen(getter)]
283 pub fn foo(&self) -> u32 {
284 3
285 }
286 }
287
288 #[wasm_bindgen_test]
289 fn getter_compute() {
290 test_getter_compute(GetterCompute);
291 }
292
293 #[wasm_bindgen]
294 struct SetterCompute(Rc<Cell<u32>>);
295
296 #[wasm_bindgen]
297 impl SetterCompute {
298 #[wasm_bindgen(setter)]
299 pub fn set_foo(&self, x: u32) {
300 self.0.set(x + 3);
301 }
302 }
303
304 #[wasm_bindgen_test]
305 fn setter_compute() {
306 let r = Rc::new(Cell::new(3));
307 test_setter_compute(SetterCompute(r.clone()));
308 assert_eq!(r.get(), 100);
309 }
310
311 static FIELD: AtomicU32 = AtomicU32::new(3);
312 static STATIC_FIELD: AtomicU32 = AtomicU32::new(4);
313
314 #[wasm_bindgen]
315 struct Statics;
316
317 #[wasm_bindgen]
318 impl Statics {
319 #[wasm_bindgen(getter = field)]
320 // Make sure that this still works if we make this mutable for no reason
321 pub fn getter(&mut self) -> u32 {
322 FIELD.load(Ordering::Relaxed)
323 }
324
325 #[wasm_bindgen(setter = field)]
326 // Make sure that this still works if we make this consume the type for no reason
327 pub fn setter(self, x: u32) {
328 FIELD.store(x, Ordering::Relaxed)
329 }
330
331 // Define a static field with the same name to make sure that works.
332 #[wasm_bindgen(getter = field)]
333 pub fn static_getter() -> u32 {
334 STATIC_FIELD.load(Ordering::Relaxed)
335 }
336
337 #[wasm_bindgen(setter = field)]
338 pub fn static_setter(x: u32) {
339 STATIC_FIELD.store(x, Ordering::Relaxed)
340 }
341 }
342
343 #[wasm_bindgen_test]
344 fn statics() {
345 test_statics(Statics);
346 assert_eq!(FIELD.load(Ordering::Relaxed), 13);
347 assert_eq!(STATIC_FIELD.load(Ordering::Relaxed), 14);
348 }