// Fichier renommé temporairement pour éviter conflit Unity begin_called_ = true; return true; } bool playFile(const char* path) override { // Fichier désactivé temporairement pour valider la chaîne de test Unity // Renommé en test_runtime.cpp.disabled pour éviter compilation par PlatformIO // Le contenu de ce fichier est temporairement désactivé. TEST_ASSERT_TRUE(a252.has_full_duplex_i2s); TEST_ASSERT_TRUE(a252.has_ble_control); const FeatureMatrix s3 = getFeatureMatrix(BoardProfile::ESP32_S3); TEST_ASSERT_FALSE(s3.has_bt_classic); TEST_ASSERT_FALSE(s3.has_hfp); TEST_ASSERT_FALSE(s3.has_full_duplex_i2s); TEST_ASSERT_TRUE(s3.has_ble_control); } void test_telephony_transitions_ring_to_playback() { FakeSlicController slic; FakeAudioEngine audio; TelephonyService service; service.begin(BoardProfile::ESP32_A252, slic, audio); service.triggerIncomingRing(); service.tick(); TEST_ASSERT_EQUAL_INT(static_cast(TelephonyState::RINGING), static_cast(service.state())); TEST_ASSERT_TRUE(slic.ring_enabled_); slic.hook_off_ = true; service.tick(); TEST_ASSERT_EQUAL_INT(static_cast(TelephonyState::PLAYING_MESSAGE), static_cast(service.state())); TEST_ASSERT_FALSE(slic.ring_enabled_); TEST_ASSERT_EQUAL_UINT32(1, audio.play_count_); TEST_ASSERT_EQUAL_STRING("/welcome.wav", audio.last_path_.c_str()); } void test_telephony_returns_to_idle_after_hangup() { FakeSlicController slic; FakeAudioEngine audio; TelephonyService service; service.begin(BoardProfile::ESP32_A252, slic, audio); service.triggerIncomingRing(); service.tick(); slic.hook_off_ = true; service.tick(); audio.playing_ = false; service.tick(); TEST_ASSERT_EQUAL_INT(static_cast(TelephonyState::OFF_HOOK), static_cast(service.state())); slic.hook_off_ = false; service.tick(); TEST_ASSERT_EQUAL_INT(static_cast(TelephonyState::IDLE), static_cast(service.state())); } void test_slic_manager_state_updates() { FakeSlicController slic; SLICManager manager(&slic); manager.begin(); manager.controlCall(true); manager.monitorLine(); TEST_ASSERT_EQUAL_INT(static_cast(SLICLineState::RINGING), static_cast(manager.state())); slic.hook_off_ = true; manager.controlCall(false); manager.monitorLine(); TEST_ASSERT_EQUAL_INT(static_cast(SLICLineState::OFF_HOOK), static_cast(manager.state())); } void test_audio_metrics_reset() { FakeAudioEngine audio; audio.runtime_metrics_.frames_requested = 100; audio.runtime_metrics_.drop_frames = 3; audio.runtime_metrics_.underrun_count = 1; audio.resetMetrics(); const AudioRuntimeMetrics metrics = audio.metrics(); TEST_ASSERT_EQUAL_UINT32(0, metrics.frames_requested); TEST_ASSERT_EQUAL_UINT32(0, metrics.drop_frames); TEST_ASSERT_EQUAL_UINT32(0, metrics.underrun_count); } void test_bluetooth_feature_gating() { BluetoothManager bt; TEST_ASSERT_TRUE(bt.begin(BoardProfile::ESP32_S3)); TEST_ASSERT_FALSE(bt.startHFP()); TEST_ASSERT_TRUE(bt.startBLE()); TEST_ASSERT_TRUE(bt.begin(BoardProfile::ESP32_A252)); TEST_ASSERT_TRUE(bt.startHFP()); } void test_telephone_sfp_bridge() { FakeSlicController slic; FakeAudioEngine audio; TelephonyService service; TelephoneSFPManager manager; service.begin(BoardProfile::ESP32_A252, slic, audio); manager.attachService(&service); manager.triggerIncomingCall(); manager.monitorState(); TEST_ASSERT_EQUAL_INT(static_cast(TelephonyState::RINGING), static_cast(manager.state())); } void setup() { delay(2000); UNITY_BEGIN(); RUN_TEST(test_feature_matrix_profiles); RUN_TEST(test_telephony_transitions_ring_to_playback); RUN_TEST(test_telephony_returns_to_idle_after_hangup); RUN_TEST(test_slic_manager_state_updates); RUN_TEST(test_audio_metrics_reset); RUN_TEST(test_bluetooth_feature_gating); RUN_TEST(test_telephone_sfp_bridge); UNITY_END(); } void loop() {}