|
1 | 1 | #include <scratchcpp/thread.h> |
2 | 2 | #include <scratchcpp/script.h> |
3 | 3 | #include <scratchcpp/virtualmachine.h> |
| 4 | +#include <scratchcpp/dev/executioncontext.h> |
4 | 5 | #include <targetmock.h> |
5 | 6 | #include <enginemock.h> |
| 7 | +#include <executablecodemock.h> |
6 | 8 |
|
7 | 9 | #include "../common.h" |
8 | 10 |
|
9 | 11 | using namespace libscratchcpp; |
10 | 12 |
|
11 | | -TEST(ThreadTest, Constructor) |
| 13 | +using ::testing::Return; |
| 14 | + |
| 15 | +class ThreadTest : public testing::Test |
12 | 16 | { |
13 | | - TargetMock target; |
14 | | - EngineMock engine; |
15 | | - Script script(nullptr, nullptr, nullptr); |
16 | | - Thread thread(&target, &engine, &script); |
17 | | - ASSERT_EQ(thread.target(), &target); |
18 | | - ASSERT_EQ(thread.engine(), &engine); |
19 | | - ASSERT_EQ(thread.script(), &script); |
20 | | - ASSERT_TRUE(thread.vm()); |
21 | | - ASSERT_EQ(thread.vm()->target(), &target); |
22 | | - ASSERT_EQ(thread.vm()->engine(), &engine); |
23 | | - ASSERT_EQ(thread.vm()->script(), &script); |
| 17 | + public: |
| 18 | + void SetUp() override |
| 19 | + { |
| 20 | + m_script = std::make_unique<Script>(nullptr, nullptr, nullptr); |
| 21 | +#ifdef USE_LLVM |
| 22 | + m_code = std::make_shared<ExecutableCodeMock>(); |
| 23 | + m_script->setCode(m_code); |
| 24 | + m_ctx = std::make_shared<ExecutionContext>(&m_target); |
| 25 | + EXPECT_CALL(*m_code, createExecutionContext(&m_target)).WillOnce(Return(m_ctx)); |
| 26 | +#endif |
| 27 | + m_thread = std::make_unique<Thread>(&m_target, &m_engine, m_script.get()); |
| 28 | + } |
| 29 | + |
| 30 | + std::unique_ptr<Thread> m_thread; |
| 31 | + TargetMock m_target; |
| 32 | + EngineMock m_engine; |
| 33 | + std::unique_ptr<Script> m_script; |
| 34 | +#ifdef USE_LLVM |
| 35 | + std::shared_ptr<ExecutableCodeMock> m_code; |
| 36 | + std::shared_ptr<ExecutionContext> m_ctx; |
| 37 | +#endif |
| 38 | +}; |
| 39 | + |
| 40 | +TEST_F(ThreadTest, Constructor) |
| 41 | +{ |
| 42 | + ASSERT_EQ(m_thread->target(), &m_target); |
| 43 | + ASSERT_EQ(m_thread->engine(), &m_engine); |
| 44 | + ASSERT_EQ(m_thread->script(), m_script.get()); |
| 45 | + ASSERT_TRUE(m_thread->vm()); |
| 46 | + ASSERT_EQ(m_thread->vm()->target(), &m_target); |
| 47 | + ASSERT_EQ(m_thread->vm()->engine(), &m_engine); |
| 48 | + ASSERT_EQ(m_thread->vm()->script(), m_script.get()); |
| 49 | +} |
| 50 | + |
| 51 | +#ifdef USE_LLVM |
| 52 | +TEST_F(ThreadTest, Run) |
| 53 | +{ |
| 54 | + EXPECT_CALL(*m_code, run(m_ctx.get())); |
| 55 | + m_thread->run(); |
| 56 | +} |
| 57 | + |
| 58 | +TEST_F(ThreadTest, Kill) |
| 59 | +{ |
| 60 | + EXPECT_CALL(*m_code, kill(m_ctx.get())); |
| 61 | + m_thread->kill(); |
| 62 | +} |
| 63 | + |
| 64 | +TEST_F(ThreadTest, Reset) |
| 65 | +{ |
| 66 | + EXPECT_CALL(*m_code, reset(m_ctx.get())); |
| 67 | + m_thread->reset(); |
| 68 | +} |
| 69 | + |
| 70 | +TEST_F(ThreadTest, IsFinished) |
| 71 | +{ |
| 72 | + EXPECT_CALL(*m_code, isFinished(m_ctx.get())).WillOnce(Return(false)); |
| 73 | + ASSERT_FALSE(m_thread->isFinished()); |
| 74 | + |
| 75 | + EXPECT_CALL(*m_code, isFinished(m_ctx.get())).WillOnce(Return(true)); |
| 76 | + ASSERT_TRUE(m_thread->isFinished()); |
24 | 77 | } |
25 | 78 |
|
26 | | -// NOTE: Since VirtualMachine is going to be removed, tests for the other methods will be added later |
| 79 | +// TODO: Test promise() and resolvePromise() |
| 80 | +#endif // USE_LLVM |
0 commit comments