| 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 | |
| 4 | TestCase := 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 |
| 16 | auto handle = TestCase::create(); |
| 17 | const TestCase &instance = *handle; |
| 18 | int callback_3_emitted = 0; |
| 19 | std::string callback_3_string_value; |
| 20 | int callback_3_int_value = 0; |
| 21 | instance.on_test_callback3([&](int a, auto b) { |
| 22 | callback_3_int_value = a; |
| 23 | callback_3_string_value = b; |
| 24 | callback_3_emitted ++; |
| 25 | }); |
| 26 | instance.set_callback_emission_count(0); |
| 27 | assert_eq(instance.get_callback_emission_count(), 0); |
| 28 | instance.invoke_test_callback(42); |
| 29 | assert_eq(instance.get_callback_emission_count(), 1); |
| 30 | assert_eq(callback_3_emitted, 0); |
| 31 | instance.invoke_test_callback2("hello"); |
| 32 | assert_eq(instance.get_callback_emission_count(), 88); |
| 33 | assert_eq(callback_3_emitted, 1); |
| 34 | assert_eq(callback_3_int_value, 55); |
| 35 | assert_eq(callback_3_string_value, "hello"); |
| 36 | ``` |
| 37 | |
| 38 | ```rust |
| 39 | let instance = TestCase::new().unwrap(); |
| 40 | let callback_3_emitted = std::rc::Rc::new(std::cell::RefCell::new((0, String::new()))); |
| 41 | instance.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 | }); |
| 45 | instance.set_callback_emission_count(0); |
| 46 | assert_eq!(instance.get_callback_emission_count(), 0); |
| 47 | instance.invoke_test_callback(42); |
| 48 | assert_eq!(instance.get_callback_emission_count(), 1); |
| 49 | assert_eq!(*callback_3_emitted.borrow(), (0, "".into())); |
| 50 | instance.invoke_test_callback2("hello".into()); |
| 51 | assert_eq!(instance.get_callback_emission_count(), 88); |
| 52 | assert_eq!(*callback_3_emitted.borrow(), (55, "hello".into())); |
| 53 | ``` |
| 54 | |
| 55 | |
| 56 | ```js |
| 57 | var callback_3_emitted = 0; |
| 58 | var callback_3_string_value; |
| 59 | var callback_3_int_value; |
| 60 | var 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 | }); |
| 67 | instance.callback_emission_count = 0; |
| 68 | assert.equal(instance.callback_emission_count, 0); |
| 69 | instance.test_callback(42); |
| 70 | assert.equal(instance.callback_emission_count, 1); |
| 71 | instance.test_callback2("hello"); |
| 72 | assert.equal(instance.callback_emission_count, 88); |
| 73 | assert.equal(callback_3_emitted, 1); |
| 74 | assert.equal(callback_3_string_value, "hello"); |
| 75 | assert.equal(callback_3_int_value, 55); |
| 76 | instance.callback_emission_count = 0; |
| 77 | // Calling a callback with a wrong number of arg |
| 78 | try { |
| 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 | } |
| 84 | assert.equal(instance.callback_emission_count, 0); |
| 85 | |
| 86 | |
| 87 | /// also test assigning with a function |
| 88 | instance.test_callback2 = function(a) { |
| 89 | callback_3_emitted += 100; |
| 90 | callback_3_string_value = a; |
| 91 | }; |
| 92 | instance.test_callback2("salùt") |
| 93 | assert.equal(callback_3_emitted, 101); |
| 94 | assert.equal(callback_3_string_value, "salùt"); |
| 95 | assert.equal(callback_3_int_value, 55); // same as before |
| 96 | |
| 97 | ``` |
| 98 | |
| 99 | |
| 100 | |
| 101 | */ |
| 102 | |