Skip to content

v1.8.0

Choose a tag to compare

@github-actions github-actions released this 31 Jul 09:08
· 258 commits to main since this release

Fixed

  • tabletest: Corrected the rule for multiple type converters. The skill claimed two @TypeConverter methods returning the same wrapper type are selected by matching the parameter name — they are not, and the published example fails every row with TableTestException: Multiple type converters found. Selection is by return type alone, and the match is on the erased type, so Optional<String> and Optional<Boolean> collide with each other. Several parameters of one wrapper type share a single converter
  • tabletest: "Irrelevant input" meant two opposite things in two places. An input another rule owns is held at one obviously-valid value; an input this rule claims not to affect the outcome has to vary across the values it ignores, or the claim cannot be contradicted by any row. The distinction is now stated once, as a question to ask of your own table, and both misuses are corrected. Same fix applied to the table-driven-testing skill, which carried the identical conflict in its own checklist
  • tabletest: A converter is no longer described as being "for formatting only". Any domain object built from a table value belongs in one, whatever the construction idiom. What a regex inside a converter signals is a cell carrying two values — the repair is a column, never moving construction back into the test body
  • tabletest: A column blank for most of its rows now collapses into a map column before any table is split. Splitting first produced several tables fixing the same setup and reporting the same output column, which the skill elsewhere calls an over-split
  • tabletest: The worked example for annotation order no longer breaks three rules while demonstrating a fourth — its description published the whole fee algorithm, it claimed an input did not matter while never varying it, and it fused a classification with the arithmetic that follows it
  • tabletest: The comments-and-grouping example tested no system — it asserted output == input * input, recomputing its own expectation. It now calls a policy object, and its two comment groups each straddle a real band boundary instead of labelling rows "basic" and "edge"
  • tabletest: The last worked examples naming a row after its own answer are fixed (Alice succeeds beside Result? SUCCESS, Primary master, both ok beside Primary OK). Two of them could not be repaired by renaming: the row's real input was named only in the scenario text and appeared in no column, so the tables now carry that input and the names describe it

Removed

  • tabletest: The async-and-performance reference. Almost all of it was general advice on testing asynchronous code — latches, thread-safe collections for recording call order, timing assertions — rather than anything about expressing those tests as a table. The parts that were TableTest-specific already lived elsewhere: the <50 upper-bound cell convention and its converter, waiting for off-thread work before asserting, and map columns for composite request data. One distinction was kept on the way out: a range assertion still beats an upper bound when the rule is "the duration the system reported matches the real one"

Changed

  • tabletest: Guidance that encoded two values into one cell (ERROR+1, TIMEOUT+3, OK in 10ms) is removed. A flattened cell has to be parsed back in the method body, which tests the format rather than the rule; a pair that is really one value is a domain type, and a pair that is two values is two columns
  • tabletest: Patterns that kept a table short by moving its meaning into the test body are replaced. An unshowable expected value (an ANSI escape, Base64) gets a type whose constants carry it, so the table names the constant and built-in enum conversion does the rest — not a lookup map resolved in the body. Composite keys use short real values (acme:search:v2), not single-letter placeholders needing a legend the table does not contain
  • tabletest: Worked examples no longer put if, switch or a ternary in a @TableTest method body, no longer leave an expectation column holding one value in every row, and are named for the action the code performs rather than test…