Added tests in `Elsa.Workflows.Core.UnitTests` and `Elsa.JavaScript.UnitTests` to ensure unicode string serialization works correctly. Added a shared `UnicodeRangeGenerator` for test data generation and updated project references accordingly. Renamed `WorkflowDefinitionActivityJavaScriptHandlerTests.cs` to `ToJsonTests.cs` to reflect the focused test purpose.
48 lines
2.2 KiB
C#
48 lines
2.2 KiB
C#
using System.Text.Json;
|
|
using Elsa.Expressions.Models;
|
|
using Elsa.JavaScript.Contracts;
|
|
using Elsa.Testing.Shared;
|
|
using Elsa.Workflows.Memory;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Xunit;
|
|
using Xunit.Abstractions;
|
|
|
|
namespace Elsa.JavaScript.UnitTests;
|
|
|
|
public class ToJsonTests(ITestOutputHelper testOutputHelper)
|
|
{
|
|
private readonly IServiceProvider _serviceProvider = new TestApplicationBuilder(testOutputHelper).Build();
|
|
|
|
[Fact(DisplayName = "Serialize large unicode string using JavaScript's toJson function")]
|
|
public async Task Test1()
|
|
{
|
|
var javaScriptEvaluator = _serviceProvider.GetRequiredService<IJavaScriptEvaluator>();
|
|
var unicodeString = UnicodeRangeGenerator.GenerateUnicodeString();
|
|
var script = $"toJson({{ text: '{unicodeString}' }})";
|
|
var expressionExecutionContext = new ExpressionExecutionContext(_serviceProvider, new MemoryRegister());
|
|
var result = (string)(await javaScriptEvaluator.EvaluateAsync(script, typeof(string), expressionExecutionContext))!;
|
|
var serializedText = JsonDocument.Parse(result).RootElement.GetProperty("text").GetString();
|
|
Assert.Equal(unicodeString, serializedText);
|
|
}
|
|
|
|
[Fact(DisplayName = "Serialize large unicode string using JavaScript's toJson function from a workflow variable")]
|
|
public async Task Test2()
|
|
{
|
|
var javaScriptEvaluator = _serviceProvider.GetRequiredService<IJavaScriptEvaluator>();
|
|
var expressionExecutionContext = new ExpressionExecutionContext(_serviceProvider, new MemoryRegister());
|
|
var unicodeString = UnicodeRangeGenerator.GenerateUnicodeString();
|
|
var payloadVariable = new Variable<object>
|
|
{
|
|
Name = "Payload"
|
|
};
|
|
var payload = new
|
|
{
|
|
Text = unicodeString
|
|
};
|
|
payloadVariable.Set(expressionExecutionContext, payload);
|
|
var script = "toJson(getPayload())";
|
|
var result = (string)(await javaScriptEvaluator.EvaluateAsync(script, typeof(string), expressionExecutionContext))!;
|
|
var serializedText = JsonDocument.Parse(result).RootElement.GetProperty("Text").GetString();
|
|
Assert.Equal(unicodeString, serializedText);
|
|
}
|
|
} |