Add schematic I/O tests (Sponge v1/v2/v3, MCEdit) and intern test properties
TestBlockRegistry now shares one Property instance per name, type and value
list, as the real platforms do (CoreMcTransmogrifier's propertyCache). With
that, the TypeApplyingPattern test in PatternParserTest passes, so it is
re-enabled: it was a fixture artifact, not a bug. None of the other
@Disabled findings depend on per-type Property instances.
New tests in extent/clipboard/io:
- SpongeSchematicRoundTripTest: write/read round trips for V2 and V3 over
negative, degenerate and offset-origin regions, palettes of 1-2000 states,
block entities, entities, biomes, size limits (V1 and MCEdit have no writer).
- SpongeVarIntTest: sparse palette indices at every varint length edge
(127/128, 16383/16384, up to Integer.MAX_VALUE) in hand-built V2/V3 files.
- GoldenSchematicTest: tiny stored V1/V2/V3/MCEdit files (generated by a
standalone script, not by WorldEdit) that must keep loading.
- CorruptSchematicTest: truncation at every byte, garbage, missing/mistyped
tags, bad palettes and varints, version mismatches.
- SchematicDataFixerTest: when the DataFixer is applied and from which
version, using a recording stand-in (real DFU needs Minecraft).
- ClipboardFormatsTest: alias/extension registry and format detection.
Real bugs found are recorded as @Disabled tests in CorruptSchematicTest:
NPE on a palette index missing from the palette, block data length not
checked against the dimensions (too short and too long), getDataVersion
throwing for a foreign Version, and two ArrayIndexOutOfBounds cases in
MCEditSchematicReader. (498c36ea by albert pham)
Add copy, history and extent tests
Cover ForwardExtentCopy, OperationQueue/Operations, ChangeSetExecutor,
ArrayListHistory/BlockOptimizedHistory undo/redo round-trips on random
edit sequences, BlockArrayClipboard, masking/tracing/null/buffer/delegate
extents, MultiStageReorder, ChunkBatchingExtent and EditSession buffering.
Two real bugs found, recorded as @Disabled tests:
- ChangeSetExtent(Extent, ChangeSet, boolean) ignores its 'enabled' argument
- MultiStageReorder keeps earlier writes to a position in a different stage,
so the last write does not always win (36439f7a by albert pham)
Add parser tests and mask/pattern algebra tests
Table-driven tests for DefaultBlockParser (including the #3017 bracket
and NBT handling), DefaultItemParser, and the mask and pattern parsers,
plus algebraic-law tests for MaskIntersection/MaskUnion/Masks.negate,
OffsetMask, OffsetsMask, BoundedHeightMask and RandomPattern weights, and
quoted-argument cases for CommandArgParser.
TestBlockRegistry now returns a minimal BlockMaterial (air vs solid) so
existence masks work.
Disabled tests record suspected bugs: empty block state list, malformed
noise masks escaping as NumberFormatException, TypeApplyingPattern state
carry-over, and the empty MaskIntersection result. (c5481ac3 by albert pham)
Add real-block-state test fixture and re-enable BlockTransformExtentTest
Add TestBlockRegistry, TestRegistries and TestWorld plus test-blocks.json
(50 blocks with real properties) so core tests no longer run against
property-less blocks. BaseWorldEditTest now uses TestRegistries.
Re-enable BlockTransformExtentTest on top of BaseWorldEditTest, fix its
loop (it transformed the base state each pass), and check rotation and
flip round-trips for every state of every fixture block. Add known-state
transform tables and BlockState.with/getAllStates/FuzzyBlockState tests.
Four real bugs found by the new tests are recorded as @Disabled tests:
rail NPE on X/Z rotation, crafter orientation loss on Z rotation,
down-facing hopper under vertical flip, door hinge not swapped on mirror. (acbadc6e by albert pham)
Add tests for visitors, collections, interpolation, noise, Direction and TargetBlock
- Visitors are compared against a reference flood fill over random masks
(uniqueness, breadth-first order, directions/diagonals, determinism).
- Int2BaseBlockMap is checked against a HashMap model; DoubleArrayList
against ArrayList.
- Direction, TargetBlock ray cases, interpolation and noise invariants.
Four tests are @Disabled because they expose production bugs, which are
intentionally not fixed here:
- LinearInterpolation throws IndexOutOfBounds at t=1.0 (getPosition,
arcLength) and with a single node.
- KochanekBartelsInterpolation.arcLength skips the last trapezoid sample
and underestimates by about 1/8.
- ReparametrisingInterpolation.get1stDerivative returns NaN for
zero-length curves. (c34693cd by albert pham)
Add region contract, cuboid, degenerate-shape and selector tests
- RegionContractTest: one parameterised contract (iterator count vs volume,
contains vs iterator, bounding box, chunks/chunk cubes, shift, expand/contract,
clone, flat-region agreement) over Cuboid, Cylinder, Ellipsoid, ConvexPolyhedral,
Polygonal2D, RegionIntersection (incl. walls/faces) and TransformRegion.
- CuboidRegionTest: dimensions/overflow, world Y clamping, expand/contract
direction, faces/walls, chunks, jqwik properties.
- RegionDegenerateShapesTest: undefined/planar hulls, zero/negative height.
- RegionSelectorStateTest: select/clear/isDefined/IncompleteRegionException
state machine for every RegionSelectorType with a mocked World.
- BaseWorldEditTest now stubs the platform's TranslationManager so
WorldEditException subclasses can be constructed in tests.
Bugs found are reproduced in @Disabled tests (production code untouched):
AbstractRegion.getChunks only scans the lowest Y layer; AbstractRegion.getVolume
overflows int subtraction; CuboidRegion iterator breaks at Integer.MIN/MAX_VALUE;
ConvexPolyhedralRegion leaves a stale lastTriangle after addVertex; fractional
radius bounding boxes in Cylinder/Ellipsoid; Cylinder/Ellipsoid contract()
direction flipped and radius clamp grows small shapes; negative cylinder
height; TransformRegion bounds under rotation; RegionIntersection volume is its
bounding box; empty/triangle convex hulls; selector vertex limit off by one and
getPrimaryPosition not throwing. (5e7a7e97 by albert pham)
Add unit tests for transforms and vector math
jqwik property tests plus example tests for AffineTransform,
CombinedTransform, ScaleAndTranslateTransform, Transforms, Vector2,
Vector3, BlockVector2 and MathUtils.
AffineTransformTest has one @Disabled test: the deprecated 9-element
AffineTransform constructor (indexCoeffs) puts the zero holes at indices
3, 6, 9 instead of 3, 7, 11. Production code is unchanged. (a3609f00 by albert pham)