Skip to content

Commit c3a054f

Browse files
committed
Fix PathFollow tests, Add forward vector test to PathFollow3D
1 parent a48b99a commit c3a054f

File tree

3 files changed

+224
-103
lines changed

3 files changed

+224
-103
lines changed

tests/scene/test_path_follow_2d.h

Lines changed: 73 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -32,205 +32,223 @@
3232
#define TEST_PATH_FOLLOW_2D_H
3333

3434
#include "scene/2d/path_2d.h"
35+
#include "scene/main/window.h"
3536

3637
#include "tests/test_macros.h"
3738

3839
namespace TestPathFollow2D {
3940

40-
TEST_CASE("[PathFollow2D] Sampling with progress ratio") {
41-
const Ref<Curve2D> &curve = memnew(Curve2D());
41+
bool is_equal_approx(const Vector2 &p_a, const Vector2 &p_b) {
42+
const real_t tolerance = 0.001;
43+
return Math::is_equal_approx(p_a.x, p_b.x, tolerance) &&
44+
Math::is_equal_approx(p_a.y, p_b.y, tolerance);
45+
}
46+
47+
TEST_CASE("[SceneTree][PathFollow2D] Sampling with progress ratio") {
48+
Ref<Curve2D> curve = memnew(Curve2D);
49+
curve->set_bake_interval(1);
4250
curve->add_point(Vector2(0, 0));
4351
curve->add_point(Vector2(100, 0));
4452
curve->add_point(Vector2(100, 100));
4553
curve->add_point(Vector2(0, 100));
4654
curve->add_point(Vector2(0, 0));
47-
const Path2D *path = memnew(Path2D);
55+
Path2D *path = memnew(Path2D);
4856
path->set_curve(curve);
49-
const PathFollow2D *path_follow_2d = memnew(PathFollow2D);
57+
PathFollow2D *path_follow_2d = memnew(PathFollow2D);
58+
path_follow_2d->set_loop(false);
5059
path->add_child(path_follow_2d);
60+
SceneTree::get_singleton()->get_root()->add_child(path);
5161

5262
path_follow_2d->set_progress_ratio(0);
53-
CHECK(path_follow_2d->get_transform().get_origin().is_equal_approx(Vector2(0, 0)));
63+
CHECK(is_equal_approx(Vector2(0, 0), path_follow_2d->get_transform().get_origin()));
5464

5565
path_follow_2d->set_progress_ratio(0.125);
56-
CHECK(path_follow_2d->get_transform().get_origin().is_equal_approx(Vector2(50, 0)));
66+
CHECK(is_equal_approx(Vector2(50, 0), path_follow_2d->get_transform().get_origin()));
5767

5868
path_follow_2d->set_progress_ratio(0.25);
59-
CHECK(path_follow_2d->get_transform().get_origin().is_equal_approx(Vector2(100, 0)));
69+
CHECK(is_equal_approx(Vector2(100, 0), path_follow_2d->get_transform().get_origin()));
6070

6171
path_follow_2d->set_progress_ratio(0.375);
62-
CHECK(path_follow_2d->get_transform().get_origin().is_equal_approx(Vector2(100, 50)));
72+
CHECK(is_equal_approx(Vector2(100, 50), path_follow_2d->get_transform().get_origin()));
6373

6474
path_follow_2d->set_progress_ratio(0.5);
65-
CHECK(path_follow_2d->get_transform().get_origin().is_equal_approx(Vector2(100, 100)));
75+
CHECK(is_equal_approx(Vector2(100, 100), path_follow_2d->get_transform().get_origin()));
6676

6777
path_follow_2d->set_progress_ratio(0.625);
68-
CHECK(path_follow_2d->get_transform().get_origin().is_equal_approx(Vector2(50, 100)));
78+
CHECK(is_equal_approx(Vector2(50, 100), path_follow_2d->get_transform().get_origin()));
6979

7080
path_follow_2d->set_progress_ratio(0.75);
71-
CHECK(path_follow_2d->get_transform().get_origin().is_equal_approx(Vector2(0, 100)));
81+
CHECK(is_equal_approx(Vector2(0, 100), path_follow_2d->get_transform().get_origin()));
7282

7383
path_follow_2d->set_progress_ratio(0.875);
74-
CHECK(path_follow_2d->get_transform().get_origin().is_equal_approx(Vector2(0, 50)));
84+
CHECK(is_equal_approx(Vector2(0, 50), path_follow_2d->get_transform().get_origin()));
7585

7686
path_follow_2d->set_progress_ratio(1);
77-
CHECK(path_follow_2d->get_transform().get_origin().is_equal_approx(Vector2(0, 0)));
87+
CHECK(is_equal_approx(Vector2(0, 0), path_follow_2d->get_transform().get_origin()));
7888

7989
memdelete(path);
8090
}
8191

82-
TEST_CASE("[PathFollow2D] Sampling with progress") {
83-
const Ref<Curve2D> &curve = memnew(Curve2D());
92+
TEST_CASE("[SceneTree][PathFollow2D] Sampling with progress") {
93+
Ref<Curve2D> curve = memnew(Curve2D);
94+
curve->set_bake_interval(1);
8495
curve->add_point(Vector2(0, 0));
8596
curve->add_point(Vector2(100, 0));
8697
curve->add_point(Vector2(100, 100));
8798
curve->add_point(Vector2(0, 100));
8899
curve->add_point(Vector2(0, 0));
89-
const Path2D *path = memnew(Path2D);
100+
Path2D *path = memnew(Path2D);
90101
path->set_curve(curve);
91-
const PathFollow2D *path_follow_2d = memnew(PathFollow2D);
102+
PathFollow2D *path_follow_2d = memnew(PathFollow2D);
103+
path_follow_2d->set_loop(false);
92104
path->add_child(path_follow_2d);
105+
SceneTree::get_singleton()->get_root()->add_child(path);
93106

94107
path_follow_2d->set_progress(0);
95-
CHECK(path_follow_2d->get_transform().get_origin().is_equal_approx(Vector2(0, 0)));
108+
CHECK(is_equal_approx(Vector2(0, 0), path_follow_2d->get_transform().get_origin()));
96109

97110
path_follow_2d->set_progress(50);
98-
CHECK(path_follow_2d->get_transform().get_origin().is_equal_approx(Vector2(50, 0)));
111+
CHECK(is_equal_approx(Vector2(50, 0), path_follow_2d->get_transform().get_origin()));
99112

100113
path_follow_2d->set_progress(100);
101-
CHECK(path_follow_2d->get_transform().get_origin().is_equal_approx(Vector2(100, 0)));
114+
CHECK(is_equal_approx(Vector2(100, 0), path_follow_2d->get_transform().get_origin()));
102115

103116
path_follow_2d->set_progress(150);
104-
CHECK(path_follow_2d->get_transform().get_origin().is_equal_approx(Vector2(100, 50)));
117+
CHECK(is_equal_approx(Vector2(100, 50), path_follow_2d->get_transform().get_origin()));
105118

106119
path_follow_2d->set_progress(200);
107-
CHECK(path_follow_2d->get_transform().get_origin().is_equal_approx(Vector2(100, 100)));
120+
CHECK(is_equal_approx(Vector2(100, 100), path_follow_2d->get_transform().get_origin()));
108121

109122
path_follow_2d->set_progress(250);
110-
CHECK(path_follow_2d->get_transform().get_origin().is_equal_approx(Vector2(50, 100)));
123+
CHECK(is_equal_approx(Vector2(50, 100), path_follow_2d->get_transform().get_origin()));
111124

112125
path_follow_2d->set_progress(300);
113-
CHECK(path_follow_2d->get_transform().get_origin().is_equal_approx(Vector2(0, 100)));
126+
CHECK(is_equal_approx(Vector2(0, 100), path_follow_2d->get_transform().get_origin()));
114127

115128
path_follow_2d->set_progress(350);
116-
CHECK(path_follow_2d->get_transform().get_origin().is_equal_approx(Vector2(0, 50)));
129+
CHECK(is_equal_approx(Vector2(0, 50), path_follow_2d->get_transform().get_origin()));
117130

118131
path_follow_2d->set_progress(400);
119-
CHECK(path_follow_2d->get_transform().get_origin().is_equal_approx(Vector2(0, 0)));
132+
CHECK(is_equal_approx(Vector2(0, 0), path_follow_2d->get_transform().get_origin()));
120133

121134
memdelete(path);
122135
}
123136

124-
TEST_CASE("[PathFollow2D] Removal of a point in curve") {
125-
const Ref<Curve2D> &curve = memnew(Curve2D());
137+
TEST_CASE("[SceneTree][PathFollow2D] Removal of a point in curve") {
138+
Ref<Curve2D> curve = memnew(Curve2D);
126139
curve->add_point(Vector2(0, 0));
127140
curve->add_point(Vector2(100, 0));
128141
curve->add_point(Vector2(100, 100));
129-
const Path2D *path = memnew(Path2D);
142+
Path2D *path = memnew(Path2D);
130143
path->set_curve(curve);
131-
const PathFollow2D *path_follow_2d = memnew(PathFollow2D);
144+
PathFollow2D *path_follow_2d = memnew(PathFollow2D);
132145
path->add_child(path_follow_2d);
146+
SceneTree::get_singleton()->get_root()->add_child(path);
133147

134148
path_follow_2d->set_progress_ratio(0.5);
135-
CHECK(path_follow_2d->get_transform().get_origin().is_equal_approx(Vector2(100, 0)));
149+
CHECK(is_equal_approx(Vector2(100, 0), path_follow_2d->get_transform().get_origin()));
136150

137151
curve->remove_point(1);
138152

153+
path_follow_2d->set_progress_ratio(0.5);
139154
CHECK_MESSAGE(
140-
path_follow_2d->get_transform().get_origin().is_equal_approx(Vector2(50, 50)),
155+
is_equal_approx(Vector2(50, 50), path_follow_2d->get_transform().get_origin()),
141156
"Path follow's position should be updated after removing a point from the curve");
142157

143158
memdelete(path);
144159
}
145160

146-
TEST_CASE("[PathFollow2D] Setting h_offset and v_offset") {
147-
const Ref<Curve2D> &curve = memnew(Curve2D());
161+
TEST_CASE("[SceneTree][PathFollow2D] Setting h_offset and v_offset") {
162+
Ref<Curve2D> curve = memnew(Curve2D);
148163
curve->add_point(Vector2(0, 0));
149164
curve->add_point(Vector2(100, 0));
150-
const Path2D *path = memnew(Path2D);
165+
Path2D *path = memnew(Path2D);
151166
path->set_curve(curve);
152-
const PathFollow2D *path_follow_2d = memnew(PathFollow2D);
167+
PathFollow2D *path_follow_2d = memnew(PathFollow2D);
153168
path->add_child(path_follow_2d);
169+
SceneTree::get_singleton()->get_root()->add_child(path);
154170

155171
path_follow_2d->set_progress_ratio(0.5);
156-
CHECK(path_follow_2d->get_transform().get_origin().is_equal_approx(Vector2(50, 0)));
172+
CHECK(is_equal_approx(Vector2(50, 0), path_follow_2d->get_transform().get_origin()));
157173

158174
path_follow_2d->set_h_offset(25);
159-
CHECK(path_follow_2d->get_transform().get_origin().is_equal_approx(Vector2(75, 0)));
175+
CHECK(is_equal_approx(Vector2(75, 0), path_follow_2d->get_transform().get_origin()));
160176

161177
path_follow_2d->set_v_offset(25);
162-
CHECK(path_follow_2d->get_transform().get_origin().is_equal_approx(Vector2(75, 25)));
178+
CHECK(is_equal_approx(Vector2(75, 25), path_follow_2d->get_transform().get_origin()));
163179

164180
memdelete(path);
165181
}
166182

167-
TEST_CASE("[PathFollow2D] Unit offset out of range") {
168-
const Ref<Curve2D> &curve = memnew(Curve2D());
183+
TEST_CASE("[SceneTree][PathFollow2D] Progress ratio out of range") {
184+
Ref<Curve2D> curve = memnew(Curve2D);
169185
curve->add_point(Vector2(0, 0));
170186
curve->add_point(Vector2(100, 0));
171-
const Path2D *path = memnew(Path2D);
187+
Path2D *path = memnew(Path2D);
172188
path->set_curve(curve);
173-
const PathFollow2D *path_follow_2d = memnew(PathFollow2D);
189+
PathFollow2D *path_follow_2d = memnew(PathFollow2D);
174190
path->add_child(path_follow_2d);
191+
SceneTree::get_singleton()->get_root()->add_child(path);
175192

176193
path_follow_2d->set_loop(true);
177194

178195
path_follow_2d->set_progress_ratio(-0.3);
179196
CHECK_MESSAGE(
180-
path_follow_2d->get_progress_ratio() == 0.7,
197+
Math::is_equal_approx(path_follow_2d->get_progress_ratio(), (real_t)0.7),
181198
"Progress Ratio should loop back from the end in the opposite direction");
182199

183200
path_follow_2d->set_progress_ratio(1.3);
184201
CHECK_MESSAGE(
185-
path_follow_2d->get_progress_ratio() == 0.3,
202+
Math::is_equal_approx(path_follow_2d->get_progress_ratio(), (real_t)0.3),
186203
"Progress Ratio should loop back from the end in the opposite direction");
187204

188205
path_follow_2d->set_loop(false);
189206

190207
path_follow_2d->set_progress_ratio(-0.3);
191208
CHECK_MESSAGE(
192-
path_follow_2d->get_progress_ratio() == 0,
209+
Math::is_equal_approx(path_follow_2d->get_progress_ratio(), 0),
193210
"Progress Ratio should be clamped at 0");
194211

195212
path_follow_2d->set_progress_ratio(1.3);
196213
CHECK_MESSAGE(
197-
path_follow_2d->get_progress_ratio() == 1,
214+
Math::is_equal_approx(path_follow_2d->get_progress_ratio(), 1),
198215
"Progress Ratio should be clamped at 1");
199216

200217
memdelete(path);
201218
}
202219

203-
TEST_CASE("[PathFollow2D] Progress out of range") {
204-
const Ref<Curve2D> &curve = memnew(Curve2D());
220+
TEST_CASE("[SceneTree][PathFollow2D] Progress out of range") {
221+
Ref<Curve2D> curve = memnew(Curve2D);
205222
curve->add_point(Vector2(0, 0));
206223
curve->add_point(Vector2(100, 0));
207-
const Path2D *path = memnew(Path2D);
224+
Path2D *path = memnew(Path2D);
208225
path->set_curve(curve);
209-
const PathFollow2D *path_follow_2d = memnew(PathFollow2D);
226+
PathFollow2D *path_follow_2d = memnew(PathFollow2D);
210227
path->add_child(path_follow_2d);
228+
SceneTree::get_singleton()->get_root()->add_child(path);
211229

212230
path_follow_2d->set_loop(true);
213231

214232
path_follow_2d->set_progress(-50);
215233
CHECK_MESSAGE(
216-
path_follow_2d->get_progress() == 50,
234+
Math::is_equal_approx(path_follow_2d->get_progress(), 50),
217235
"Progress should loop back from the end in the opposite direction");
218236

219237
path_follow_2d->set_progress(150);
220238
CHECK_MESSAGE(
221-
path_follow_2d->get_progress() == 50,
239+
Math::is_equal_approx(path_follow_2d->get_progress(), 50),
222240
"Progress should loop back from the end in the opposite direction");
223241

224242
path_follow_2d->set_loop(false);
225243

226244
path_follow_2d->set_progress(-50);
227245
CHECK_MESSAGE(
228-
path_follow_2d->get_progress() == 0,
246+
Math::is_equal_approx(path_follow_2d->get_progress(), 0),
229247
"Progress should be clamped at 0");
230248

231249
path_follow_2d->set_progress(150);
232250
CHECK_MESSAGE(
233-
path_follow_2d->get_progress() == 100,
251+
Math::is_equal_approx(path_follow_2d->get_progress(), 100),
234252
"Progress should be clamped at 1");
235253

236254
memdelete(path);

0 commit comments

Comments
 (0)