fix: update tests for silent CampaignConfig OnEnable + Linux SaveSystem

This commit is contained in:
2026-08-25 23:10:25 -03:00
parent a732464614
commit d7943b6b1c
4 changed files with 22 additions and 14 deletions
@@ -5,8 +5,8 @@ using UnityEngine.TestTools;
/// <summary> /// <summary>
/// Cobertura de las ramas de error de CampaignConfig.LoadFromJson: /// Cobertura de las ramas de error de CampaignConfig.LoadFromJson:
/// JSON válido sin capítulos y JSON malformado (excepción de parseo). /// JSON válido sin capítulos y JSON malformado (excepción de parseo).
/// Nota: CreateInstance dispara OnEnable → LoadFromJson sin fuente, que /// Nota: CreateInstance dispara OnEnable pero es silencioso cuando no
/// loguea Error; por eso el flag de logs se activa antes de instanciar. /// hay fuente JSON asignada.
/// </summary> /// </summary>
[TestFixture] [TestFixture]
[Category("Unit")] [Category("Unit")]
@@ -22,9 +22,8 @@ public class CampaignConfigCoverageTests
private CampaignConfig CreateUnloadedConfig() private CampaignConfig CreateUnloadedConfig()
{ {
// CreateInstance dispara OnEnable → LoadFromJson sin fuente (Error): // CreateInstance dispara OnEnable → LoadFromJson sin fuente.
// se espera explícitamente porque ignoreFailingMessages en SetUp no persiste. // OnEnable es silencioso cuando no hay fuente asignada (sin error log).
LogAssert.Expect(LogType.Error, "[CampaignConfig] No se asignó archivo JSON de campaña.");
return ScriptableObject.CreateInstance<CampaignConfig>(); return ScriptableObject.CreateInstance<CampaignConfig>();
} }
@@ -40,8 +40,7 @@ namespace AjedrezPurgatorio.Tests.Unit.Campaign
// Carga el registry desde Resources/Campaigns igual que Awake, // Carga el registry desde Resources/Campaigns igual que Awake,
// pero sin singleton ni DontDestroyOnLoad (incompatibles con EditMode). // pero sin singleton ni DontDestroyOnLoad (incompatibles con EditMode).
// Sin _campaignConfig asignado, LoadFromJson registra un error esperado. // OnEnable es silencioso cuando no hay fuente JSON asignada.
LogAssert.Expect(LogType.Error, "[CampaignConfig] No se asignó archivo JSON de campaña.");
_buildRegistryMethod.Invoke(_manager, null); _buildRegistryMethod.Invoke(_manager, null);
} }
@@ -68,8 +67,6 @@ namespace AjedrezPurgatorio.Tests.Unit.Campaign
int countAfterFirstBuild = _manager.CampaignCount; int countAfterFirstBuild = _manager.CampaignCount;
// BuildCampaignRegistry limpia y reconstruye; los duplicados se descartan. // BuildCampaignRegistry limpia y reconstruye; los duplicados se descartan.
// El rebuild repite el log de config sin JSON (el Expect del SetUp ya se consumió).
LogAssert.Expect(LogType.Error, "[CampaignConfig] No se asignó archivo JSON de campaña.");
_buildRegistryMethod.Invoke(_manager, null); _buildRegistryMethod.Invoke(_manager, null);
Assert.AreEqual(countAfterFirstBuild, _manager.CampaignCount, Assert.AreEqual(countAfterFirstBuild, _manager.CampaignCount,
@@ -70,8 +70,8 @@ public class CampaignManagerCoverageTests
private CampaignConfig MakeConfigFromJson(string json) private CampaignConfig MakeConfigFromJson(string json)
{ {
// CreateInstance dispara OnEnable → LoadFromJson sin fuente (Error esperado). // CreateInstance dispara OnEnable → LoadFromJson sin fuente.
LogAssert.Expect(LogType.Error, "[CampaignConfig] No se asignó archivo JSON de campaña."); // OnEnable es silencioso cuando no hay fuente JSON asignada.
var config = ScriptableObject.CreateInstance<CampaignConfig>(); var config = ScriptableObject.CreateInstance<CampaignConfig>();
config.SetJsonSource(new TextAsset(json)); config.SetJsonSource(new TextAsset(json));
config.LoadFromJson(); config.LoadFromJson();
@@ -96,8 +96,8 @@ public class CampaignManagerCoverageTests
typeof(CampaignManager).GetField("_campaignConfig", Flags) typeof(CampaignManager).GetField("_campaignConfig", Flags)
.SetValue(_manager, inspectorConfig); .SetValue(_manager, inspectorConfig);
// La config del Inspector se añade SIN log (línea 165-166); los // La config del Inspector se añade SIN log; los recursos de
// recursos de Resources sí emiten Error (OnEnable) + Log (registro). // Resources se registran al BuildCampaignRegistry (OnEnable silencioso).
LogAssert.ignoreFailingMessages = true; LogAssert.ignoreFailingMessages = true;
InvokePrivate("BuildCampaignRegistry"); InvokePrivate("BuildCampaignRegistry");
LogAssert.ignoreFailingMessages = false; LogAssert.ignoreFailingMessages = false;
@@ -293,7 +293,19 @@ namespace AjedrezPurgatorio.Tests.Unit.Meta
{ {
LogAssert.ignoreFailingMessages = false; LogAssert.ignoreFailingMessages = false;
} }
Assert.IsFalse(result, "Borrar un archivo bloqueado debe fallar controlado.");
// Linux file locking is advisory — File.Delete may succeed.
if (Application.platform == RuntimePlatform.LinuxEditor ||
Application.platform == RuntimePlatform.LinuxPlayer)
{
Assert.IsTrue(result,
"Linux: File.Delete succeeds despite FileShare.None (advisory locking).");
}
else
{
Assert.IsFalse(result,
"Windows: Borrar un archivo bloqueado debe fallar controlado.");
}
} }
} }