@@ -2571,3 +2571,177 @@ TEST_F(SensingBlocksTest, Of_PreferPropertiesOverVariables_Runtime)
25712571 ASSERT_EQ (value_toDouble (&value), -78.25 );
25722572 value_free (&value);
25732573}
2574+
2575+ TEST_F (SensingBlocksTest, Current_Year)
2576+ {
2577+ auto targetMock = std::make_shared<TargetMock>();
2578+
2579+ ScriptBuilder builder (m_extension.get (), m_engine, targetMock);
2580+ builder.addBlock (" sensing_current" );
2581+ builder.addDropdownField (" CURRENTMENU" , " YEAR" );
2582+ Block *block = builder.currentBlock ();
2583+
2584+ Compiler compiler (&m_engineMock, targetMock.get ());
2585+ auto code = compiler.compile (block, Compiler::CodeType::Reporter);
2586+ Script script (targetMock.get (), block, &m_engineMock);
2587+ script.setCode (code);
2588+ Thread thread (targetMock.get (), &m_engineMock, &script);
2589+
2590+ ValueData value = thread.runReporter ();
2591+ time_t now = time (0 );
2592+ tm *ltm = localtime (&now);
2593+ ASSERT_EQ (value_toDouble (&value), ltm->tm_year + 1900 );
2594+ value_free (&value);
2595+ }
2596+
2597+ TEST_F (SensingBlocksTest, Current_Month)
2598+ {
2599+ auto targetMock = std::make_shared<TargetMock>();
2600+
2601+ ScriptBuilder builder (m_extension.get (), m_engine, targetMock);
2602+ builder.addBlock (" sensing_current" );
2603+ builder.addDropdownField (" CURRENTMENU" , " MONTH" );
2604+ Block *block = builder.currentBlock ();
2605+
2606+ Compiler compiler (&m_engineMock, targetMock.get ());
2607+ auto code = compiler.compile (block, Compiler::CodeType::Reporter);
2608+ Script script (targetMock.get (), block, &m_engineMock);
2609+ script.setCode (code);
2610+ Thread thread (targetMock.get (), &m_engineMock, &script);
2611+
2612+ ValueData value = thread.runReporter ();
2613+ time_t now = time (0 );
2614+ tm *ltm = localtime (&now);
2615+ ASSERT_EQ (value_toDouble (&value), ltm->tm_mon + 1 );
2616+ value_free (&value);
2617+ }
2618+
2619+ TEST_F (SensingBlocksTest, Current_Date)
2620+ {
2621+ auto targetMock = std::make_shared<TargetMock>();
2622+
2623+ ScriptBuilder builder (m_extension.get (), m_engine, targetMock);
2624+ builder.addBlock (" sensing_current" );
2625+ builder.addDropdownField (" CURRENTMENU" , " DATE" );
2626+ Block *block = builder.currentBlock ();
2627+
2628+ Compiler compiler (&m_engineMock, targetMock.get ());
2629+ auto code = compiler.compile (block, Compiler::CodeType::Reporter);
2630+ Script script (targetMock.get (), block, &m_engineMock);
2631+ script.setCode (code);
2632+ Thread thread (targetMock.get (), &m_engineMock, &script);
2633+
2634+ ValueData value = thread.runReporter ();
2635+ time_t now = time (0 );
2636+ tm *ltm = localtime (&now);
2637+ ASSERT_EQ (value_toDouble (&value), ltm->tm_mday );
2638+ value_free (&value);
2639+ }
2640+
2641+ TEST_F (SensingBlocksTest, Current_DayOfWeek)
2642+ {
2643+ auto targetMock = std::make_shared<TargetMock>();
2644+
2645+ ScriptBuilder builder (m_extension.get (), m_engine, targetMock);
2646+ builder.addBlock (" sensing_current" );
2647+ builder.addDropdownField (" CURRENTMENU" , " DAYOFWEEK" );
2648+ Block *block = builder.currentBlock ();
2649+
2650+ Compiler compiler (&m_engineMock, targetMock.get ());
2651+ auto code = compiler.compile (block, Compiler::CodeType::Reporter);
2652+ Script script (targetMock.get (), block, &m_engineMock);
2653+ script.setCode (code);
2654+ Thread thread (targetMock.get (), &m_engineMock, &script);
2655+
2656+ ValueData value = thread.runReporter ();
2657+ time_t now = time (0 );
2658+ tm *ltm = localtime (&now);
2659+ ASSERT_EQ (value_toDouble (&value), ltm->tm_wday + 1 );
2660+ value_free (&value);
2661+ }
2662+
2663+ TEST_F (SensingBlocksTest, Current_Hour)
2664+ {
2665+ auto targetMock = std::make_shared<TargetMock>();
2666+
2667+ ScriptBuilder builder (m_extension.get (), m_engine, targetMock);
2668+ builder.addBlock (" sensing_current" );
2669+ builder.addDropdownField (" CURRENTMENU" , " HOUR" );
2670+ Block *block = builder.currentBlock ();
2671+
2672+ Compiler compiler (&m_engineMock, targetMock.get ());
2673+ auto code = compiler.compile (block, Compiler::CodeType::Reporter);
2674+ Script script (targetMock.get (), block, &m_engineMock);
2675+ script.setCode (code);
2676+ Thread thread (targetMock.get (), &m_engineMock, &script);
2677+
2678+ ValueData value = thread.runReporter ();
2679+ time_t now = time (0 );
2680+ tm *ltm = localtime (&now);
2681+ ASSERT_EQ (value_toDouble (&value), ltm->tm_hour );
2682+ value_free (&value);
2683+ }
2684+
2685+ TEST_F (SensingBlocksTest, Current_Minute)
2686+ {
2687+ auto targetMock = std::make_shared<TargetMock>();
2688+
2689+ ScriptBuilder builder (m_extension.get (), m_engine, targetMock);
2690+ builder.addBlock (" sensing_current" );
2691+ builder.addDropdownField (" CURRENTMENU" , " MINUTE" );
2692+ Block *block = builder.currentBlock ();
2693+
2694+ Compiler compiler (&m_engineMock, targetMock.get ());
2695+ auto code = compiler.compile (block, Compiler::CodeType::Reporter);
2696+ Script script (targetMock.get (), block, &m_engineMock);
2697+ script.setCode (code);
2698+ Thread thread (targetMock.get (), &m_engineMock, &script);
2699+
2700+ ValueData value = thread.runReporter ();
2701+ time_t now = time (0 );
2702+ tm *ltm = localtime (&now);
2703+ ASSERT_EQ (value_toDouble (&value), ltm->tm_min );
2704+ value_free (&value);
2705+ }
2706+
2707+ TEST_F (SensingBlocksTest, Current_Second)
2708+ {
2709+ auto targetMock = std::make_shared<TargetMock>();
2710+
2711+ ScriptBuilder builder (m_extension.get (), m_engine, targetMock);
2712+ builder.addBlock (" sensing_current" );
2713+ builder.addDropdownField (" CURRENTMENU" , " SECOND" );
2714+ Block *block = builder.currentBlock ();
2715+
2716+ Compiler compiler (&m_engineMock, targetMock.get ());
2717+ auto code = compiler.compile (block, Compiler::CodeType::Reporter);
2718+ Script script (targetMock.get (), block, &m_engineMock);
2719+ script.setCode (code);
2720+ Thread thread (targetMock.get (), &m_engineMock, &script);
2721+
2722+ ValueData value = thread.runReporter ();
2723+ time_t now = time (0 );
2724+ tm *ltm = localtime (&now);
2725+ ASSERT_EQ (value_toDouble (&value), ltm->tm_sec );
2726+ value_free (&value);
2727+ }
2728+
2729+ TEST_F (SensingBlocksTest, Current_Invalid)
2730+ {
2731+ auto targetMock = std::make_shared<TargetMock>();
2732+
2733+ ScriptBuilder builder (m_extension.get (), m_engine, targetMock);
2734+ builder.addBlock (" sensing_current" );
2735+ builder.addDropdownField (" CURRENTMENU" , " TEST" );
2736+ Block *block = builder.currentBlock ();
2737+
2738+ Compiler compiler (&m_engineMock, targetMock.get ());
2739+ auto code = compiler.compile (block, Compiler::CodeType::Reporter);
2740+ Script script (targetMock.get (), block, &m_engineMock);
2741+ script.setCode (code);
2742+ Thread thread (targetMock.get (), &m_engineMock, &script);
2743+
2744+ ValueData value = thread.runReporter ();
2745+ ASSERT_EQ (value_toDouble (&value), 0.0 );
2746+ value_free (&value);
2747+ }
0 commit comments