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
4export global G {
5 in-out property <bool> tArunning: true;
6}
7
8component SubCompo {
9
10 out property <string> r;
11
12 HorizontalLayout {
13 Rectangle {}
14 Timer {
15 interval: 1s;
16 triggered => { r += "A"; }
17 running <=> G.tArunning;
18 }
19 Timer {
20 interval: 1.502s;
21 triggered => { r += "B"; }
22 }
23 for l in ["c", "d"] : Rectangle {
24 Timer {
25 interval: 3.0003s;
26 triggered => { r += l; }
27 }
28 }
29 }
30 init => {
31 // instentiate the repeater
32 debug(root.preferred-height);
33 }
34}
35
36export component TestCase inherits Window {
37
38 out property <string> result;
39 out property <string> second_result: s.r;
40
41 in property <int> tm2duration;
42 in property <bool> tm2running <=> tm2.running;
43
44 vl := VerticalLayout {
45 if true: HorizontalLayout {
46 Timer {
47 interval: 1s;
48 triggered => { result += "1"; }
49 }
50 }
51 }
52 out property <bool> test: vl.max-width == 0;
53
54 Rectangle {
55 tm2 := Timer {
56 running: false;
57 interval: tm2duration * 1ms;
58 triggered => { result += "2"; }
59 }
60 }
61
62 Rectangle {
63 oops := Timer {
64 interval: -5ms;
65 triggered => { result += "oops"; }
66 }
67 s := SubCompo { }
68 }
69
70
71}
72/*
73
74```rust
75let instance = TestCase::new().unwrap();
76assert!(instance.get_test());
77assert_eq!(instance.get_result(), "");
78slint_testing::mock_elapsed_time(991);
79assert_eq!(instance.get_result(), "");
80slint_testing::mock_elapsed_time(10);
81assert_eq!(instance.get_result(), "1");
82instance.set_tm2running(true);
83assert_eq!(instance.get_result(), "1");
84slint_testing::mock_elapsed_time(500);
85// despite we say to ellapse 500ms, the changed callback is only called once
86slint_testing::mock_elapsed_time(510);
87// Same, the timer event are only called onced
88assert_eq!(instance.get_result(), "121");
89slint_testing::mock_elapsed_time(0);
90assert_eq!(instance.get_result(), "1212");
91slint_testing::mock_elapsed_time(0);
92assert_eq!(instance.get_result(), "12122");
93instance.set_tm2duration(50);
94slint_testing::mock_elapsed_time(8);
95// even though we changed the duration, the timer fires before the changed callback
96assert_eq!(instance.get_result(), "121222");
97slint_testing::mock_elapsed_time(49);
98assert_eq!(instance.get_result(), "121222");
99slint_testing::mock_elapsed_time(2);
100assert_eq!(instance.get_result(), "1212222");
101slint_testing::mock_elapsed_time(47);
102assert_eq!(instance.get_result(), "1212222");
103instance.set_tm2duration(18);
104slint_testing::mock_elapsed_time(2);
105assert_eq!(instance.get_result(), "1212222");
106slint_testing::mock_elapsed_time(19);
107assert_eq!(instance.get_result(), "12122222");
108
109for _ in 0..20 {
110 slint_testing::mock_elapsed_time(500);
111}
112assert_eq!(instance.get_second_result(), "ABAcdABAABAcdABAAcdBAABAcd");
113instance.global::<G<'_>>().set_tArunning(false);
114for _ in 0..20 {
115 slint_testing::mock_elapsed_time(500);
116}
117assert_eq!(instance.get_second_result(), "ABAcdABAABAcdABAAcdBAABAcdBcdBBcdBcdB");
118```
119
120```cpp
121auto handle = TestCase::create();
122const TestCase &instance = *handle;
123assert(instance.get_test());
124assert_eq(instance.get_result(), "");
125slint_testing::mock_elapsed_time(991);
126assert_eq(instance.get_result(), "");
127slint_testing::mock_elapsed_time(10);
128assert_eq(instance.get_result(), "1");
129instance.set_tm2running(true);
130assert_eq(instance.get_result(), "1");
131slint_testing::mock_elapsed_time(500);
132// despite we say to ellapse 500ms, the changed callback is only called once
133slint_testing::mock_elapsed_time(510);
134// Same, the timer event are only called onced
135assert_eq(instance.get_result(), "121");
136slint_testing::mock_elapsed_time(0);
137assert_eq(instance.get_result(), "1212");
138slint_testing::mock_elapsed_time(0);
139assert_eq(instance.get_result(), "12122");
140instance.set_tm2duration(50);
141slint_testing::mock_elapsed_time(8);
142// even though we changed the duration, the timer fires before the changed callback
143assert_eq(instance.get_result(), "121222");
144slint_testing::mock_elapsed_time(49);
145assert_eq(instance.get_result(), "121222");
146slint_testing::mock_elapsed_time(2);
147assert_eq(instance.get_result(), "1212222");
148slint_testing::mock_elapsed_time(47);
149assert_eq(instance.get_result(), "1212222");
150instance.set_tm2duration(18);
151slint_testing::mock_elapsed_time(2);
152assert_eq(instance.get_result(), "1212222");
153slint_testing::mock_elapsed_time(19);
154assert_eq(instance.get_result(), "12122222");
155
156for (int i = 0; i < 20; ++i) {
157 slint_testing::mock_elapsed_time(500);
158}
159assert_eq(instance.get_second_result(), "ABAcdABAABAcdABAAcdBAABAcd");
160
161instance.global<G>().set_tArunning(false);
162for (int i = 0; i < 20; ++i) {
163 slint_testing::mock_elapsed_time(500);
164}
165assert_eq(instance.get_second_result(), "ABAcdABAABAcdABAAcdBAABAcdBcdBBcdBcdB");
166```
167
168```js
169var instance = new slint.TestCase({});
170assert(instance.test);
171assert.equal(instance.result, "");
172slintlib.private_api.mock_elapsed_time(991);
173assert.equal(instance.result, "");
174slintlib.private_api.mock_elapsed_time(10);
175assert.equal(instance.result, "1");
176instance.tm2running = true;
177assert.equal(instance.result, "1");
178slintlib.private_api.mock_elapsed_time(500);
179// despite we say to ellapse 500ms, the changed callback is only called once
180slintlib.private_api.mock_elapsed_time(510);
181// Same, the timer event are only called onced
182assert.equal(instance.result, "121");
183slintlib.private_api.mock_elapsed_time(0);
184assert.equal(instance.result, "1212");
185slintlib.private_api.mock_elapsed_time(0);
186assert.equal(instance.result, "12122");
187instance.tm2duration = 50;
188slintlib.private_api.mock_elapsed_time(8);
189// even though we changed the duration, the timer fires before the changed callback
190assert.equal(instance.result, "121222");
191slintlib.private_api.mock_elapsed_time(49);
192assert.equal(instance.result, "121222");
193slintlib.private_api.mock_elapsed_time(2);
194assert.equal(instance.result, "1212222");
195slintlib.private_api.mock_elapsed_time(47);
196assert.equal(instance.result, "1212222");
197instance.tm2duration = 18;
198slintlib.private_api.mock_elapsed_time(2);
199assert.equal(instance.result, "1212222");
200slintlib.private_api.mock_elapsed_time(19);
201assert.equal(instance.result, "12122222");
202
203for (var i = 0; i < 20; ++i) {
204 slintlib.private_api.mock_elapsed_time(500);
205}
206assert.equal(instance.second_result, "ABAcdABAABAcdABAAcdBAABAcd");
207
208instance.G.tArunning = false;
209for (var i = 0; i < 20; ++i) {
210 slintlib.private_api.mock_elapsed_time(500);
211}
212assert.equal(instance.second_result, "ABAcdABAABAcdABAAcdBAABAcdBcdBBcdBcdB");
213```
214*/