From a4d5f39fb6e5139896466e8e9b4c1d8bc3105e44 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Fri, 4 Jul 2025 07:59:12 -0500 Subject: [PATCH] cover --- .../fixtures/defer_fifo_simple.yaml | 68 +++++++++++++++---- 1 file changed, 55 insertions(+), 13 deletions(-) diff --git a/tests/integration/fixtures/defer_fifo_simple.yaml b/tests/integration/fixtures/defer_fifo_simple.yaml index 5cb675e77e..75aee41ebf 100644 --- a/tests/integration/fixtures/defer_fifo_simple.yaml +++ b/tests/integration/fixtures/defer_fifo_simple.yaml @@ -2,31 +2,73 @@ esphome: name: defer-fifo-simple on_boot: - lambda: |- - // Simple test: defer 10 items and verify they execute in order - static int execution_order = 0; - static bool test_passed = true; + // Test 1: Test set_timeout with 0 delay (direct scheduler call) + static int set_timeout_order = 0; + static bool set_timeout_passed = true; + ESP_LOGD("defer_test", "Test 1: Testing set_timeout(0) for FIFO order..."); for (int i = 0; i < 10; i++) { int expected = i; App.scheduler.set_timeout((Component*)nullptr, nullptr, 0, [expected]() { - ESP_LOGD("defer_test", "Deferred item %d executed, order %d", expected, execution_order); - if (execution_order != expected) { - ESP_LOGE("defer_test", "FIFO violation: expected %d but got execution order %d", expected, execution_order); - test_passed = false; + ESP_LOGD("defer_test", "set_timeout(0) item %d executed, order %d", expected, set_timeout_order); + if (set_timeout_order != expected) { + ESP_LOGE("defer_test", "FIFO violation in set_timeout: expected %d but got execution order %d", expected, set_timeout_order); + set_timeout_passed = false; } - execution_order++; + set_timeout_order++; - if (execution_order == 10) { - if (test_passed) { - ESP_LOGI("defer_test", "✓ FIFO order test PASSED - all 10 items executed in correct order"); + if (set_timeout_order == 10) { + if (set_timeout_passed) { + ESP_LOGI("defer_test", "✓ Test 1 PASSED - set_timeout(0) maintains FIFO order"); } else { - ESP_LOGE("defer_test", "✗ FIFO order test FAILED - items executed out of order"); + ESP_LOGE("defer_test", "✗ Test 1 FAILED - set_timeout(0) executed out of order"); } + + // Start Test 2 after Test 1 completes + App.scheduler.set_timeout((Component*)nullptr, nullptr, 100, []() { + // Test 2: Test defer() method (component method) + static int defer_order = 0; + static bool defer_passed = true; + + ESP_LOGD("defer_test", "Test 2: Testing defer() for FIFO order..."); + + // Create a test component class that exposes defer() + class TestComponent : public Component { + public: + void test_defer() { + for (int i = 0; i < 10; i++) { + int expected = i; + this->defer([expected]() { + ESP_LOGD("defer_test", "defer() item %d executed, order %d", expected, defer_order); + if (defer_order != expected) { + ESP_LOGE("defer_test", "FIFO violation in defer: expected %d but got execution order %d", expected, defer_order); + defer_passed = false; + } + defer_order++; + + if (defer_order == 10) { + if (defer_passed) { + ESP_LOGI("defer_test", "✓ Test 2 PASSED - defer() maintains FIFO order"); + ESP_LOGI("defer_test", "✓ ALL TESTS PASSED - Both set_timeout(0) and defer() maintain FIFO order"); + } else { + ESP_LOGE("defer_test", "✗ Test 2 FAILED - defer() executed out of order"); + } + } + }); + } + } + }; + + TestComponent test_component; + test_component.test_defer(); + + ESP_LOGD("defer_test", "Deferred 10 items using defer(), waiting for execution..."); + }); } }); } - ESP_LOGD("defer_test", "Deferred 10 items, waiting for execution..."); + ESP_LOGD("defer_test", "Deferred 10 items using set_timeout(0), waiting for execution..."); host: