LearnNewsExamplesServices
Frontmatter
titletest(util): cover String helpers
authorBortlesboat
stateMerged
createdAt2:51 AM
updatedAt3:24 AM
closedAt3:20 AM
mergedAt3:20 AM
branchesdevtest/15118-string-util-coverage
urlhttps://github.com/neomjs/neo/pull/15119
contentTrust
projected
quarantined0
signals[]
Merged
Bortlesboat
Bortlesboat commented on 2:51 AM

Summary

  • add focused unit coverage for every character selected by StringUtil.charPattern
  • cover every supported entity, mapping fallbacks, and non-string pass-through
  • pin uncapitalize behavior for uppercase, lowercase, empty, null, and false inputs

Closes #15118.

Verification

  • focused unit spec: 5 passed
  • complete unit run: 6,975 tests collected; 6,693 passed, 85 skipped, 197 unrelated environment-sensitive failures; zero failures in String.spec.mjs
  • all lint-staged gates passed: whitespace, shorthand, JSDoc types, ticket archaeology, block alignment, parser, and AiConfig mutation checks
  • node syntax and staged diff checks passed

AI disclosure

OpenAI Codex assisted with implementation and test execution. I reviewed the final diff and verification output.

neo-opus-grace
neo-opus-grace commented on 3:03 AM

Welcome to Neo, @Bortlesboat — and thank you for a genuinely lovely first contribution! 🎉

I reviewed the diff line by line and ran your spec locally against the current StringUtil: 5/5 pass. This is exactly the shape we love to see:

  • Idiomatic — it follows Neo's unit-test conventions precisely (the setup() + core/_export import shape, the describe/test structure). Nothing to nitpick there.
  • Thoughtful edge casesnull / false / empty-string preservation, unknown-entity fallbacks (&unknown;&unknown;), and non-string pass-through are exactly the corners these helpers can regress on. Nicely chosen.
  • Purely additive (+48 / −0) — zero risk to existing behavior.

Also, thank you for the clear AI-disclosure — that transparency is genuinely appreciated here, and reviewing the final diff + verification yourself is the right instinct.

One small reassurance: the "197 unrelated environment-sensitive failures" you saw in the full local run are a known quirk of some suites on certain machines — not anything to do with your change. "Zero failures in String.spec.mjs" is the signal that matters. ✅

Two tiny, non-blocking notes for the future (nothing to change here)

  1. Resolves #N over Closes #N — your Closes #15118 worked perfectly and closed the issue, so it's totally fine for this PR. Going forward, Neo's convention is Resolves #N in the PR body: we use Resolves to mean delivered work, and reserve Closes for issues closed without a change. A one-word habit for next time. 🙂
  2. Two optional skills that encode our conventions and make future PRs smoother: ticket-intake (for filing/scoping issues) and pull-request (for PR body structure). Neither was needed here — you nailed it — but they're handy guardrails.

Next step

CI doesn't auto-run on a first-time contributor's PR (a GitHub safety gate) — a maintainer will click "Approve and run." From my side the change is verified and ready. cc @tobiu.

And — genuinely curious: how was your first contribution experience (with Codex in the loop)? Anything that felt confusing or rougher than it should have been? Your feedback helps us smooth the path for the next newcomer. 🖖 — Grace


neo-opus-grace
neo-opus-grace APPROVED reviewed on 3:19 AM

Approved ✅ — verified the spec locally (5/5 pass); full review in the comment above. Congrats on your first merge-ready contribution to Neo, and welcome aboard! 🖖 — Grace


neo-opus-grace
neo-opus-grace APPROVED reviewed on 3:24 AM

PR Micro-Review

Class: micro — a single, purely-additive unit-test file (−0 production change).

Verdict: APPROVED ✅

Glance: Verified locally — 5/5 pass against the current util. Idiomatic (follows Neo's unit-test conventions), well-chosen edge cases, zero risk to existing behavior. Full welcoming review + onboarding notes are in the PR comment above. Welcome aboard, @Bortlesboat! 🖖 — Grace