2
2
#include < scratchcpp/block.h>
3
3
#include < enginemock.h>
4
4
#include < timermock.h>
5
+ #include < clockmock.h>
5
6
6
7
#include " ../common.h"
7
8
#include " blocks/sensingblocks.h"
@@ -24,6 +25,7 @@ class SensingBlocksTest : public testing::Test
24
25
EngineMock m_engineMock;
25
26
Engine m_engine;
26
27
TimerMock m_timerMock;
28
+ ClockMock m_clockMock;
27
29
};
28
30
29
31
TEST_F (SensingBlocksTest, Name)
@@ -41,6 +43,7 @@ TEST_F(SensingBlocksTest, RegisterBlocks)
41
43
// Blocks
42
44
EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sensing_timer" , &SensingBlocks::compileTimer)).Times (1 );
43
45
EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sensing_resettimer" , &SensingBlocks::compileResetTimer)).Times (1 );
46
+ EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sensing_dayssince2000" , &SensingBlocks::compileDaysSince2000)).Times (1 );
44
47
45
48
m_section->registerBlocks (&m_engineMock);
46
49
}
@@ -111,3 +114,39 @@ TEST_F(SensingBlocksTest, ResetTimerImpl)
111
114
112
115
ASSERT_EQ (vm.registerCount (), 0 );
113
116
}
117
+
118
+ TEST_F (SensingBlocksTest, DaysSince2000)
119
+ {
120
+ Compiler compiler (&m_engineMock);
121
+
122
+ auto block = std::make_shared<Block>(" a" , " sensing_dayssince2000" );
123
+
124
+ EXPECT_CALL (m_engineMock, functionIndex (&SensingBlocks::daysSince2000)).WillOnce (Return (0 ));
125
+
126
+ compiler.init ();
127
+ compiler.setBlock (block);
128
+ SensingBlocks::compileDaysSince2000 (&compiler);
129
+ compiler.end ();
130
+
131
+ ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_EXEC, 0 , vm::OP_HALT }));
132
+ }
133
+
134
+ TEST_F (SensingBlocksTest, DaysSince2000Impl)
135
+ {
136
+ static unsigned int bytecode[] = { vm::OP_START, vm::OP_EXEC, 0 , vm::OP_HALT };
137
+ static BlockFunc functions[] = { &SensingBlocks::daysSince2000 };
138
+
139
+ VirtualMachine vm (nullptr , &m_engineMock, nullptr );
140
+ vm.setFunctions (functions);
141
+
142
+ std::chrono::system_clock::time_point time (std::chrono::milliseconds (1011243120562 )); // Jan 17 2002 04:52:00
143
+ EXPECT_CALL (m_clockMock, currentSystemTime ()).WillOnce (Return (time));
144
+
145
+ SensingBlocks::clock = &m_clockMock;
146
+ vm.setBytecode (bytecode);
147
+ vm.run ();
148
+ SensingBlocks::clock = Clock::instance ().get ();
149
+
150
+ ASSERT_EQ (vm.registerCount (), 1 );
151
+ ASSERT_EQ (vm.getInput (0 , 1 )->toDouble (), 747.20278428240817 );
152
+ }
0 commit comments