aglinxinyuan opened a new issue, #7898:
URL: https://github.com/apache/texera/issues/7898

   ### Task Summary
   
   Four operator descriptors sit below 90% with the gap entirely in awkward 
branch arms:
   
   | File | Coverage |
   |---|---|
   | `source/sql/SQLSourceOpDesc.scala` | 88.9% — 11 missed arms |
   | `visualization/ecdfPlot/ECDFPlotOpDesc.scala` | 85.4% — 15 missed arms |
   | `udf/r/RUDFSourceOpDesc.scala` | 80.6% |
   | `machineLearning/Scorer/MachineLearningScorerOpDesc.scala` | 84.8% |
   
   All five specs already exist (952 lines between them) and are thorough, so 
this is an extension target — the easy assertions are taken and what remains is 
exactly the awkward arms. Budget accordingly.
   
   **`TimeSeriesOpDesc` looks like a fifth candidate and is worth exactly 
zero.** All five of its partials are Scala's null-safe comparison against a 
String *literal*, where one arm requires the constant itself to be null. 
Measured: a probe setting every field to null left it at 23/28, gaining arms 
and no lines. Worse, that null path is a crash rather than a behaviour — 
`dropnaCols.map(c => pyb"$c")` NPEs inside the `pyb` macro on Base64 of a null 
string. Pinning it would cement junk.
   
   Other structural limits, all verified in bytecode:
   
   1. **The same String-literal pattern caps `ECDFPlotOpDesc` at 42/48.** 
`javap` on `createPlotlyFigure` shows the three-jump null-safe form 
(`ifnonnull` / `ifnull` / `ifeq`), and the `ifnull`-taken arm needs the literal 
`"sum"` to be null. A probe drove those lines from `cb=3` to `cb=5` with `mb` 
**unchanged** — 8 arms gained, zero lines.
   2. **Two more ECDF lines need a hashCode collision** with `"count"` or 
`"sum"` that is not equal to it. Constructible in principle, pure padding in 
practice.
   3. **`MachineLearningScorerOpDesc`'s last two lines are reachable only 
through an erasure violation.** The LUB of the two metric list types erases to 
`java.lang.Enum`, so the lambda bridge's checkcast admits any foreign enum — 
`List(java.time.DayOfWeek.MONDAY).asInstanceOf[List[classificationMetricsFnc]]` 
does reach the `case _` throw. But no production route exists, because Jackson 
rejects an unknown enum name first. Only take it with an explicit comment 
saying it is an erasure probe.
   4. **The six `require` message strings are lifted to 
`$anonfun$querySchema$1..6`** and dropped by JaCoCo's `SyntheticFilter`. Their 
source lines already read as covered because the closure allocation is 
attributed to the enclosing method — they move nothing either way.
   
   Three repo conventions and traps:
   
   - **`PythonOperatorDescriptor` has a reflection meta-scan.** 
`PythonCodeRawInvalidTextSpec` instantiates every subclass, so defining a 
descriptor subtype inside a spec breaks that spec.
   - **Every LogicalOp-subtype spec in a bundle needs a JSON round-trip test.** 
This is enforced in review.
   - **`WorkflowOperator/jacoco` fails inside a git worktree.** 
`FileScanSourceOpExecSpec` aborts in `beforeAll` with 
`RepositoryNotFoundException` because a worktree's `.git` is a file, and since 
sbt-jacoco runs unforked the report comes out all-zero rather than partial. 
Exclude that suite by name in both runs. Its aborted teardown also leaks an 
untracked `test_large_binary.txt` into the source tree — delete it or it trips 
the license-header check.
   
   ### Task Type
   
   - [ ] Refactor / Cleanup
   - [ ] DevOps / Deployment / CI
   - [x] Testing / QA
   - [ ] Documentation
   - [ ] Performance
   - [ ] Other
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to