179 lines
8.0 KiB
C#
179 lines
8.0 KiB
C#
#nullable enable
|
|
|
|
using System;
|
|
using System.Linq;
|
|
using UnityEngine;
|
|
using UVC.Data.Core;
|
|
|
|
namespace UVC.Sample.Data
|
|
{
|
|
/// <summary>
|
|
/// DataArray 기능 샘플 코드입니다.
|
|
/// DataSampleRunner Inspector에서 실행하거나 Play 버튼으로 확인합니다.
|
|
/// </summary>
|
|
public class DataArrayTests
|
|
{
|
|
private DataArray _dataArray = new DataArray();
|
|
private DataObject _item1 = new DataObject();
|
|
private DataObject _item2 = new DataObject();
|
|
private DataObject _item3 = new DataObject();
|
|
|
|
/// <summary>
|
|
/// 모든 샘플을 순차 실행합니다.
|
|
/// </summary>
|
|
public void RunAll()
|
|
{
|
|
Debug.Log("===== DataArray 샘플 시작 =====");
|
|
|
|
SetUp();
|
|
Run(nameof(Add_AddsItemToList), Add_AddsItemToList);
|
|
SetUp();
|
|
Run(nameof(Remove_RemovesItemFromList), Remove_RemovesItemFromList);
|
|
SetUp();
|
|
Run(nameof(Clear_RemovesAllItems), Clear_RemovesAllItems);
|
|
SetUp();
|
|
Run(nameof(UpdateDifferent_TracksAddsDeletesAndModifies), UpdateDifferent_TracksAddsDeletesAndModifies);
|
|
SetUp();
|
|
Run(nameof(UpdateDifferent_WithFullTracking_TracksRemovedItems), UpdateDifferent_WithFullTracking_TracksRemovedItems);
|
|
SetUp();
|
|
Run(nameof(ClearTrackedChanges_ResetsAllChangeLists), ClearTrackedChanges_ResetsAllChangeLists);
|
|
|
|
Debug.Log("===== DataArray 샘플 완료 =====");
|
|
}
|
|
|
|
private void SetUp()
|
|
{
|
|
_item1 = new DataObject { { "Id", "1" }, { "value", "A" } };
|
|
_item2 = new DataObject { { "Id", "2" }, { "value", "B" } };
|
|
_item3 = new DataObject { { "Id", "3" }, { "value", "C" } };
|
|
_dataArray = new DataArray(new[] { _item1, _item2 });
|
|
}
|
|
|
|
private void Run(string name, Action action)
|
|
{
|
|
try
|
|
{
|
|
action();
|
|
Debug.Log($"[OK] {name}");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Debug.LogError($"[FAIL] {name}\n{ex.Message}");
|
|
}
|
|
}
|
|
|
|
private static void Check(bool condition, string message)
|
|
{
|
|
if (!condition) throw new Exception($"검증 실패: {message}");
|
|
}
|
|
|
|
/// <summary>
|
|
/// Add: 아이템을 리스트에 추가합니다.
|
|
/// </summary>
|
|
public void Add_AddsItemToList()
|
|
{
|
|
_dataArray.Add(_item3);
|
|
|
|
Check(_dataArray.Count == 3, "DataArray의 전체 개수는 3이어야 합니다.");
|
|
Check(_dataArray.ToList().Contains(_item3), "_item3이 DataArray에 포함되어야 합니다.");
|
|
Check(_dataArray.AddedItems.Count == 0, "Add 메서드는 AddedItems를 직접 채우지 않아야 합니다.");
|
|
}
|
|
|
|
/// <summary>
|
|
/// Remove: 아이템을 리스트에서 제거합니다.
|
|
/// </summary>
|
|
public void Remove_RemovesItemFromList()
|
|
{
|
|
bool result = _dataArray.Remove(_item1);
|
|
|
|
Check(result, "항목 제거는 성공해야 합니다.");
|
|
Check(_dataArray.Count == 1, "DataArray의 전체 개수는 1이어야 합니다.");
|
|
Check(!_dataArray.Contains(_item1), "_item1이 DataArray에 없어야 합니다.");
|
|
Check(_dataArray.RemovedItems.Count == 0, "Remove 메서드는 RemovedItems를 직접 채우지 않아야 합니다.");
|
|
}
|
|
|
|
/// <summary>
|
|
/// Clear: 모든 아이템을 제거합니다.
|
|
/// </summary>
|
|
public void Clear_RemovesAllItems()
|
|
{
|
|
_dataArray.Clear();
|
|
|
|
Check(_dataArray.Count == 0, "DataArray는 비어있어야 합니다.");
|
|
Check(_dataArray.RemovedItems.Count == 0, "Clear 메서드는 RemovedItems를 직접 채우지 않아야 합니다.");
|
|
}
|
|
|
|
/// <summary>
|
|
/// UpdateDifferent(updatedDataOnly=true): 추가/수정만 추적하고 제거는 추적하지 않습니다.
|
|
/// updatedDataOnly=true 이면 RemovedItems가 채워지지 않으며, 컬렉션에서도 제거되지 않습니다.
|
|
/// </summary>
|
|
public void UpdateDifferent_TracksAddsDeletesAndModifies()
|
|
{
|
|
var item2Modified = new DataObject { { "Id", "2" }, { "value", "B_modified" } };
|
|
var item4New = new DataObject { { "Id", "4" }, { "value", "D" } };
|
|
var otherArray = new DataArray(new[] { item2Modified, item4New });
|
|
|
|
// updatedDataOnly=true → RemovedItems 미추적, 항목 제거 없음
|
|
_dataArray.UpdateDifferent(otherArray, true);
|
|
|
|
// updatedDataOnly=true 일 때 RemovedItems는 채워지지 않습니다.
|
|
Check(_dataArray.RemovedItems.Count == 0, "updatedDataOnly=true 이면 RemovedItems는 비어있어야 합니다.");
|
|
|
|
Check(_dataArray.AddedItems.Count == 1, "추가된 항목이 1개여야 합니다.");
|
|
Check(_dataArray.AddedItems[0].Id == "4", "추가된 항목 Id는 '4'이어야 합니다.");
|
|
|
|
Check(_dataArray.ModifiedList.Count == 1, "수정된 항목이 1개여야 합니다.");
|
|
Check(_dataArray.ModifiedList[0].Id == "2", "수정된 항목 Id는 '2'이어야 합니다.");
|
|
|
|
var updatedItem = _dataArray.First(i => i.Id == "2");
|
|
Check(updatedItem.GetString("value") == "B_modified", "수정된 항목의 값이 반영되어야 합니다.");
|
|
}
|
|
|
|
/// <summary>
|
|
/// UpdateDifferent(updatedDataOnly=false): 추가/수정/제거 모두 추적합니다.
|
|
/// </summary>
|
|
public void UpdateDifferent_WithFullTracking_TracksRemovedItems()
|
|
{
|
|
var item2Modified = new DataObject { { "Id", "2" }, { "value", "B_modified" } };
|
|
var item4New = new DataObject { { "Id", "4" }, { "value", "D" } };
|
|
var otherArray = new DataArray(new[] { item2Modified, item4New });
|
|
|
|
// updatedDataOnly=false → RemovedItems 추적, 컬렉션에서 제거됨
|
|
_dataArray.UpdateDifferent(otherArray, false);
|
|
|
|
Check(_dataArray.RemovedItems.Count == 1, "제거된 항목이 1개여야 합니다.");
|
|
Check(_dataArray.RemovedItems[0].Id == "1", "제거된 항목 Id는 '1'이어야 합니다.");
|
|
|
|
Check(_dataArray.AddedItems.Count == 1, "추가된 항목이 1개여야 합니다.");
|
|
Check(_dataArray.AddedItems[0].Id == "4", "추가된 항목 Id는 '4'이어야 합니다.");
|
|
|
|
Check(_dataArray.ModifiedList.Count == 1, "수정된 항목이 1개여야 합니다.");
|
|
Check(_dataArray.ModifiedList[0].Id == "2", "수정된 항목 Id는 '2'이어야 합니다.");
|
|
|
|
Check(_dataArray.Count == 2, "최종 컬렉션의 크기는 2여야 합니다.");
|
|
Check(!_dataArray.Any(i => i.Id == "1"), "제거된 항목이 컬렉션에 없어야 합니다.");
|
|
Check(_dataArray.Any(i => i.Id == "4"), "추가된 항목이 컬렉션에 있어야 합니다.");
|
|
|
|
var updatedItem = _dataArray.First(i => i.Id == "2");
|
|
Check(updatedItem.GetString("value") == "B_modified", "수정된 항목의 값이 반영되어야 합니다.");
|
|
}
|
|
|
|
/// <summary>
|
|
/// ClearTrackedChanges: 변경 내역을 초기화합니다.
|
|
/// </summary>
|
|
public void ClearTrackedChanges_ResetsAllChangeLists()
|
|
{
|
|
var otherArray = new DataArray(new[] { _item3 });
|
|
_dataArray.UpdateDifferent(otherArray, true);
|
|
Check(_dataArray.UpdatedCount > 0, "테스트 준비 단계에서 변경 내역이 있어야 합니다.");
|
|
|
|
_dataArray.ClearTrackedChanges();
|
|
|
|
Check(_dataArray.UpdatedCount == 0, "UpdatedCount는 0이어야 합니다.");
|
|
Check(_dataArray.AddedItems.Count == 0, "AddedItems 리스트는 비어있어야 합니다.");
|
|
Check(_dataArray.RemovedItems.Count == 0, "RemovedItems 리스트는 비어있어야 합니다.");
|
|
Check(_dataArray.ModifiedList.Count == 0, "ModifiedList 리스트는 비어있어야 합니다.");
|
|
}
|
|
}
|
|
}
|