9
9
#include < scratchcpp/executablecode.h>
10
10
#include < enginemock.h>
11
11
#include < targetmock.h>
12
+ #include < audioinputmock.h>
13
+ #include < audioloudnessmock.h>
14
+ #include < timermock.h>
12
15
13
16
#include " ../common.h"
14
17
#include " blocks/eventblocks.h"
@@ -126,6 +129,24 @@ TEST_F(EventBlocksTest, WhenTouchingObjectPredicate)
126
129
ASSERT_TRUE (thread.runPredicate ());
127
130
}
128
131
132
+ // "_stage_"
133
+ {
134
+ ScriptBuilder builder (m_extension.get (), m_engine, target, false );
135
+ builder.addBlock (" event_whentouchingobject" );
136
+ builder.addDropdownInput (" TOUCHINGOBJECTMENU" , " " );
137
+ auto block = builder.currentBlock ();
138
+
139
+ Compiler compiler (&m_engineMock, target.get ());
140
+ auto code = compiler.compile (block, true );
141
+ Script script (target.get (), block, &m_engineMock);
142
+ script.setHatPredicateCode (code);
143
+ Thread thread (target.get (), &m_engineMock, &script);
144
+
145
+ EXPECT_CALL (m_engineMock, findTarget (" " )).WillOnce (Return (-1 ));
146
+ EXPECT_CALL (m_engineMock, targetAt (-1 )).WillOnce (Return (nullptr ));
147
+ ASSERT_FALSE (thread.runPredicate ());
148
+ }
149
+
129
150
// ""
130
151
{
131
152
ScriptBuilder builder (m_extension.get (), m_engine, target, false );
@@ -215,12 +236,10 @@ TEST_F(EventBlocksTest, WhenBackdropSwitchesTo)
215
236
compiler.compile (block);
216
237
}
217
238
218
- // TODO: Add test for when greater than hat predicate
219
-
220
239
TEST_F (EventBlocksTest, WhenGreaterThan)
221
240
{
222
241
auto target = std::make_shared<Sprite>();
223
- ScriptBuilder builder (m_extension.get (), m_engine, target);
242
+ ScriptBuilder builder (m_extension.get (), m_engine, target, false );
224
243
225
244
builder.addBlock (" event_whengreaterthan" );
226
245
builder.addDropdownField (" WHENGREATERTHANMENU" , " LOUDNESS" );
@@ -232,6 +251,61 @@ TEST_F(EventBlocksTest, WhenGreaterThan)
232
251
compiler.compile (block);
233
252
}
234
253
254
+ TEST_F (EventBlocksTest, WhenGreaterThanPredicate)
255
+ {
256
+ auto target = std::make_shared<Sprite>();
257
+ ScriptBuilder builder (m_extension.get (), m_engine, target, false );
258
+
259
+ const std::vector<Value> values = { 22.7 , 23 , 23.5 };
260
+ const std::vector<bool > retValues = { true , false , false };
261
+
262
+ AudioInputMock audioInput;
263
+ auto audioLoudness = std::make_shared<AudioLoudnessMock>();
264
+ EventBlocks::audioInput = &audioInput;
265
+ EXPECT_CALL (audioInput, audioLoudness ()).Times (3 ).WillRepeatedly (Return (audioLoudness));
266
+ EXPECT_CALL (*audioLoudness, getLoudness ()).Times (3 ).WillRepeatedly (Return (23 ));
267
+
268
+ // when [loudness] > x
269
+ for (int i = 0 ; i < values.size (); i++) {
270
+ ScriptBuilder builder (m_extension.get (), m_engine, target, false );
271
+ builder.addBlock (" event_whengreaterthan" );
272
+ builder.addDropdownField (" WHENGREATERTHANMENU" , " LOUDNESS" );
273
+ builder.addValueInput (" VALUE" , values[i]);
274
+ auto block = builder.currentBlock ();
275
+
276
+ Compiler compiler (&m_engineMock, target.get ());
277
+ auto code = compiler.compile (block, true );
278
+ Script script (target.get (), block, &m_engineMock);
279
+ script.setHatPredicateCode (code);
280
+ Thread thread (target.get (), &m_engineMock, &script);
281
+
282
+ ASSERT_EQ (thread.runPredicate (), retValues[i]);
283
+ }
284
+
285
+ EventBlocks::audioInput = nullptr ;
286
+
287
+ TimerMock timer;
288
+ EXPECT_CALL (m_engineMock, timer ()).Times (3 ).WillRepeatedly (Return (&timer));
289
+ EXPECT_CALL (timer, value ()).Times (3 ).WillRepeatedly (Return (23 ));
290
+
291
+ // when [timer] > x
292
+ for (int i = 0 ; i < values.size (); i++) {
293
+ ScriptBuilder builder (m_extension.get (), m_engine, target, false );
294
+ builder.addBlock (" event_whengreaterthan" );
295
+ builder.addDropdownField (" WHENGREATERTHANMENU" , " TIMER" );
296
+ builder.addValueInput (" VALUE" , values[i]);
297
+ auto block = builder.currentBlock ();
298
+
299
+ Compiler compiler (&m_engineMock, target.get ());
300
+ auto code = compiler.compile (block, true );
301
+ Script script (target.get (), block, &m_engineMock);
302
+ script.setHatPredicateCode (code);
303
+ Thread thread (target.get (), &m_engineMock, &script);
304
+
305
+ ASSERT_EQ (thread.runPredicate (), retValues[i]);
306
+ }
307
+ }
308
+
235
309
TEST_F (EventBlocksTest, Broadcast)
236
310
{
237
311
auto broadcast = std::make_shared<Broadcast>(" " , " test" );
0 commit comments