Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/tests/core/io/test_stream_peer.h
10278 views
1
/**************************************************************************/
2
/* test_stream_peer.h */
3
/**************************************************************************/
4
/* This file is part of: */
5
/* GODOT ENGINE */
6
/* https://godotengine.org */
7
/**************************************************************************/
8
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
9
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
10
/* */
11
/* Permission is hereby granted, free of charge, to any person obtaining */
12
/* a copy of this software and associated documentation files (the */
13
/* "Software"), to deal in the Software without restriction, including */
14
/* without limitation the rights to use, copy, modify, merge, publish, */
15
/* distribute, sublicense, and/or sell copies of the Software, and to */
16
/* permit persons to whom the Software is furnished to do so, subject to */
17
/* the following conditions: */
18
/* */
19
/* The above copyright notice and this permission notice shall be */
20
/* included in all copies or substantial portions of the Software. */
21
/* */
22
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
23
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
24
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
25
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
26
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
27
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
28
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
29
/**************************************************************************/
30
31
#pragma once
32
33
#include "core/io/stream_peer.h"
34
#include "tests/test_macros.h"
35
36
namespace TestStreamPeer {
37
38
TEST_CASE("[StreamPeer] Initialization through StreamPeerBuffer") {
39
Ref<StreamPeerBuffer> spb;
40
spb.instantiate();
41
42
CHECK_EQ(spb->is_big_endian_enabled(), false);
43
}
44
45
TEST_CASE("[StreamPeer] Get and sets through StreamPeerBuffer") {
46
Ref<StreamPeerBuffer> spb;
47
spb.instantiate();
48
49
SUBCASE("A int8_t value") {
50
int8_t value = 42;
51
52
spb->clear();
53
spb->put_8(value);
54
spb->seek(0);
55
56
CHECK_EQ(spb->get_8(), value);
57
}
58
59
SUBCASE("A uint8_t value") {
60
uint8_t value = 42;
61
62
spb->clear();
63
spb->put_u8(value);
64
spb->seek(0);
65
66
CHECK_EQ(spb->get_u8(), value);
67
}
68
69
SUBCASE("A int16_t value") {
70
int16_t value = 42;
71
72
spb->clear();
73
spb->put_16(value);
74
spb->seek(0);
75
76
CHECK_EQ(spb->get_16(), value);
77
}
78
79
SUBCASE("A uint16_t value") {
80
uint16_t value = 42;
81
82
spb->clear();
83
spb->put_u16(value);
84
spb->seek(0);
85
86
CHECK_EQ(spb->get_u16(), value);
87
}
88
89
SUBCASE("A int32_t value") {
90
int32_t value = 42;
91
92
spb->clear();
93
spb->put_32(value);
94
spb->seek(0);
95
96
CHECK_EQ(spb->get_32(), value);
97
}
98
99
SUBCASE("A uint32_t value") {
100
uint32_t value = 42;
101
102
spb->clear();
103
spb->put_u32(value);
104
spb->seek(0);
105
106
CHECK_EQ(spb->get_u32(), value);
107
}
108
109
SUBCASE("A int64_t value") {
110
int64_t value = 42;
111
112
spb->clear();
113
spb->put_64(value);
114
spb->seek(0);
115
116
CHECK_EQ(spb->get_64(), value);
117
}
118
119
SUBCASE("A int64_t value") {
120
uint64_t value = 42;
121
122
spb->clear();
123
spb->put_u64(value);
124
spb->seek(0);
125
126
CHECK_EQ(spb->get_u64(), value);
127
}
128
129
SUBCASE("A half-precision float value") {
130
float value = 3.1415927f;
131
float expected = 3.14062f;
132
133
spb->clear();
134
spb->put_half(value);
135
spb->seek(0);
136
137
CHECK(spb->get_half() == doctest::Approx(expected));
138
}
139
140
SUBCASE("A float value") {
141
float value = 42.0f;
142
143
spb->clear();
144
spb->put_float(value);
145
spb->seek(0);
146
147
CHECK_EQ(spb->get_float(), value);
148
}
149
150
SUBCASE("A double value") {
151
double value = 42.0;
152
153
spb->clear();
154
spb->put_double(value);
155
spb->seek(0);
156
157
CHECK_EQ(spb->get_double(), value);
158
}
159
160
SUBCASE("A string value") {
161
String value = "Hello, World!";
162
163
spb->clear();
164
spb->put_string(value);
165
spb->seek(0);
166
167
CHECK_EQ(spb->get_string(), value);
168
}
169
170
SUBCASE("A utf8 string value") {
171
String value = String::utf8("Hello✩, World✩!");
172
173
spb->clear();
174
spb->put_utf8_string(value);
175
spb->seek(0);
176
177
CHECK_EQ(spb->get_utf8_string(), value);
178
}
179
180
SUBCASE("A variant value") {
181
Array value;
182
value.push_front(42);
183
value.push_front("Hello, World!");
184
185
spb->clear();
186
spb->put_var(value);
187
spb->seek(0);
188
189
CHECK_EQ(spb->get_var(), value);
190
}
191
}
192
193
TEST_CASE("[StreamPeer] Get and sets big endian through StreamPeerBuffer") {
194
Ref<StreamPeerBuffer> spb;
195
spb.instantiate();
196
spb->set_big_endian(true);
197
198
SUBCASE("A int16_t value") {
199
int16_t value = 42;
200
201
spb->clear();
202
spb->put_16(value);
203
spb->seek(0);
204
205
CHECK_EQ(spb->get_16(), value);
206
}
207
208
SUBCASE("A uint16_t value") {
209
uint16_t value = 42;
210
211
spb->clear();
212
spb->put_u16(value);
213
spb->seek(0);
214
215
CHECK_EQ(spb->get_u16(), value);
216
}
217
218
SUBCASE("A int32_t value") {
219
int32_t value = 42;
220
221
spb->clear();
222
spb->put_32(value);
223
spb->seek(0);
224
225
CHECK_EQ(spb->get_32(), value);
226
}
227
228
SUBCASE("A uint32_t value") {
229
uint32_t value = 42;
230
231
spb->clear();
232
spb->put_u32(value);
233
spb->seek(0);
234
235
CHECK_EQ(spb->get_u32(), value);
236
}
237
238
SUBCASE("A int64_t value") {
239
int64_t value = 42;
240
241
spb->clear();
242
spb->put_64(value);
243
spb->seek(0);
244
245
CHECK_EQ(spb->get_64(), value);
246
}
247
248
SUBCASE("A int64_t value") {
249
uint64_t value = 42;
250
251
spb->clear();
252
spb->put_u64(value);
253
spb->seek(0);
254
255
CHECK_EQ(spb->get_u64(), value);
256
}
257
258
SUBCASE("A float value") {
259
float value = 42.0f;
260
261
spb->clear();
262
spb->put_float(value);
263
spb->seek(0);
264
265
CHECK_EQ(spb->get_float(), value);
266
}
267
268
SUBCASE("A half-precision float value") {
269
float value = 3.1415927f;
270
float expected = 3.14062f;
271
272
spb->clear();
273
spb->put_half(value);
274
spb->seek(0);
275
276
CHECK(spb->get_half() == doctest::Approx(expected));
277
}
278
279
SUBCASE("A double value") {
280
double value = 42.0;
281
282
spb->clear();
283
spb->put_double(value);
284
spb->seek(0);
285
286
CHECK_EQ(spb->get_double(), value);
287
}
288
}
289
290
TEST_CASE("[StreamPeer] Get string when there is no string") {
291
Ref<StreamPeerBuffer> spb;
292
spb.instantiate();
293
294
ERR_PRINT_OFF;
295
CHECK_EQ(spb->get_string(), "");
296
ERR_PRINT_ON;
297
}
298
299
TEST_CASE("[StreamPeer] Get UTF8 string when there is no string") {
300
Ref<StreamPeerBuffer> spb;
301
spb.instantiate();
302
303
ERR_PRINT_OFF;
304
CHECK_EQ(spb->get_utf8_string(), "");
305
ERR_PRINT_ON;
306
}
307
308
} // namespace TestStreamPeer
309
310