3 use std
::sync
::atomic
::{AtomicU32, Ordering}
;
4 use wasm_bindgen
::prelude
::*;
5 use wasm_bindgen_test
::*;
7 #[wasm_bindgen(module = "tests/wasm/getters_and_setters.js")]
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
;
23 fn test_getter_compute(x
: GetterCompute
);
24 fn test_setter_compute(x
: SetterCompute
);
25 fn test_statics(x
: Statics
);
28 // Each getter/setter combination is derived
29 // from https://github.com/rustwasm/wasm-bindgen/pull/1440#issuecomment-487113564
36 #[allow(non_snake_case)]
39 pub fn no_js_name__no_getter_with_name__no_getter_without_name(&self) -> i32 {
43 pub fn set_no_js_name__no_setter_with_name__no_setter_without_name(&mut self, field
: i32) {
47 #[wasm_bindgen(getter)]
48 pub fn no_js_name__no_getter_with_name__getter_without_name(&self) -> i32 {
51 #[wasm_bindgen(setter)]
52 pub fn set_no_js_name__no_setter_with_name__setter_without_name(&mut self, field
: i32) {
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 {
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) {
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 {
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) {
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 {
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) {
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
87 pub fn js_name__getter_with_name__no_getter_without_name(&self) -> i32 {
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
94 pub fn set_js_name__setter_with_name__no_setter_without_name_for_field(&mut self, field
: i32) {
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(
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(
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(
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(
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(
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(
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(
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(
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(
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(
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(
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(
201 let rules
= _1_js(Rules { field: 1 }
);
202 assert_eq
!(rules
.field
, 2);
207 let rules
= _2_js(Rules { field: 2 }
);
208 assert_eq
!(rules
.field
, 4);
213 let rules
= _3_js(Rules { field: 3 }
);
214 assert_eq
!(rules
.field
, 6);
219 let rules
= _4_js(Rules { field: 4 }
);
220 assert_eq
!(rules
.field
, 8);
225 let rules
= _5_js(Rules { field: 5 }
);
226 assert_eq
!(rules
.field
, 10);
231 let rules
= _6_js(Rules { field: 6 }
);
232 assert_eq
!(rules
.field
, 12);
237 let rules
= _7_js(Rules { field: 7 }
);
238 assert_eq
!(rules
.field
, 14);
243 let rules
= _8_js(Rules { field: 8 }
);
244 assert_eq
!(rules
.field
, 16);
249 let rules
= _9_js(Rules { field: 9 }
);
250 assert_eq
!(rules
.field
, 18);
255 let rules
= _10_js(Rules { field: 10 }
);
256 assert_eq
!(rules
.field
, 20);
261 let rules
= _11_js(Rules { field: 11 }
);
262 assert_eq
!(rules
.field
, 22);
267 let rules
= _12_js(Rules { field: 12 }
);
268 assert_eq
!(rules
.field
, 24);
273 let rules
= _13_js(Rules { field: 13 }
);
274 assert_eq
!(rules
.field
, 26);
278 struct GetterCompute
;
282 #[wasm_bindgen(getter)]
283 pub fn foo(&self) -> u32 {
289 fn getter_compute() {
290 test_getter_compute(GetterCompute
);
294 struct SetterCompute(Rc
<Cell
<u32>>);
298 #[wasm_bindgen(setter)]
299 pub fn set_foo(&self, x
: u32) {
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);
311 static FIELD
: AtomicU32
= AtomicU32
::new(3);
312 static STATIC_FIELD
: AtomicU32
= AtomicU32
::new(4);
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
)
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
)
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
)
337 #[wasm_bindgen(setter = field)]
338 pub fn static_setter(x
: u32) {
339 STATIC_FIELD
.store(x
, Ordering
::Relaxed
)
345 test_statics(Statics
);
346 assert_eq
!(FIELD
.load(Ordering
::Relaxed
), 13);
347 assert_eq
!(STATIC_FIELD
.load(Ordering
::Relaxed
), 14);