2024-12-03 14:07:40 +00:00
|
|
|
|
using System.Dynamic;
|
|
|
|
|
|
using System.Numerics;
|
|
|
|
|
|
using System.Text.Json;
|
|
|
|
|
|
using Elsa.Common.Converters;
|
2025-05-20 23:20:13 +00:00
|
|
|
|
using Elsa.Expressions.JavaScript.Contracts;
|
2025-10-21 18:02:27 +00:00
|
|
|
|
using Elsa.Expressions.Models;
|
2024-12-03 14:07:40 +00:00
|
|
|
|
using Elsa.Testing.Shared;
|
|
|
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
|
|
using Xunit.Abstractions;
|
|
|
|
|
|
|
2025-10-21 18:02:27 +00:00
|
|
|
|
namespace Elsa.JavaScript.IntegrationTests;
|
2024-12-03 14:07:40 +00:00
|
|
|
|
public class JsonConverterTest(ITestOutputHelper testOutputHelper)
|
|
|
|
|
|
{
|
|
|
|
|
|
private readonly IServiceProvider _serviceProvider = new TestApplicationBuilder(testOutputHelper).Build();
|
|
|
|
|
|
|
|
|
|
|
|
[Fact(DisplayName = "JavaScript BigInt mapping to BigInteger serialization")]
|
|
|
|
|
|
public async Task Test1()
|
|
|
|
|
|
{
|
|
|
|
|
|
var javaScriptEvaluator = _serviceProvider.GetRequiredService<IJavaScriptEvaluator>();
|
|
|
|
|
|
var script = @"return {
|
|
|
|
|
|
'BigNumber': BigInt('7239948466988781569')
|
|
|
|
|
|
}";
|
|
|
|
|
|
var expressionExecutionContext = new ExpressionExecutionContext(_serviceProvider, new MemoryRegister());
|
|
|
|
|
|
var result = (await javaScriptEvaluator.EvaluateAsync(script, typeof(ExpandoObject), expressionExecutionContext))!;
|
2025-10-21 18:02:27 +00:00
|
|
|
|
var options = new JsonSerializerOptions
|
2024-12-03 14:07:40 +00:00
|
|
|
|
{
|
|
|
|
|
|
Converters = { new BigIntegerJsonConverter() }
|
|
|
|
|
|
};
|
|
|
|
|
|
var serializedText = JsonSerializer.Serialize(result, options);
|
|
|
|
|
|
|
|
|
|
|
|
Assert.Equal("{\"BigNumber\":7239948466988781569}", serializedText);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Fact(DisplayName = "JavaScript BigInt mapping to BigInteger serialization")]
|
|
|
|
|
|
public async Task Test2()
|
|
|
|
|
|
{
|
|
|
|
|
|
var javaScriptEvaluator = _serviceProvider.GetRequiredService<IJavaScriptEvaluator>();
|
|
|
|
|
|
var script = @"return {
|
|
|
|
|
|
'BigNumber': BigInt('7239948466988781569')
|
|
|
|
|
|
}";
|
|
|
|
|
|
var expressionExecutionContext = new ExpressionExecutionContext(_serviceProvider, new MemoryRegister());
|
|
|
|
|
|
var result = (await javaScriptEvaluator.EvaluateAsync(script, typeof(ExpandoObject), expressionExecutionContext))!;
|
|
|
|
|
|
var serializedText = JsonSerializer.Serialize(result);
|
|
|
|
|
|
|
|
|
|
|
|
Assert.Equal("{\"BigNumber\":{\"IsPowerOfTwo\":false,\"IsZero\":false,\"IsOne\":false,\"IsEven\":false,\"Sign\":1}}", serializedText);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Fact(DisplayName = "BigIntegerJsonConverter Deserialize")]
|
2025-10-21 18:02:27 +00:00
|
|
|
|
public Task Test3()
|
2024-12-03 14:07:40 +00:00
|
|
|
|
{
|
2025-10-21 18:02:27 +00:00
|
|
|
|
var options = new JsonSerializerOptions
|
2024-12-03 14:07:40 +00:00
|
|
|
|
{
|
|
|
|
|
|
Converters = { new BigIntegerJsonConverter() }
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
BigInteger bigInteger = JsonSerializer.Deserialize<BigInteger>("7239948466988781569", options);
|
|
|
|
|
|
|
|
|
|
|
|
Assert.Equal(7239948466988781569, bigInteger);
|
2025-10-21 18:02:27 +00:00
|
|
|
|
return Task.CompletedTask;
|
2024-12-03 14:07:40 +00:00
|
|
|
|
}
|
|
|
|
|
|
}
|