using NUnit.Framework; using System; using Newtonsoft.Json.Linq; using UVC.Data; using UnityEngine; namespace UVC.Tests.Data { /// /// DataMapper 클래스의 테스트를 위한 테스트 클래스입니다. /// [TestFixture] public class DataMapperTests { /// /// 문자열 타입 매핑 테스트 /// [Test] public void Map_StringProperty_MapsCorrectly() { // Arrange var guide = new JObject(); guide["Name"] = "홍길동"; var source = JObject.Parse(@"{ ""Name"": ""김철수"" }"); var mapper = new DataMapper(source, guide); // Act var result = mapper.Map(); // Assert Assert.IsTrue(result.ContainsKey("Name")); Assert.AreEqual("김철수", result["Name"].ToString()); } /// /// 정수 타입 매핑 테스트 /// [Test] public void Map_IntProperty_MapsCorrectly() { // Arrange var guide = new JObject(); guide["Age"] = 25; var source = JObject.Parse(@"{ ""Age"": 30 }"); var mapper = new DataMapper(source, guide); // Act var result = mapper.Map(); // Assert Assert.IsTrue(result.ContainsKey("Age")); Assert.AreEqual(30, result["Age"].ToObject()); } /// /// 부동소수점 타입 매핑 테스트 /// [Test] public void Map_DoubleProperty_MapsCorrectly() { // Arrange var guide = new JObject(); guide["Height"] = 175.5; var source = JObject.Parse(@"{ ""Height"": 180.5 }"); var mapper = new DataMapper(source, guide); // Act var result = mapper.Map(); // Assert Assert.IsTrue(result.ContainsKey("Height")); Assert.AreEqual(180.5, result["Height"].ToObject()); } /// /// Boolean 타입 매핑 테스트 /// [Test] public void Map_BoolProperty_MapsCorrectly() { // Arrange var guide = new JObject(); guide["IsActive"] = false; var source = JObject.Parse(@"{ ""IsActive"": true }"); var mapper = new DataMapper(source, guide); // Act var result = mapper.Map(); // Assert Assert.IsTrue(result.ContainsKey("IsActive")); Assert.IsTrue(result["IsActive"].ToObject()); } /// /// DateTime 타입 매핑 테스트 /// [Test] public void Map_DateTimeProperty_MapsCorrectly() { // Arrange var guide = new JObject(); guide["BirthDate"] = JToken.FromObject(DateTime.Now); var expectedDate = new DateTime(1990, 1, 1); var source = JObject.Parse(@"{ ""BirthDate"": ""1990-01-01T00:00:00.000"" }"); var mapper = new DataMapper(source, guide); // Act var result = mapper.Map(); // Assert Assert.IsTrue(result.ContainsKey("BirthDate")); Assert.AreEqual(expectedDate, result["BirthDate"].ToObject()); } /// /// DataValueMapper 타입 매핑 테스트 /// [Test] public void Map_DataValueMapperProperty_MapsCorrectly() { // Arrange var guide = new JObject(); var valueMapper = new DataValueMapper(); valueMapper["ON"] = "활성화"; valueMapper["OFF"] = "비활성화"; guide["Status"] = JToken.FromObject(valueMapper); var source = JObject.Parse(@"{ ""Status"": ""ON"" }"); var mapper = new DataMapper(source, guide); // Act var result = mapper.Map(); // Assert Assert.IsTrue(result.ContainsKey("Status")); Assert.AreEqual("활성화", result["Status"].ToString()); } /// /// 열거형 타입 매핑 테스트 /// [Test] public void Map_EnumProperty_MapsCorrectly() { // Arrange var guide = new JObject(); guide["Status"] = JToken.FromObject(UserStatus.Inactive); var source = JObject.Parse(@"{ ""Status"": ""Active"" }"); var mapper = new DataMapper(source, guide); // Act var result = mapper.Map(); // Assert Assert.IsTrue(result.ContainsKey("Status")); Assert.AreEqual(UserStatus.Active, result["Status"].ToObject()); } /// /// 타겟에 없는 추가 속성 매핑 테스트 /// [Test] public void Map_AdditionalProperty_AddsToResult() { // Arrange var guide = new JObject(); guide["Name"] = "홍길동"; var source = JObject.Parse(@"{ ""Name"": ""김철수"", ""Email"": ""kim@example.com"" }"); var mapper = new DataMapper(source, guide); // Act var result = mapper.Map(); // Assert Assert.IsTrue(result.ContainsKey("Email")); Assert.AreEqual("kim@example.com", result["Email"].ToString()); } /// /// 유효하지 않은 DateTime 문자열 매핑 테스트 /// [Test] public void Map_InvalidDateTimeString_ReturnsNull() { // Arrange var guide = new JObject(); guide["BirthDate"] = JToken.FromObject(DateTime.Now); var source = JObject.Parse(@"{ ""BirthDate"": ""InvalidDateTime"" }"); var mapper = new DataMapper(source, guide); // Act var result = mapper.Map(); // Assert Assert.IsTrue(result.ContainsKey("BirthDate")); Assert.AreEqual(JTokenType.Null, result["BirthDate"].Type); } /// /// 복합 객체 매핑 테스트 /// [Test] public void Map_ComplexObject_MapsAllProperties() { // Arrange var guide = new JObject(); guide["Id"] = 1; guide["Name"] = "홍길동"; guide["IsActive"] = false; guide["JoinDate"] = JToken.FromObject(DateTime.Now); guide["Height"] = 175.5; guide["Status"] = JToken.FromObject(UserStatus.Inactive); string json = @"{ ""Id"": 100, ""Name"": ""김철수"", ""IsActive"": true, ""JoinDate"": ""2023-01-01T00:00:00"", ""Height"": 180.0, ""Status"": ""Active"", ""Email"": ""kim@example.com"" }"; var source = JObject.Parse(json); var mapper = new DataMapper(source, guide); // Act var result = mapper.Map(); // Assert Assert.AreEqual(7, result.Count); Assert.AreEqual(100, result["Id"].ToObject()); Assert.AreEqual("김철수", result["Name"].ToString()); Assert.IsTrue(result["IsActive"].ToObject()); Assert.AreEqual(new DateTime(2023, 1, 1), result["JoinDate"].ToObject()); Assert.AreEqual(180.0, result["Height"].ToObject()); Assert.AreEqual(UserStatus.Active, result["Status"].ToObject()); Assert.AreEqual("kim@example.com", result["Email"].ToString()); } } /// /// 테스트에 사용할 샘플 열거형 /// public enum UserStatus { Active, Inactive, Suspended } }