From 5509a148599c2590b96fb4db3c5914c68088a4db Mon Sep 17 00:00:00 2001 From: Orkun Manap <31966136+manaporkun@users.noreply.github.com> Date: Tue, 2 Jun 2026 01:17:39 +0200 Subject: [PATCH] test: cover TransformGroup apply paths (positions + scales) Adds PlayMode coverage for the previously-untested multi-target apply methods: - UpdatePositions offsets every member by the delta - UpdateScales pivot-origin adds to localScale and leaves position - UpdateScales center-origin (IsOriginOnCenter + renderer branch) scales a centered cube in place --- .../Tests/Runtime/TransformGroupTests.cs | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/Packages/com.orkunmanap.runtime-transform-handles/Tests/Runtime/TransformGroupTests.cs b/Packages/com.orkunmanap.runtime-transform-handles/Tests/Runtime/TransformGroupTests.cs index c66f0c4..dc62f13 100644 --- a/Packages/com.orkunmanap.runtime-transform-handles/Tests/Runtime/TransformGroupTests.cs +++ b/Packages/com.orkunmanap.runtime-transform-handles/Tests/Runtime/TransformGroupTests.cs @@ -46,6 +46,15 @@ private Ghost NewGhost(Vector3 position) return go.AddComponent(); } + private GameObject NewCube(string name, Vector3 position) + { + var go = GameObject.CreatePrimitive(PrimitiveType.Cube); + go.name = name; + go.transform.position = position; + _spawned.Add(go); + return go; + } + [Test] public void AddTransform_accepts_unrelated_targets() { @@ -185,5 +194,51 @@ public void UpdateRotations_world_space_rotates_all_members_around_ghost() Assert.That(Vector3.Distance(a.position, new Vector3(0f, 0f, -1f)), Is.LessThan(1e-4f)); Assert.That(Vector3.Distance(b.position, new Vector3(1f, 0f, 0f)), Is.LessThan(1e-4f)); } + + [Test] + public void UpdatePositions_offsets_all_members_by_the_delta() + { + var group = NewGroup(); + var a = NewObject("a", new Vector3(1f, 2f, 3f)).transform; + var b = NewObject("b", new Vector3(-4f, 0f, 0f)).transform; + group.AddTransform(a); + group.AddTransform(b); + + group.UpdatePositions(new Vector3(0f, 5f, 0f)); + + Assert.That(Vector3.Distance(a.position, new Vector3(1f, 7f, 3f)), Is.LessThan(1e-4f)); + Assert.That(Vector3.Distance(b.position, new Vector3(-4f, 5f, 0f)), Is.LessThan(1e-4f)); + } + + [Test] + public void UpdateScales_pivot_origin_adds_to_local_scale_and_keeps_position() + { + var group = NewGroup(); + group.IsOriginOnCenter = false; + var t = NewObject("t", new Vector3(2f, 0f, 0f)).transform; // no renderer -> pivot path + group.AddTransform(t); + + group.UpdateScales(new Vector3(0.5f, 0.5f, 0.5f)); + + Assert.That(Vector3.Distance(t.localScale, new Vector3(1.5f, 1.5f, 1.5f)), Is.LessThan(1e-4f)); + Assert.That(Vector3.Distance(t.position, new Vector3(2f, 0f, 0f)), Is.LessThan(1e-4f)); + } + + [Test] + public void UpdateScales_center_origin_scales_centered_cube_without_moving_it() + { + // A primitive cube's mesh is centered on its transform, so center-origin scaling needs + // no position compensation — exercises the IsOriginOnCenter + renderer branch and + // confirms a centered object stays put while its scale grows. + var group = NewGroup(); + group.IsOriginOnCenter = true; + var cube = NewCube("cube", new Vector3(3f, 0f, 0f)).transform; // has MeshRenderer + group.AddTransform(cube); + + group.UpdateScales(new Vector3(1f, 1f, 1f)); + + Assert.That(Vector3.Distance(cube.localScale, new Vector3(2f, 2f, 2f)), Is.LessThan(1e-3f)); + Assert.That(Vector3.Distance(cube.position, new Vector3(3f, 0f, 0f)), Is.LessThan(1e-3f)); + } } }