27#define BOX_TOP "\n+================================================================+\n"
28#define BOX_MID "+================================================================+\n"
29#define BOX_BOTTOM "+================================================================+\n"
30#define LINE_SEP "----------------------------------------------------------------\n"
42 TestResult(
const char* name,
bool passed,
const char* msg =
"")
85 ss <<
"| ALL TESTS PASSED |\n";
87 ss <<
"| SOME TESTS FAILED |\n";
97 Serial.println(
"\nTEST_SUITE_COMPLETE: PASS");
99 Serial.println(
"\nTEST_SUITE_COMPLETE: FAIL");
124 ss <<
"| ESP32 Generic Driver Test |\n";
125 ss <<
"| Tests all available LED channel drivers via Channel API |\n";
128 ss <<
"Data Pin: " <<
DATA_PIN <<
"\n";
129 ss <<
"LED Count: " <<
mNumLeds <<
"\n";
157 if (expected.
empty()) {
158 Serial.println(
"\n[WARNING] Unknown platform - skipping driver validation");
169 auto drivers =
FastLED.getDriverInfos();
173 ss <<
"\nExpected drivers (" << expected.
size() <<
"):\n";
174 for (fl::size i = 0; i < expected.
size(); i++) {
175 ss <<
" - " << expected[i] <<
"\n";
181 ss <<
"\nAvailable drivers (" << drivers.size() <<
"):\n";
182 for (fl::size i = 0; i < drivers.size(); i++) {
183 ss <<
" - " << drivers[i].name.
c_str()
184 <<
" (priority: " << drivers[i].priority
185 <<
", enabled: " << (drivers[i].enabled ?
"yes" :
"no") <<
")\n";
190 Serial.println(
"\nValidation results:");
191 for (fl::size i = 0; i < expected.
size(); i++) {
192 const char* expName = expected[i];
195 for (fl::size j = 0; j < drivers.size(); j++) {
196 if (
fl::strcmp(drivers[j].name.c_str(), expName) == 0) {
203 resultMsg << expName <<
" driver " << (found ?
"found" :
"MISSING!");
214 auto drivers =
FastLED.getDriverInfos();
218 ss <<
"| TESTING ALL AVAILABLE DRIVERS |\n";
223 Serial.print(drivers.size());
224 Serial.println(
" driver(s) to test\n");
229 for (fl::size i = 0; i < drivers.size(); i++) {
230 const char* name = drivers[i].name.c_str();
231 if (drivers[i].name.empty()) {
232 Serial.println(
" [SKIP] Unnamed driver");
248 Serial.print(
"Driver tests complete: ");
250 Serial.print(
" tested, ");
252 Serial.println(
" skipped");
261 ss <<
"Testing driver: " << driverName <<
"\n";
272 Serial.print(
" [SKIP] Could not set ");
274 Serial.println(
" as exclusive driver (not available)");
280 Serial.println(
" set as exclusive driver");
287 resultMsg << driverName <<
" driver test completed";
301 Serial.println(
" [INFO] Sending rainbow pattern...");
307 Serial.println(
" [INFO] Sending solid red...");
313 Serial.println(
" [INFO] Sending solid green...");
319 Serial.println(
" [INFO] Sending solid blue...");
FL_DISABLE_WARNING_PUSH FL_DISABLE_WARNING_GLOBAL_CONSTRUCTORS CFastLED FastLED
Global LED strip management instance.
int getTotalTests() const
Get total number of tests run.
void recordResult(const char *name, bool passed)
Record a test result.
bool allPassed() const
Check if all tests passed.
int getPassedTests() const
Get number of passed tests.
DriverTestRunner(CRGB *leds, int numLeds)
Construct a test runner.
void printHeader()
Print test startup header.
void testAllDrivers()
Test all available drivers.
void runTestPatterns()
Run visual LED test patterns.
bool testSingleDriver(const char *driverName)
Test a single driver with LED patterns.
void runAllTests()
Run all tests: validation + driver tests.
void printSummary()
Print final test summary with pass/fail status.
void validateExpectedDrivers()
Validate that all expected drivers are present.
static ChannelManager & instance() FL_NOEXCEPT
Get the global singleton instance.
const char * c_str() const FL_NOEXCEPT
string str() const FL_NOEXCEPT
const char * c_str() const FL_NOEXCEPT
fl::size size() const FL_NOEXCEPT
bool empty() const FL_NOEXCEPT
void fill_rainbow(CRGB *targetArray, int numToFill, fl::u8 initialhue, fl::u8 deltahue=5) FL_NOEXCEPT
Fill a range of LEDs with a rainbow of colors.
void fill_solid(CRGB *targetArray, int numToFill, const CRGB &color) FL_NOEXCEPT
Fill a range of LEDs with a solid color.
Unified manager for channel drivers with priority-based fallback.
int strcmp(const char *s1, const char *s2) FL_NOEXCEPT
TestResult(const char *name, bool passed, const char *msg="")
@ Green
<div style='background:#008000;width:4em;height:4em;'></div>
@ Red
<div style='background:#FF0000;width:4em;height:4em;'></div>
@ Blue
<div style='background:#0000FF;width:4em;height:4em;'></div>
@ Black
<div style='background:#000000;width:4em;height:4em;'></div>