This commit is contained in:
2026-07-09 21:33:33 +02:00
commit 84a2a365f3
2364 changed files with 950134 additions and 0 deletions
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 11cc6192c6cd42d19560cefcf16cd996
timeCreated: 1674058607
@@ -0,0 +1,111 @@
using System.Collections.Generic;
using System.Linq;
using NUnit.Framework;
using Sirenix.Utilities;
using Test.Util;
using UnityEditor;
using UnityEngine;
using VOID.ScriptableObjects;
namespace Test.EditMode.GameData.Generic
{
public class AbilityQualityTest
{
private List<AbilityQuality> _qualities = new();
[OneTimeSetUp]
public void Setup()
{
AssetDatabase.FindAssets($"t:{nameof(AbilityQuality)}").ForEach(guid =>
{
var path = AssetDatabase.GUIDToAssetPath(guid);
var abilityQuality = AssetDatabase.LoadAssetAtPath<AbilityQuality>(path);
_qualities.Add(abilityQuality);
});
}
[OneTimeTearDown]
public void Cleanup()
{
_qualities.Clear();
_qualities = null;
}
[Test]
public void Index_NonNegative()
{
_qualities.ForEach(quality =>
{
var assetPath = AssetDatabase.GetAssetPath(quality.GetInstanceID());
var assetHyperLink = DebugLogUtil.Hyperlink(assetPath);
if (quality.index >= 0) return;
Debug.LogError($"ScriptableObject: {assetHyperLink} index must be non negative.", quality);
});
}
[Test]
public void Index_Unique()
{
_qualities.ForEach(quality =>
{
var assetPath = AssetDatabase.GetAssetPath(quality.GetInstanceID());
var assetHyperLink = DebugLogUtil.Hyperlink(assetPath);
var other = _qualities.FirstOrDefault(other => other != quality && other.index == quality.index);
if (!other) return;
var otherPath = AssetDatabase.GetAssetPath(other.GetInstanceID());
var otherHyperLink = DebugLogUtil.Hyperlink(otherPath);
Debug.LogError($"ScriptableObject: {assetHyperLink} and {otherHyperLink} have same indexes", quality);
});
}
[Test]
public void DisplayName_IsPresent()
{
_qualities.ForEach(quality =>
{
var assetPath = AssetDatabase.GetAssetPath(quality.GetInstanceID());
var assetHyperLink = DebugLogUtil.Hyperlink(assetPath);
if (quality.displayName.IsNullOrWhitespace())
Debug.LogError($"ScriptableObject: {assetHyperLink} description is empty.", quality);
});
}
[Test]
public void Color_IsPresent()
{
_qualities.ForEach(quality =>
{
var assetPath = AssetDatabase.GetAssetPath(quality.GetInstanceID());
var assetHyperLink = DebugLogUtil.Hyperlink(assetPath);
if (quality.color == default)
Debug.LogError($"ScriptableObject: {assetHyperLink} color is not selected.", quality);
});
}
[Test]
public void Background_IsPresent()
{
_qualities.ForEach(quality =>
{
var assetPath = AssetDatabase.GetAssetPath(quality.GetInstanceID());
var assetHyperLink = DebugLogUtil.Hyperlink(assetPath);
if (!quality.background)
Debug.LogError($"ScriptableObject: {assetHyperLink} background is not selected.", quality);
});
}
[Test]
public void Border_IsPresent()
{
_qualities.ForEach(quality =>
{
var assetPath = AssetDatabase.GetAssetPath(quality.GetInstanceID());
var assetHyperLink = DebugLogUtil.Hyperlink(assetPath);
if (!quality.border)
Debug.LogError($"ScriptableObject: {assetHyperLink} background is not selected.", quality);
});
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 332f1ca717d04512abc671d6605b1417
timeCreated: 1696349633
@@ -0,0 +1,167 @@
using System.Collections.Generic;
using NUnit.Framework;
using Sirenix.Utilities;
using Test.Util;
using UnityEditor;
using UnityEngine;
using VOID.Generic.Dict.Ability;
using VOID.ScriptableObjects.Abilities;
namespace Test.EditMode.GameData.Generic
{
public class BasicAbilityTest
{
private List<BasicAbility> _abilities = new();
[OneTimeSetUp]
public void Setup()
{
AssetDatabase.FindAssets($"t:{nameof(BasicAbility)}").ForEach(guid =>
{
var path = AssetDatabase.GUIDToAssetPath(guid);
var ability = AssetDatabase.LoadAssetAtPath<BasicAbility>(path);
_abilities.Add(ability);
});
}
[OneTimeTearDown]
public void Cleanup()
{
_abilities.Clear();
_abilities = null;
}
[Test]
public void FileNameSuffix_MatchesAbility()
{
_abilities.ForEach(ability =>
{
var assetPath = AssetDatabase.GetAssetPath(ability.GetInstanceID());
var assetHyperLink = DebugLogUtil.Hyperlink(assetPath);
if (assetPath.EndsWith("Ability.asset")) return;
Debug.LogError($"ScriptableObject: {assetHyperLink} does not ends with 'Ability'",
ability);
});
}
[Test]
public void DisplayName_IsPresent()
{
_abilities.ForEach(ability =>
{
var assetPath = AssetDatabase.GetAssetPath(ability.GetInstanceID());
var assetHyperLink = DebugLogUtil.Hyperlink(assetPath);
if (ability.displayName.IsNullOrWhitespace())
Debug.LogError($"ScriptableObject: {assetHyperLink} display name is empty",
ability);
});
}
[Test]
public void DisplayIcon_IsPresent()
{
_abilities.ForEach(ability =>
{
var assetPath = AssetDatabase.GetAssetPath(ability.GetInstanceID());
var assetHyperLink = DebugLogUtil.Hyperlink(assetPath);
if (!ability.displayIcon)
Debug.LogError($"ScriptableObject: {assetHyperLink} display icon is not selected",
ability);
});
}
[Test]
public void Quality_IsPresent()
{
_abilities.ForEach(ability =>
{
var assetPath = AssetDatabase.GetAssetPath(ability.GetInstanceID());
var assetHyperLink = DebugLogUtil.Hyperlink(assetPath);
if (!ability.quality)
Debug.LogError($"ScriptableObject: {assetHyperLink} quality is not selected",
ability);
});
}
[Test]
public void CastingAnimationList_IsPresent()
{
_abilities.ForEach(ability =>
{
if (ability is BasicAttackAbility) return;
var assetPath = AssetDatabase.GetAssetPath(ability.GetInstanceID());
var assetHyperLink = DebugLogUtil.Hyperlink(assetPath);
if (!ability.castingAnimationList && ability.aimingType != AbilityAimingType.Blank)
Debug.LogError($"ScriptableObject: {assetHyperLink} casting animation is not selected",
ability);
});
}
[Test]
public void AbilityAnimationList_IsPresent()
{
_abilities.ForEach(ability =>
{
var assetPath = AssetDatabase.GetAssetPath(ability.GetInstanceID());
var assetHyperLink = DebugLogUtil.Hyperlink(assetPath);
if (!ability.abilityAnimationList && ability.castingType != AbilityCastingType.Instant)
Debug.LogError($"ScriptableObject: {assetHyperLink} ability animation is not selected",
ability);
});
}
[Test]
public void Range_MinimalRange()
{
_abilities.ForEach(ability =>
{
var assetPath = AssetDatabase.GetAssetPath(ability.GetInstanceID());
var assetHyperLink = DebugLogUtil.Hyperlink(assetPath);
if (ability.range < 1f)
Debug.LogError($"ScriptableObject: {assetHyperLink} range cant be lesser than 1",
ability);
});
}
[Test]
public void Range_IsMelee()
{
_abilities.ForEach(ability =>
{
var assetPath = AssetDatabase.GetAssetPath(ability.GetInstanceID());
var assetHyperLink = DebugLogUtil.Hyperlink(assetPath);
if (!ability.isRanged && ability.range > 1f)
Debug.LogError($"ScriptableObject: {assetHyperLink} isRanged=false, range need to be '1'",
ability);
});
}
[Test]
public void CastUsages_AtLeastOne()
{
_abilities.ForEach(ability =>
{
var assetPath = AssetDatabase.GetAssetPath(ability.GetInstanceID());
var assetHyperLink = DebugLogUtil.Hyperlink(assetPath);
if (ability.castUsages < 1)
Debug.LogError($"ScriptableObject: {assetHyperLink} cast usages cant be lesser than 1",
ability);
});
}
[Test]
public void Projectile_IsPresent()
{
_abilities.ForEach(ability =>
{
var assetPath = AssetDatabase.GetAssetPath(ability.GetInstanceID());
var assetHyperLink = DebugLogUtil.Hyperlink(assetPath);
if (!ability.projectile)
Debug.LogError($"ScriptableObject: {assetHyperLink} projectile is not selected",
ability);
});
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: e075d9cd598242119cfedeb3ff9c9b9e
timeCreated: 1696336275
@@ -0,0 +1,60 @@
using System.Collections.Generic;
using NUnit.Framework;
using Sirenix.Utilities;
using Test.Util;
using UnityEditor;
using UnityEngine;
using VOID.ScriptableObjects.Abilities;
namespace Test.EditMode.GameData.Generic
{
public class BasicAttackAbilityTest
{
private List<BasicAttackAbility> _abilities = new();
[OneTimeSetUp]
public void Setup()
{
AssetDatabase.FindAssets($"t:{nameof(BasicAttackAbility)}").ForEach(guid =>
{
var path = AssetDatabase.GUIDToAssetPath(guid);
var ability = AssetDatabase.LoadAssetAtPath<BasicAttackAbility>(path);
_abilities.Add(ability);
});
}
[OneTimeTearDown]
public void Cleanup()
{
_abilities.Clear();
_abilities = null;
}
[Test]
public void CastingAnimationList_IsEmpty()
{
_abilities.ForEach(ability =>
{
var assetPath = AssetDatabase.GetAssetPath(ability.GetInstanceID());
var assetHyperLink = DebugLogUtil.Hyperlink(assetPath);
if (ability.castingAnimationList)
Debug.LogError($"ScriptableObject: {assetHyperLink} casting animation is selected. Basic Attack dont use that",
ability);
});
}
[Test]
public void CastUsages_MustBeOne()
{
_abilities.ForEach(ability =>
{
var assetPath = AssetDatabase.GetAssetPath(ability.GetInstanceID());
var assetHyperLink = DebugLogUtil.Hyperlink(assetPath);
if (ability.castUsages != 1)
Debug.LogError($"ScriptableObject: {assetHyperLink} cast usages for basic attack must be 1.", ability);
});
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: dbd8ec73e98f42eab056944704f993f3
timeCreated: 1696348907
@@ -0,0 +1,83 @@
using System.Collections.Generic;
using NUnit.Framework;
using Sirenix.Utilities;
using Test.Util;
using UnityEditor;
using UnityEngine;
using VOID.ScriptableObjects;
namespace Test.EditMode.GameData.Generic
{
public class BasicStatusTest
{
private List<BasicStatus> _statuses = new();
[OneTimeSetUp]
public void Setup()
{
AssetDatabase.FindAssets($"t:{nameof(BasicStatus)}").ForEach(guid =>
{
var path = AssetDatabase.GUIDToAssetPath(guid);
var status = AssetDatabase.LoadAssetAtPath<BasicStatus>(path);
_statuses.Add(status);
});
}
[OneTimeTearDown]
public void Cleanup()
{
_statuses.Clear();
_statuses = null;
}
[Test]
public void DisplayName_IsPresent()
{
_statuses.ForEach(status =>
{
var assetPath = AssetDatabase.GetAssetPath(status.GetInstanceID());
var assetHyperLink = DebugLogUtil.Hyperlink(assetPath);
if (status.displayName.IsNullOrWhitespace())
Debug.LogError($"ScriptableObject: {assetHyperLink} display name is empty.", status);
});
}
[Test]
public void DisplayIcon_IsPresent()
{
_statuses.ForEach(status =>
{
var assetPath = AssetDatabase.GetAssetPath(status.GetInstanceID());
var assetHyperLink = DebugLogUtil.Hyperlink(assetPath);
if (!status.displayIcon)
Debug.LogError($"ScriptableObject: {assetHyperLink} display icon is not selected.", status);
});
}
[Test]
public void Description_IsPresent()
{
_statuses.ForEach(status =>
{
var assetPath = AssetDatabase.GetAssetPath(status.GetInstanceID());
var assetHyperLink = DebugLogUtil.Hyperlink(assetPath);
if (status.description.IsNullOrWhitespace())
Debug.LogError($"ScriptableObject: {assetHyperLink} description is empty.", status);
});
}
[Test]
public void DurationInTurns_NonNegative()
{
_statuses.ForEach(status =>
{
var assetPath = AssetDatabase.GetAssetPath(status.GetInstanceID());
var assetHyperLink = DebugLogUtil.Hyperlink(assetPath);
if (status.durationInTurns < 0)
Debug.LogError($"ScriptableObject: {assetHyperLink} duration cannot be negative.", status);
});
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 406fa6094ae64866a728187659e5c1fe
timeCreated: 1696351487
@@ -0,0 +1,111 @@
using System.Collections.Generic;
using System.Linq;
using NUnit.Framework;
using Sirenix.Utilities;
using Test.Util;
using UnityEditor;
using UnityEngine;
using VOID.ScriptableObjects;
namespace Test.EditMode.GameData.Generic
{
public class ItemQualityTest
{
private List<ItemQuality> _qualities = new();
[OneTimeSetUp]
public void Setup()
{
AssetDatabase.FindAssets($"t:{nameof(ItemQuality)}").ForEach(guid =>
{
var path = AssetDatabase.GUIDToAssetPath(guid);
var itemQuality = AssetDatabase.LoadAssetAtPath<ItemQuality>(path);
_qualities.Add(itemQuality);
});
}
[OneTimeTearDown]
public void Cleanup()
{
_qualities.Clear();
_qualities = null;
}
[Test]
public void Index_NonNegative()
{
_qualities.ForEach(quality =>
{
var assetPath = AssetDatabase.GetAssetPath(quality.GetInstanceID());
var assetHyperLink = DebugLogUtil.Hyperlink(assetPath);
if (quality.index >= 0) return;
Debug.LogError($"ScriptableObject: {assetHyperLink} index must be non negative.", quality);
});
}
[Test]
public void Index_Unique()
{
_qualities.ForEach(quality =>
{
var assetPath = AssetDatabase.GetAssetPath(quality.GetInstanceID());
var assetHyperLink = DebugLogUtil.Hyperlink(assetPath);
var other = _qualities.FirstOrDefault(other => other != quality && other.index == quality.index);
if (!other) return;
var otherPath = AssetDatabase.GetAssetPath(other.GetInstanceID());
var otherHyperLink = DebugLogUtil.Hyperlink(otherPath);
Debug.LogError($"ScriptableObject: {assetHyperLink} and {otherHyperLink} have same indexes", quality);
});
}
[Test]
public void DisplayName_IsPresent()
{
_qualities.ForEach(quality =>
{
var assetPath = AssetDatabase.GetAssetPath(quality.GetInstanceID());
var assetHyperLink = DebugLogUtil.Hyperlink(assetPath);
if (quality.displayName.IsNullOrWhitespace())
Debug.LogError($"ScriptableObject: {assetHyperLink} description is empty.", quality);
});
}
[Test]
public void Color_IsPresent()
{
_qualities.ForEach(quality =>
{
var assetPath = AssetDatabase.GetAssetPath(quality.GetInstanceID());
var assetHyperLink = DebugLogUtil.Hyperlink(assetPath);
if (quality.color == default)
Debug.LogError($"ScriptableObject: {assetHyperLink} color is not selected.", quality);
});
}
[Test]
public void Background_IsPresent()
{
_qualities.ForEach(quality =>
{
var assetPath = AssetDatabase.GetAssetPath(quality.GetInstanceID());
var assetHyperLink = DebugLogUtil.Hyperlink(assetPath);
if (!quality.background)
Debug.LogError($"ScriptableObject: {assetHyperLink} background is not selected.", quality);
});
}
[Test]
public void Border_IsPresent()
{
_qualities.ForEach(quality =>
{
var assetPath = AssetDatabase.GetAssetPath(quality.GetInstanceID());
var assetHyperLink = DebugLogUtil.Hyperlink(assetPath);
if (!quality.border)
Debug.LogError($"ScriptableObject: {assetHyperLink} background is not selected.", quality);
});
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 04cf53f4fd644bd6bacaae68906b6663
timeCreated: 1696350570