• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

jandelgado / jled / 30210096677
97%

Build:
DEFAULT BRANCH: master
Ran 26 Jul 2026 04:19PM UTC
Jobs 1
Files 10
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

26 Jul 2026 04:17PM UTC coverage: 97.545% (-0.4%) from 97.976%
30210096677

push

github

web-flow
Jled group additional lifecycle events (#177)

* docs: guide readers between JLedGroup and JLedRefGroup

* feature: add OnEnter/OnLeave lifecycle callbacks to JLedGroup

* docs: document OnEnter/OnLeave group lifecycle events

* fix: don't reset group elements on final lap completion

TJLedGroup::Update() unconditionally called ResetLeds() at every lap
boundary, including the terminal one where the group stops for good.
Each element had already reached its own correct ST_STOPPED terminal
state on that tick; the reset overwrote it back to ST_INIT. For
JLedRefGroup, where the underlying LED objects remain directly
accessible to user code, this meant a finished LED's IsRunning() kept
reporting true, and a direct Update() call on it would silently
restart the effect instead of staying stopped.

ResetLeds() now only runs when another repetition is actually
following.

* feature: add TJLedAny::As<T>()/TJLedRef::As<T>() type recovery

JLedAny/JLedRef erase the concrete type of the LED or nested group they
hold, so a caller working from an OnEnter/OnLeave callback index has no way
to reach a method that isn't part of the common group interface (e.g.
MaxBrightness() on a JLed, or IsForever() on a nested JLedGroup).

As<T>() returns a T* if the slot holds exactly that type, or nullptr
otherwise. Uses VtableFor<T>()'s address as a no-RTTI type tag, the same
trick already implicit in the existing bool-returning vtable calls, so it
adds no new state and costs nothing when unused (template method,
instantiated only where called).

* fix clang settings and clang-tidy runs

* fix: OnEnter/OnLeave must not fire on an empty group

* streamline group lifecycle API

* add a dummy Serial class for better LSP ergonomics

when working on the examples

* add group lifecycle example

* keep GroupUpdateResult's public surface thin

Make GroupUpdateResult::GetEvents() private.

180 of 196 branches covered (91.84%)

Branch coverage included in aggregate %.

44 of 46 new or added lines in 2 files covered. (95.65%)

1 existing line in 1 file now uncovered.

575 of 578 relevant lines covered (99.48%)

796.28 hits per line

Uncovered Changes

Lines Coverage ∆ File
2
96.57
-0.83% src/jled_group_base.h

Coverage Regressions

Lines Coverage ∆ File
1
96.57
-0.83% src/jled_group_base.h
Jobs
ID Job ID Ran Files Coverage
1 30210096677.1 26 Jul 2026 04:19PM UTC 10
97.55
GitHub Action Run
Source Files on build 30210096677
  • Tree
  • List 10
  • Changed 2
  • Source Changed 2
  • Coverage Changed 2
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #30210096677
  • ce375eb7 on github
  • Prev Build on master (#29827797402)
  • Next Build on master (#30212107911)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc