[Test] Add unit tests for base code

This commit is contained in:
Michal Pikulski
2025-09-14 13:35:35 +02:00
parent 8cffe0b161
commit 15414f9414
19 changed files with 957 additions and 2 deletions

View File

@@ -0,0 +1,188 @@
using NUnit.Framework;
using UnityEngine;
using Utils;
using UnityEngine.TestTools;
namespace Tests.EditMode
{
public class AppleHillsUtilsTests
{
private GameObject sourceObject;
private GameObject targetObject;
private SpriteRenderer sourceRenderer;
private SpriteRenderer targetRenderer;
private Sprite testSprite1;
private Sprite testSprite2;
private Material testMaterial1;
private Material testMaterial2;
[SetUp]
public void SetUp()
{
// Create test GameObjects with SpriteRenderer components
sourceObject = new GameObject("SourceObject");
targetObject = new GameObject("TargetObject");
sourceRenderer = sourceObject.AddComponent<SpriteRenderer>();
targetRenderer = targetObject.AddComponent<SpriteRenderer>();
// Create test sprites (1x1 pixel textures)
Texture2D texture1 = new Texture2D(1, 1);
texture1.SetPixel(0, 0, Color.red);
texture1.Apply();
testSprite1 = Sprite.Create(texture1, new Rect(0, 0, 1, 1), Vector2.zero);
Texture2D texture2 = new Texture2D(1, 1);
texture2.SetPixel(0, 0, Color.blue);
texture2.Apply();
testSprite2 = Sprite.Create(texture2, new Rect(0, 0, 1, 1), Vector2.zero);
// Create test materials
testMaterial1 = new Material(Shader.Find("Sprites/Default"));
testMaterial1.name = "TestMaterial1";
testMaterial2 = new Material(Shader.Find("Sprites/Default"));
testMaterial2.name = "TestMaterial2";
// Initialize target with different values to ensure they change
targetRenderer.sprite = testSprite2;
targetRenderer.color = Color.blue;
targetRenderer.flipX = true;
targetRenderer.flipY = true;
targetRenderer.sharedMaterial = testMaterial2;
targetRenderer.drawMode = SpriteDrawMode.Tiled;
targetRenderer.size = new Vector2(10, 10);
targetRenderer.maskInteraction = SpriteMaskInteraction.VisibleInsideMask;
targetRenderer.sortingOrder = 10;
targetRenderer.enabled = false;
targetObject.transform.localScale = new Vector3(2, 2, 2);
}
[TearDown]
public void TearDown()
{
// Clean up created objects
Object.DestroyImmediate(sourceObject);
Object.DestroyImmediate(targetObject);
Object.DestroyImmediate(testSprite1);
Object.DestroyImmediate(testSprite2);
Object.DestroyImmediate(testMaterial1);
Object.DestroyImmediate(testMaterial2);
}
[Test]
public void CopySpriteRendererProperties_CopiesAllProperties()
{
// Arrange - Set source properties
sourceRenderer.sprite = testSprite1;
sourceRenderer.color = Color.red;
sourceRenderer.flipX = false;
sourceRenderer.flipY = false;
sourceRenderer.sharedMaterial = testMaterial1;
sourceRenderer.drawMode = SpriteDrawMode.Simple;
sourceRenderer.size = new Vector2(5, 5);
sourceRenderer.maskInteraction = SpriteMaskInteraction.VisibleOutsideMask;
sourceRenderer.sortingOrder = 5;
sourceRenderer.enabled = true;
sourceObject.transform.localScale = new Vector3(1, 1, 1);
// Act
AppleHillsUtils.CopySpriteRendererProperties(sourceRenderer, targetRenderer);
// Assert
Assert.AreEqual(sourceRenderer.sprite, targetRenderer.sprite, "Sprite should be copied");
Assert.AreEqual(sourceRenderer.color, targetRenderer.color, "Color should be copied");
Assert.AreEqual(sourceRenderer.flipX, targetRenderer.flipX, "FlipX should be copied");
Assert.AreEqual(sourceRenderer.flipY, targetRenderer.flipY, "FlipY should be copied");
Assert.AreEqual(sourceRenderer.sharedMaterial, targetRenderer.sharedMaterial, "Material should be copied");
Assert.AreEqual(sourceRenderer.drawMode, targetRenderer.drawMode, "DrawMode should be copied");
Assert.AreEqual(sourceRenderer.size, targetRenderer.size, "Size should be copied");
Assert.AreEqual(sourceRenderer.maskInteraction, targetRenderer.maskInteraction, "MaskInteraction should be copied");
Assert.AreEqual(sourceRenderer.sortingLayerID, targetRenderer.sortingLayerID, "SortingLayerID should be copied");
Assert.AreEqual(sourceRenderer.sortingOrder, targetRenderer.sortingOrder, "SortingOrder should be copied");
Assert.IsTrue(targetRenderer.enabled, "Enabled should be set to true");
Assert.AreEqual(sourceRenderer.transform.localScale, targetRenderer.transform.localScale, "LocalScale should be copied");
}
[Test]
public void CopySpriteRendererProperties_NullSource_DoesNothing()
{
// Arrange - Store original values
var originalSprite = targetRenderer.sprite;
var originalColor = targetRenderer.color;
var originalFlipX = targetRenderer.flipX;
var originalFlipY = targetRenderer.flipY;
var originalMaterial = targetRenderer.sharedMaterial;
var originalDrawMode = targetRenderer.drawMode;
var originalSize = targetRenderer.size;
var originalMaskInteraction = targetRenderer.maskInteraction;
var originalSortingLayerID = targetRenderer.sortingLayerID;
var originalSortingOrder = targetRenderer.sortingOrder;
var originalEnabled = targetRenderer.enabled;
var originalScale = targetRenderer.transform.localScale;
// Act
AppleHillsUtils.CopySpriteRendererProperties(null, targetRenderer);
// Assert - Nothing should change
Assert.AreEqual(originalSprite, targetRenderer.sprite, "Sprite should not change");
Assert.AreEqual(originalColor, targetRenderer.color, "Color should not change");
Assert.AreEqual(originalFlipX, targetRenderer.flipX, "FlipX should not change");
Assert.AreEqual(originalFlipY, targetRenderer.flipY, "FlipY should not change");
Assert.AreEqual(originalMaterial, targetRenderer.sharedMaterial, "Material should not change");
Assert.AreEqual(originalDrawMode, targetRenderer.drawMode, "DrawMode should not change");
Assert.AreEqual(originalSize, targetRenderer.size, "Size should not change");
Assert.AreEqual(originalMaskInteraction, targetRenderer.maskInteraction, "MaskInteraction should not change");
Assert.AreEqual(originalSortingLayerID, targetRenderer.sortingLayerID, "SortingLayerID should not change");
Assert.AreEqual(originalSortingOrder, targetRenderer.sortingOrder, "SortingOrder should not change");
Assert.AreEqual(originalEnabled, targetRenderer.enabled, "Enabled should not change");
Assert.AreEqual(originalScale, targetRenderer.transform.localScale, "LocalScale should not change");
}
[Test]
public void CopySpriteRendererProperties_NullTarget_DoesNotThrow()
{
// Arrange
sourceRenderer.sprite = testSprite1;
// Act & Assert - Should not throw an exception
Assert.DoesNotThrow(() => AppleHillsUtils.CopySpriteRendererProperties(sourceRenderer, null));
}
[Test]
public void CopySpriteRendererProperties_BothNull_DoesNotThrow()
{
// Act & Assert - Should not throw an exception
Assert.DoesNotThrow(() => AppleHillsUtils.CopySpriteRendererProperties(null, null));
}
[Test]
public void CopySpriteRendererProperties_DifferentProperties_CorrectlyCopies()
{
// Arrange - Set source with mixed properties
sourceRenderer.sprite = testSprite1;
sourceRenderer.color = new Color(0.5f, 0.5f, 0.5f, 0.7f); // Semi-transparent gray
sourceRenderer.flipX = true;
sourceRenderer.flipY = false;
sourceRenderer.sharedMaterial = testMaterial1;
sourceRenderer.drawMode = SpriteDrawMode.Sliced;
sourceRenderer.size = new Vector2(3.5f, 2.5f);
sourceRenderer.sortingOrder = 42;
sourceObject.transform.localScale = new Vector3(0.5f, 1.5f, 1f); // Non-uniform scale
// The exact warning message format matters - match it precisely
LogAssert.Expect(LogType.Warning, "Sprite Tiling might not appear correctly because the Sprite used is not generated with Full Rect. To fix this, change the Mesh Type in the Sprite's import setting to Full Rect");
// Act
AppleHillsUtils.CopySpriteRendererProperties(sourceRenderer, targetRenderer);
// Assert
Assert.AreEqual(testSprite1, targetRenderer.sprite, "Sprite should match");
Assert.AreEqual(new Color(0.5f, 0.5f, 0.5f, 0.7f), targetRenderer.color, "Color should match including alpha");
Assert.IsTrue(targetRenderer.flipX, "FlipX should be true");
Assert.IsFalse(targetRenderer.flipY, "FlipY should be false");
Assert.AreEqual(SpriteDrawMode.Sliced, targetRenderer.drawMode, "DrawMode should be Sliced");
Assert.AreEqual(new Vector2(3.5f, 2.5f), targetRenderer.size, "Size should match exactly");
Assert.AreEqual(42, targetRenderer.sortingOrder, "SortingOrder should be 42");
Assert.AreEqual(new Vector3(0.5f, 1.5f, 1f), targetRenderer.transform.localScale, "Non-uniform scale should match");
}
}
}