about summary refs log tree commit diff
path: root/Utilities/LibMatrix.E2eeTestKit/Pages
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2024-07-15 13:52:47 +0200
committerRory& <root@rory.gay>2024-07-16 09:33:56 +0200
commitf761990225fd98160b52ef90f88b769c0f6b0dc6 (patch)
treedc6e670d1b28e4ea9399f8584cf24156935b76af /Utilities/LibMatrix.E2eeTestKit/Pages
parentImport unit test fixes from dev/home-changes (diff)
downloadLibMatrix-bak-dev/e2ee{canonical-json}.tar.xz
Diffstat (limited to 'Utilities/LibMatrix.E2eeTestKit/Pages')
-rw-r--r--Utilities/LibMatrix.E2eeTestKit/Pages/CSTJApiComparison.razor134
-rw-r--r--Utilities/LibMatrix.E2eeTestKit/Pages/CSTJTest.razor39
-rw-r--r--Utilities/LibMatrix.E2eeTestKit/Pages/Home.razor7
3 files changed, 180 insertions, 0 deletions
diff --git a/Utilities/LibMatrix.E2eeTestKit/Pages/CSTJApiComparison.razor b/Utilities/LibMatrix.E2eeTestKit/Pages/CSTJApiComparison.razor
new file mode 100644

index 0000000..3aad27c --- /dev/null +++ b/Utilities/LibMatrix.E2eeTestKit/Pages/CSTJApiComparison.razor
@@ -0,0 +1,134 @@ +@page "/CSTJApiComparison" +@using System.Reflection +@using System.Text +@using System.Text.Json +@using LibMatrix.Extensions + +<PageTitle>Counter</PageTitle> + +<h3>Compare STJ API</h3> + +// side by side table +<table class="table table-bordered"> + <thead> + <tr> + @foreach (var type in TypesToCompare) { + <th>@type.Name</th> + } + </tr> + </thead> + <tbody> + @* // display all public static methods in matching rows, put non matching at the end, by signature *@ + @* // do not use type.GetMethod as it throws ambiguous match errors *@ + @{ var methods = TypesToCompare.Select(t => (Type: t, Methods: t.GetMethods())); } + @foreach (var method in methods.SelectMany(m => m.Methods).DistinctBy(m => GetMethodSignature(m))) { + <tr> + @foreach (var (type, _) in methods) { + var methodInfo = type.GetMethods().FirstOrDefault(m => GetMethodSignature(m) == GetMethodSignature(method)); + if (methodInfo != null) { + <td>@GetMethodSignature(methodInfo)</td> + } + else { + <td></td> + } + } + </tr> + } + + </tbody> +</table> + +@code { + private static readonly Type[] TypesToCompare = [typeof(JsonSerializer), typeof(CanonicalJsonSerializer)]; + + private string GetMethodSignature(MethodInfo method, bool includeModifiers = true, bool includeReturnType = true, bool includeParameters = true) { + var sb = new StringBuilder(); + + //modifiers + if (includeModifiers) { + if (method.IsPublic) { + sb.Append("public "); + } + if (method.IsStatic) { + sb.Append("static "); + } + } + + //return type + if (includeReturnType) { + if (method.ReturnType.IsGenericType) { + sb.Append(method.ReturnType.Name.Split('`')[0]); + sb.Append("<"); + var genericArguments = method.ReturnType.GetGenericArguments(); + foreach (var genericArgument in genericArguments) { + sb.Append(genericArgument.Name); + if (genericArgument != genericArguments.Last()) + sb.Append(", "); + } + + sb.Append(">"); + } + else { + //lowercase primitives + sb.Append(method.ReturnType.Name); + } + + sb.Append(' '); + } + + sb.Append(method.Name); + if (method.IsGenericMethod) { + sb.Append("<"); + var genericArguments = method.GetGenericArguments(); + foreach (var genericArgument in genericArguments) { + sb.Append(genericArgument.Name); + if (genericArgument != genericArguments.Last()) + sb.Append(", "); + } + + sb.Append(">"); + } + sb.Append("("); + var parameters = method.GetParameters(); + foreach (var parameter in parameters) { + //handle generics + if (parameter.ParameterType.IsGenericType) { + sb.Append(parameter.ParameterType.Name.Split('`')[0]); + sb.Append("<"); + var genericArguments = parameter.ParameterType.GetGenericArguments(); + foreach (var genericArgument in genericArguments) { + sb.Append(genericArgument.Name); + if (genericArgument != genericArguments.Last()) + sb.Append(", "); + } + + sb.Append(">"); + } + else { + sb.Append(parameter.ParameterType.Name); + } + sb.Append(" "); + sb.Append(parameter.Name); + if (parameter.HasDefaultValue) { + sb.Append(" = "); + //handle default value + if (parameter.DefaultValue == null) { + sb.Append("null"); + } + else if (parameter.ParameterType == typeof(string)) { + sb.Append($"\"{parameter.DefaultValue}\""); + } + else { + sb.Append(parameter.DefaultValue); + } + } + + if (parameter != parameters.Last()) + sb.Append(", "); + } + + sb.Append(")"); + return sb.ToString(); + } + +} \ No newline at end of file diff --git a/Utilities/LibMatrix.E2eeTestKit/Pages/CSTJTest.razor b/Utilities/LibMatrix.E2eeTestKit/Pages/CSTJTest.razor new file mode 100644
index 0000000..0d01428 --- /dev/null +++ b/Utilities/LibMatrix.E2eeTestKit/Pages/CSTJTest.razor
@@ -0,0 +1,39 @@ +@page "/CSTJTest" +@using System.Text.Json +@using System.Text.Json.Nodes +@using LibMatrix.Extensions + +<PageTitle>Counter</PageTitle> + +<h3>Canonicalise JSON</h3> +<hr/> + +<InputTextArea @bind-Value="@JsonInput" rows="@(JsonInput.Split('\n').Length + 1)"></InputTextArea> +<br/> +<pre>@JsonOutput</pre> + +@code { + private string _jsonInput = ""; + + private string JsonInput { + get => _jsonInput; + set { + _jsonInput = value; + try { + Console.WriteLine("Input updated"); + var obj = JsonSerializer.Deserialize<dynamic>(value); + Console.WriteLine("Deserialised"); + JsonOutput = CanonicalJsonSerializer.Serialize(obj); + Console.WriteLine("Serialised: " + JsonOutput ?? "null"); + } + catch (Exception e) { + JsonOutput = e.ToString(); + } + + StateHasChanged(); + } + } + + private string? JsonOutput { get; set; } + +} \ No newline at end of file diff --git a/Utilities/LibMatrix.E2eeTestKit/Pages/Home.razor b/Utilities/LibMatrix.E2eeTestKit/Pages/Home.razor new file mode 100644
index 0000000..df05023 --- /dev/null +++ b/Utilities/LibMatrix.E2eeTestKit/Pages/Home.razor
@@ -0,0 +1,7 @@ +@page "/" + +<PageTitle>Home</PageTitle> + +<h1>Hello, world!</h1> + +Welcome to your new app.