1// Copyright © SixtyFPS GmbH <info@slint.dev>
2// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0
3
4TestCase := Rectangle {
5 callback test_callback(int);
6 callback test_callback2(string);
7 callback test_callback3(int, string);
8 property<int> callback_emission_count;
9 test_callback => { callback_emission_count += 1; }
10 test_callback2(xx) => { callback_emission_count = 88; root.test_callback3(55, xx); }
11}
12
13/*
14
15```cpp
16auto handle = TestCase::create();
17const TestCase &instance = *handle;
18int callback_3_emitted = 0;
19std::string callback_3_string_value;
20int callback_3_int_value = 0;
21instance.on_test_callback3([&](int a, auto b) {
22 callback_3_int_value = a;
23 callback_3_string_value = b;
24 callback_3_emitted ++;
25});
26instance.set_callback_emission_count(0);
27assert_eq(instance.get_callback_emission_count(), 0);
28instance.invoke_test_callback(42);
29assert_eq(instance.get_callback_emission_count(), 1);
30assert_eq(callback_3_emitted, 0);
31instance.invoke_test_callback2("hello");
32assert_eq(instance.get_callback_emission_count(), 88);
33assert_eq(callback_3_emitted, 1);
34assert_eq(callback_3_int_value, 55);
35assert_eq(callback_3_string_value, "hello");
36```
37
38```rust
39let instance = TestCase::new().unwrap();
40let callback_3_emitted = std::rc::Rc::new(std::cell::RefCell::new((0, String::new())));
41instance.on_test_callback3({
42 let callback_3_emitted = callback_3_emitted.clone();
43 move |a, b| *callback_3_emitted.borrow_mut() = (a, b.into())
44});
45instance.set_callback_emission_count(0);
46assert_eq!(instance.get_callback_emission_count(), 0);
47instance.invoke_test_callback(42);
48assert_eq!(instance.get_callback_emission_count(), 1);
49assert_eq!(*callback_3_emitted.borrow(), (0, "".into()));
50instance.invoke_test_callback2("hello".into());
51assert_eq!(instance.get_callback_emission_count(), 88);
52assert_eq!(*callback_3_emitted.borrow(), (55, "hello".into()));
53```
54
55
56```js
57var callback_3_emitted = 0;
58var callback_3_string_value;
59var callback_3_int_value;
60var instance = new slint.TestCase({
61 test_callback3: function(a, b) {
62 callback_3_emitted++;
63 callback_3_string_value = b;
64 callback_3_int_value = a;
65 }
66});
67instance.callback_emission_count = 0;
68assert.equal(instance.callback_emission_count, 0);
69instance.test_callback(42);
70assert.equal(instance.callback_emission_count, 1);
71instance.test_callback2("hello");
72assert.equal(instance.callback_emission_count, 88);
73assert.equal(callback_3_emitted, 1);
74assert.equal(callback_3_string_value, "hello");
75assert.equal(callback_3_int_value, 55);
76instance.callback_emission_count = 0;
77// Calling a callback with a wrong number of arg
78try {
79 instance.test_callback();
80 assert(false);
81} catch(e) {
82 assert.equal(e.toString(), "Error: test_callback expect 1 arguments, but 0 where provided");
83}
84assert.equal(instance.callback_emission_count, 0);
85
86
87/// also test assigning with a function
88instance.test_callback2 = function(a) {
89 callback_3_emitted += 100;
90 callback_3_string_value = a;
91};
92instance.test_callback2("salùt")
93assert.equal(callback_3_emitted, 101);
94assert.equal(callback_3_string_value, "salùt");
95assert.equal(callback_3_int_value, 55); // same as before
96
97```
98
99
100
101*/
102