using System; using Paca.Core.QuickActions; using Xunit; namespace Paca.Tests.App; public class QuickActionInlineEvaluatorGateTests { private readonly QuickActionInlineEvaluator _evaluator = new(); [Theory] [InlineData("12 + 34", "46")] [InlineData("100 * 5", "500")] [InlineData("2 ^ 10", "1024")] [InlineData("sqrt(144)", "12")] [InlineData("= 25 * 4", "100")] [InlineData("1000 - 350", "650")] [InlineData("10 / 4", "2.5")] public void Gate_QuickActionEvaluator_MathExpressions_CalculatesCorrectly(string input, string expectedResult) { bool evaluated = _evaluator.TryEvaluate(input, out var result); Assert.True(evaluated, $"수식 '{input}'이 정상적으로 평가되어야 합니다."); Assert.NotNull(result); Assert.Equal(expectedResult, result.Value); } [Fact] public void Gate_QuickActionEvaluator_DevConversions_Base64AndHexAndTimestamp() { // 1. Base64 encode / decode bool b64Enc = _evaluator.TryEvaluate("b64 PACA Super App", out var resEnc); Assert.True(b64Enc); Assert.Equal("UEFDQSBTdXBlciBBcHA=", resEnc!.Value); bool b64Dec = _evaluator.TryEvaluate("b64d UEFDQSBTdXBlciBBcHA=", out var resDec); Assert.True(b64Dec); Assert.Equal("PACA Super App", resDec!.Value); // 2. Hex to RGB bool hexRgb = _evaluator.TryEvaluate("hex #3b82f6", out var resRgb); Assert.True(hexRgb); Assert.Equal("rgb(59, 130, 246)", resRgb!.Value); // 3. Timestamp now bool ts = _evaluator.TryEvaluate("time now", out var resTs); Assert.True(ts); Assert.True(long.TryParse(resTs!.Value, out var val) && val > 1700000000); } [Theory] [InlineData("10 km to mile", "6.21")] [InlineData("100 kg to lb", "220.46")] [InlineData("30 c to f", "86")] [InlineData("1024 mb to gb", "1")] public void Gate_QuickActionEvaluator_UnitConversions(string input, string expectedValuePrefix) { bool evaluated = _evaluator.TryEvaluate(input, out var result); Assert.True(evaluated, $"단위 변환 '{input}'이 평가되어야 합니다."); Assert.NotNull(result); Assert.StartsWith(expectedValuePrefix, result.Value); } }