using System.IO.Compression; using System.Reflection; using Speckle.Newtonsoft.Json.Linq; using Speckle.Objects.Data; using Speckle.Sdk.Common; using Speckle.Sdk.Host; using Speckle.Sdk.Models; namespace Speckle.Sdk.Serialization.Tests.Framework; public static class TestFileManager { static TestFileManager() { TypeLoader.Reset(); TypeLoader.Initialize(typeof(Base).Assembly, typeof(DataObject).Assembly, _assembly); } private static readonly Assembly _assembly = Assembly.GetExecutingAssembly(); private static readonly Dictionary> _objects = new(); public static async Task> GetFileAsClosures(string fileName) { if (!_objects.TryGetValue(fileName, out var closure)) { var fullName = _assembly.GetManifestResourceNames().Single(x => x.EndsWith(fileName)); var json = await ReadJson(fullName); closure = ReadAsObjects(json); _objects.Add(fileName, closure); } return closure; } private static async Task ReadJson(string fullName) { await using var stream = _assembly.GetManifestResourceStream(fullName).NotNull(); if (fullName.EndsWith(".gz")) { await using var z = new GZipStream(stream, CompressionMode.Decompress); using var reader2 = new StreamReader(z); return await reader2.ReadToEndAsync(); } using var reader = new StreamReader(stream); return await reader.ReadToEndAsync(); } private static Dictionary ReadAsObjects(string json) { var jsonObjects = new Dictionary(); var array = JArray.Parse(json); foreach (var obj in array) { if (obj is JObject jobj) { jsonObjects.Add(jobj["id"].NotNull().Value().NotNull(), jobj.ToString()); } } return jsonObjects; } }