Highlight JSON, TSCN and scenario fields across editor tools

This commit is contained in:
cthangover committed 2026-10-26 19:44:26 +03:00
1 parent 84894b1e98
commit cbc9472738
7 files changed
+70 -29

No files matched your search

+42
View File
@@ -0,0 +1,42 @@
namespace Cthangover.Tools.Tests
{
using System.Text.Json;
using System.Text.Json.Nodes;
using Cthangover.Core.Mods.Testing;
using Cthangover.Mods.Schemas;
using Cthangover.Tools.Schemas;
using Godot;
/// <summary>JSON schema fields preserve structured values through their highlighted multiline editor.</summary>
public class SchemaFieldControlTests
{
[ModTest("schema/json_field_roundtrip")]
static void JsonFieldRoundtrip(ModTestContext ctx)
{
var parent = new VBoxContainer();
((SceneTree)Engine.GetMainLoop()).Root.AddChild(parent);
try
{
var field = new SchemaFieldControl(parent, new FieldSchema { Key = "Extra", Type = "json" }, null);
ModAssert.True(field.Editor is CodeEdit, "JSON field has a multiline code editor");
var code = (CodeEdit)field.Editor;
ModAssert.True(code.SyntaxHighlighter != null, "JSON field has syntax highlighting");
var original = new JsonObject
{
["text"] = "Unicode text: \u041f\u0440\u0438\u0432\u0435\u0442",
["active"] = true,
["nested"] = new JsonArray(1, null, 3),
};
field.Value = JsonSerializer.Serialize(original, new JsonSerializerOptions { WriteIndented = true });
var restored = JsonNode.Parse(field.Value);
ModAssert.Equal(original["text"].GetValue<string>(), restored["text"].GetValue<string>(), "text survives the field");
ModAssert.True(restored["active"].GetValue<bool>(), "boolean survives the field");
ModAssert.Equal(3, restored["nested"].AsArray().Count, "array survives the field");
ModAssert.True(restored["nested"][1] == null, "null survives the field");
code.Text = "{\n \"number\": 42\n}";
ModAssert.Equal(42, JsonNode.Parse(field.Value)["number"].GetValue<int>(), "edited JSON is returned by the form");
}
finally { parent.Free(); }
}
}
}