diff --git a/.editorconfig b/.editorconfig index dcb0a171..a4ac5b64 100644 --- a/.editorconfig +++ b/.editorconfig @@ -316,3 +316,13 @@ dotnet_diagnostic.NUnit2039.severity = warning # Consider using Assert.That(actu indent_style = space indent_size = 2 tab_width = 2 + +# Verify +[*.{received,verified}.{json}] +charset = utf-8-bom +end_of_line = lf +indent_size = unset +indent_style = unset +insert_final_newline = false +tab_width = unset +trim_trailing_whitespace = false \ No newline at end of file diff --git a/.gitattributes b/.gitattributes index 0a96b77c..d87a165f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2,4 +2,7 @@ * text=auto # need original files to be windows -*.txt text eol=crlf \ No newline at end of file +*.txt text eol=crlf + +# Verify +*.verified.json text eol=lf working-tree-encoding=UTF-8 \ No newline at end of file diff --git a/.gitignore b/.gitignore index 6e3d7b2a..190742b6 100644 --- a/.gitignore +++ b/.gitignore @@ -18,4 +18,6 @@ tools .DS_Store *.snupkg -coverage.xml \ No newline at end of file +coverage.xml + +*.received.* \ No newline at end of file diff --git a/Directory.Packages.props b/Directory.Packages.props index 945ae32b..d8baa777 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -25,11 +25,15 @@ + + + + - + \ No newline at end of file diff --git a/tests/Speckle.Sdk.Serialization.Tests/DummyReceiveServerObjectManager.cs b/Speckle.Sdk.Testing/Framework/DummyReceiveServerObjectManager.cs similarity index 97% rename from tests/Speckle.Sdk.Serialization.Tests/DummyReceiveServerObjectManager.cs rename to Speckle.Sdk.Testing/Framework/DummyReceiveServerObjectManager.cs index fb4c09fb..b44c4f34 100644 --- a/tests/Speckle.Sdk.Serialization.Tests/DummyReceiveServerObjectManager.cs +++ b/Speckle.Sdk.Testing/Framework/DummyReceiveServerObjectManager.cs @@ -4,7 +4,7 @@ using Speckle.Sdk.Serialisation.V2; using Speckle.Sdk.Serialisation.V2.Send; using Speckle.Sdk.Transports; -namespace Speckle.Sdk.Serialization.Tests; +namespace Speckle.Sdk.Testing.Framework; public class DummyReceiveServerObjectManager(Dictionary objects) : IServerObjectManager { diff --git a/tests/Speckle.Sdk.Serialization.Tests/DummySendServerObjectManager.cs b/Speckle.Sdk.Testing/Framework/DummySendServerObjectManager.cs similarity index 96% rename from tests/Speckle.Sdk.Serialization.Tests/DummySendServerObjectManager.cs rename to Speckle.Sdk.Testing/Framework/DummySendServerObjectManager.cs index b0873527..0ae163c4 100644 --- a/tests/Speckle.Sdk.Serialization.Tests/DummySendServerObjectManager.cs +++ b/Speckle.Sdk.Testing/Framework/DummySendServerObjectManager.cs @@ -3,7 +3,7 @@ using Speckle.Sdk.Serialisation.V2; using Speckle.Sdk.Serialisation.V2.Send; using Speckle.Sdk.Transports; -namespace Speckle.Sdk.Serialization.Tests; +namespace Speckle.Sdk.Testing.Framework; public class DummySendServerObjectManager(ConcurrentDictionary savedObjects) : IServerObjectManager { diff --git a/tests/Speckle.Sdk.Serialization.Tests/DummySqLiteReceiveManager.cs b/Speckle.Sdk.Testing/Framework/DummySqLiteReceiveManager.cs similarity index 81% rename from tests/Speckle.Sdk.Serialization.Tests/DummySqLiteReceiveManager.cs rename to Speckle.Sdk.Testing/Framework/DummySqLiteReceiveManager.cs index 797eacd9..b36e6076 100644 --- a/tests/Speckle.Sdk.Serialization.Tests/DummySqLiteReceiveManager.cs +++ b/Speckle.Sdk.Testing/Framework/DummySqLiteReceiveManager.cs @@ -1,8 +1,8 @@ using Speckle.Sdk.SQLite; -namespace Speckle.Sdk.Serialization.Tests; +namespace Speckle.Sdk.Testing.Framework; -public class DummySqLiteReceiveManager(Dictionary savedObjects) : ISqLiteJsonCacheManager +public sealed class DummySqLiteReceiveManager(Dictionary savedObjects) : ISqLiteJsonCacheManager { public void Dispose() { } diff --git a/tests/Speckle.Sdk.Serialization.Tests/DummySqLiteSendManager.cs b/Speckle.Sdk.Testing/Framework/DummySqLiteSendManager.cs similarity index 86% rename from tests/Speckle.Sdk.Serialization.Tests/DummySqLiteSendManager.cs rename to Speckle.Sdk.Testing/Framework/DummySqLiteSendManager.cs index 0b93af62..68b37f7d 100644 --- a/tests/Speckle.Sdk.Serialization.Tests/DummySqLiteSendManager.cs +++ b/Speckle.Sdk.Testing/Framework/DummySqLiteSendManager.cs @@ -1,8 +1,8 @@ using Speckle.Sdk.SQLite; -namespace Speckle.Sdk.Serialization.Tests; +namespace Speckle.Sdk.Testing.Framework; -public class DummySqLiteSendManager : ISqLiteJsonCacheManager +public sealed class DummySqLiteSendManager : ISqLiteJsonCacheManager { public string? GetObject(string id) => throw new NotImplementedException(); diff --git a/Speckle.Sdk.Testing/Framework/IdStringSerializer.cs b/Speckle.Sdk.Testing/Framework/IdStringSerializer.cs new file mode 100644 index 00000000..5a7e7258 --- /dev/null +++ b/Speckle.Sdk.Testing/Framework/IdStringSerializer.cs @@ -0,0 +1,24 @@ +using System.Diagnostics.CodeAnalysis; +using Argon; +using Speckle.Sdk.Common; +using Speckle.Sdk.Serialisation; + +namespace Speckle.Sdk.Testing.Framework; + +[SuppressMessage("Design", "CA1062:Validate arguments of public methods")] +public class IdStringSerializer : JsonConverter +{ + public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) + { + var id = (Id)value; + writer.WriteValue(id.Value); + } + + public override object? ReadJson(JsonReader reader, Type type, object? existingValue, JsonSerializer serializer) + { + var json = reader.ReadAsString(); + return new Id(json.NotNull()); + } + + public override bool CanConvert(Type type) => typeof(Id) == type; +} diff --git a/Speckle.Sdk.Testing/Framework/JsonStringSerializer.cs b/Speckle.Sdk.Testing/Framework/JsonStringSerializer.cs new file mode 100644 index 00000000..11feb571 --- /dev/null +++ b/Speckle.Sdk.Testing/Framework/JsonStringSerializer.cs @@ -0,0 +1,24 @@ +using System.Diagnostics.CodeAnalysis; +using Argon; +using Speckle.Sdk.Common; +using Speckle.Sdk.Serialisation; + +namespace Speckle.Sdk.Testing.Framework; + +[SuppressMessage("Design", "CA1062:Validate arguments of public methods")] +public class JsonStringSerializer : JsonConverter +{ + public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) + { + var json = (Json)value; + writer.WriteRawValue(JObject.Parse(json.Value).ToString(Formatting.Indented)); + } + + public override object? ReadJson(JsonReader reader, Type type, object? existingValue, JsonSerializer serializer) + { + var json = reader.ReadAsString(); + return new Json(json.NotNull()); + } + + public override bool CanConvert(Type type) => typeof(Json) == type; +} diff --git a/Speckle.Sdk.Testing/Global.cs b/Speckle.Sdk.Testing/Global.cs new file mode 100644 index 00000000..c7fc3b1f --- /dev/null +++ b/Speckle.Sdk.Testing/Global.cs @@ -0,0 +1 @@ +[assembly: CollectionBehavior(DisableTestParallelization = true)] diff --git a/Speckle.Sdk.Testing/Speckle.Sdk.Testing.csproj b/Speckle.Sdk.Testing/Speckle.Sdk.Testing.csproj new file mode 100644 index 00000000..ba4b54c6 --- /dev/null +++ b/Speckle.Sdk.Testing/Speckle.Sdk.Testing.csproj @@ -0,0 +1,19 @@ + + + + net8.0 + true + + + + + + + + + + + + + + diff --git a/Speckle.Sdk.Testing/SpeckleVerify.cs b/Speckle.Sdk.Testing/SpeckleVerify.cs new file mode 100644 index 00000000..97d276e5 --- /dev/null +++ b/Speckle.Sdk.Testing/SpeckleVerify.cs @@ -0,0 +1,45 @@ +using System.Runtime.CompilerServices; +using Argon; +using Speckle.Sdk.Serialisation; +using Speckle.Sdk.Testing.Framework; + +namespace Speckle.Sdk.Testing; + +public static class SpeckleVerify +{ + [ModuleInitializer] + public static void Initialize() + { + VerifierSettings.DontScrubGuids(); + VerifierSettings.DontScrubDateTimes(); + + VerifierSettings.UseStrictJson(); + VerifierSettings.DontIgnoreEmptyCollections(); + VerifierSettings.SortPropertiesAlphabetically(); + VerifierSettings.SortJsonObjects(); + if (!VerifyQuibble.Initialized) + { + VerifyQuibble.Initialize(); + } + } + + private static readonly JsonSerializer _jsonSerializer = new() + { + NullValueHandling = NullValueHandling.Include, + Formatting = Formatting.Indented, + Converters = { new JsonStringSerializer() }, + }; + + private static async Task VerifyJsonObjects(IDictionary objects, string sourceFile) => + await VerifyJson(JObject.FromObject(objects, _jsonSerializer).ToString(), sourceFile: sourceFile); + + public static async Task VerifyJsonDictionary( + IDictionary objects, + [CallerFilePath] string sourceFile = "" + ) => await VerifyJsonObjects(objects.ToDictionary(x => x.Key, x => new Json(x.Value)), sourceFile); + + public static async Task VerifyJsonDictionary( + IDictionary objects, + [CallerFilePath] string sourceFile = "" + ) => await VerifyJsonObjects(objects.ToDictionary(x => x.Key.Value, x => x.Value), sourceFile); +} diff --git a/Speckle.Sdk.Testing/VerifyTests.cs b/Speckle.Sdk.Testing/VerifyTests.cs new file mode 100644 index 00000000..a303625d --- /dev/null +++ b/Speckle.Sdk.Testing/VerifyTests.cs @@ -0,0 +1,7 @@ +namespace Speckle.Sdk.Testing; + +public class VerifyTests +{ + [Fact] + public Task TestVerify() => VerifyChecks.Run(); +} diff --git a/Speckle.Sdk.Testing/packages.lock.json b/Speckle.Sdk.Testing/packages.lock.json new file mode 100644 index 00000000..6664fe19 --- /dev/null +++ b/Speckle.Sdk.Testing/packages.lock.json @@ -0,0 +1,421 @@ +{ + "version": 2, + "dependencies": { + "net8.0": { + "GitVersion.MsBuild": { + "type": "Direct", + "requested": "[5.12.0, )", + "resolved": "5.12.0", + "contentHash": "dJuigXycpJNOiLT9or7mkHSkGFHgGW3/p6cNNYEKZBa7Hhp1FdX/cvqYWWYhRLpfoZOedeA7aRbYiOB3vW/dvA==" + }, + "Microsoft.NET.Test.Sdk": { + "type": "Direct", + "requested": "[17.12.0, )", + "resolved": "17.12.0", + "contentHash": "kt/PKBZ91rFCWxVIJZSgVLk+YR+4KxTuHf799ho8WNiK5ZQpJNAEZCAWX86vcKrs+DiYjiibpYKdGZP6+/N17w==", + "dependencies": { + "Microsoft.CodeCoverage": "17.12.0", + "Microsoft.TestPlatform.TestHost": "17.12.0" + } + }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "8.0.0", + "Microsoft.SourceLink.Common": "8.0.0" + } + }, + "PolySharp": { + "type": "Direct", + "requested": "[1.15.0, )", + "resolved": "1.15.0", + "contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g==" + }, + "Speckle.InterfaceGenerator": { + "type": "Direct", + "requested": "[0.9.6, )", + "resolved": "0.9.6", + "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" + }, + "Verify.Quibble": { + "type": "Direct", + "requested": "[2.1.1, )", + "resolved": "2.1.1", + "contentHash": "Z8bVwFICa3Dog6Mcnx0wlrn4Y+CFpQXx1f+ijfLn6/v4q00q+jLm9Gu/nVyUFuc75cjn6ieI08UrqXKcR9fTYw==", + "dependencies": { + "Quibble": "0.3.1", + "System.Text.Json": "8.0.4", + "Verify": "26.1.1" + } + }, + "Verify.Xunit": { + "type": "Direct", + "requested": "[28.9.0, )", + "resolved": "28.9.0", + "contentHash": "YlgbJzajNvnzTVqWtZuWdZFcShX4MyQqM4FJ28qSf7hY8wvB8G6y2EwHit+Wz/nYrdnCXWYK81JR7dxTxSeuDg==", + "dependencies": { + "Argon": "0.26.0", + "DiffEngine": "15.8.0", + "SimpleInfoName": "3.1.0", + "System.IO.Hashing": "9.0.0", + "Verify": "28.9.0", + "xunit.abstractions": "2.0.3", + "xunit.extensibility.execution": "2.9.3" + } + }, + "xunit.runner.visualstudio": { + "type": "Direct", + "requested": "[3.0.1, )", + "resolved": "3.0.1", + "contentHash": "lbyYtsBxA8Pz8kaf5Xn/Mj1mL9z2nlBWdZhqFaj66nxXBa4JwiTDm4eGcpSMet6du9TOWI6bfha+gQR6+IHawg==" + }, + "Argon": { + "type": "Transitive", + "resolved": "0.26.0", + "contentHash": "n7btGXdtRyprGnpLMpBs6rLScxlvPtVWwmTR8h7CtJvpZXBGhGvibEdZxRjeTZNrwf403jJ0ZPpt35Pz/NaNsw==" + }, + "DiffEngine": { + "type": "Transitive", + "resolved": "15.8.0", + "contentHash": "+2cUvCcpUWziG6hnns6lwxkj6VVA+WsEGx3JqHIAt/1D7p+zpyWebqXihcfXzrZ5EqQmM4h+PpuUhYWH0TeCvQ==", + "dependencies": { + "EmptyFiles": "8.7.1", + "System.Management": "9.0.0" + } + }, + "EmptyFiles": { + "type": "Transitive", + "resolved": "8.7.1", + "contentHash": "C8pvg0TvG2Mkn5LGNFGkFgFu8SUgYFwiu8U3y34qGQnnwKmGnlQTfTIUrtzfSjPxA4q7L/kRu09U5p32otZ2Aw==" + }, + "FSharp.Core": { + "type": "Transitive", + "resolved": "7.0.300", + "contentHash": "8vvItREJ1l5lcp3vBCSJ1mFevVAhR48I34DuF/EoUa7o1KlFpQpagyuZkVYMAsHPIjdp47ZxM9sI4eqeXaeWkA==" + }, + "GraphQL.Client.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==", + "dependencies": { + "GraphQL.Primitives": "6.0.0" + } + }, + "GraphQL.Client.Abstractions.Websocket": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0" + } + }, + "GraphQL.Primitives": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA==" + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, + "Microsoft.CodeCoverage": { + "type": "Transitive", + "resolved": "17.12.0", + "contentHash": "4svMznBd5JM21JIG2xZKGNanAHNXplxf/kQDFfLHXQ3OnpJkayRK/TjacFjA+EYmoyuNXHo/sOETEfcYtAzIrA==" + }, + "Microsoft.Data.Sqlite.Core": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==" + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Primitives": "2.2.0", + "System.ComponentModel.Annotations": "4.5.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", + "dependencies": { + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" + } + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, + "Microsoft.TestPlatform.ObjectModel": { + "type": "Transitive", + "resolved": "17.12.0", + "contentHash": "TDqkTKLfQuAaPcEb3pDDWnh7b3SyZF+/W9OZvWFp6eJCIiiYFdSB6taE2I6tWrFw5ywhzOb6sreoGJTI6m3rSQ==", + "dependencies": { + "System.Reflection.Metadata": "1.6.0" + } + }, + "Microsoft.TestPlatform.TestHost": { + "type": "Transitive", + "resolved": "17.12.0", + "contentHash": "MiPEJQNyADfwZ4pJNpQex+t9/jOClBGMiCiVVFuELCMSX2nmNfvUor3uFVxNNCg30uxDP8JDYfPnMXQzsfzYyg==", + "dependencies": { + "Microsoft.TestPlatform.ObjectModel": "17.12.0", + "Newtonsoft.Json": "13.0.1" + } + }, + "Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.1", + "contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==" + }, + "Quibble": { + "type": "Transitive", + "resolved": "0.3.1", + "contentHash": "LD6bz2p+4O/BQnmD4mqFZrmdN/IjsPo1wUvfmcH46Q05ng+dyMLl3d2ylj0x412F4fpJEtm0Z3EaCAx4FqgNuQ==", + "dependencies": { + "FSharp.Core": "7.0.300", + "System.Text.Json": "7.0.3" + } + }, + "SimpleInfoName": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "j+ENh86NhxrgDc6T1ueqIR2QOdDkSJY2dbTFyPN/JvIXifB4GHAunlMw/x7P6m7XaXEHr3s+SMZfKBlmnmkO6g==" + }, + "SQLitePCLRaw.bundle_e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==", + "dependencies": { + "SQLitePCLRaw.lib.e_sqlite3": "2.1.4", + "SQLitePCLRaw.provider.e_sqlite3": "2.1.4" + } + }, + "SQLitePCLRaw.core": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==", + "dependencies": { + "System.Memory": "4.5.3" + } + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "SQLitePCLRaw.provider.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "CSlb5dUp1FMIkez9Iv5EXzpeq7rHryVNqwJMWnpq87j9zWZexaEMdisDktMsnnrzKM6ahNrsTkjqNodTBPBxtQ==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "System.CodeDom": { + "type": "Transitive", + "resolved": "9.0.0", + "contentHash": "oTE5IfuMoET8yaZP/vdvy9xO47guAv/rOhe4DODuFBN3ySprcQOlXqO3j+e/H/YpKKR5sglrxRaZ2HYOhNJrqA==" + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==" + }, + "System.IO.Hashing": { + "type": "Transitive", + "resolved": "9.0.0", + "contentHash": "seeO8icDfED/Qwl9PDFUx2Gf/7xv7dPsMnw5PnRwNZuz4EWMpy0wIVohC4MfCcTIoJgp+KUrWG4WH3NPSusQOA==" + }, + "System.Management": { + "type": "Transitive", + "resolved": "9.0.0", + "contentHash": "bVh4xAMI5grY5GZoklKcMBLirhC8Lqzp63Ft3zXJacwGAlLyFdF4k0qz4pnKIlO6HyL2Z4zqmHm9UkzEo6FFsA==", + "dependencies": { + "System.CodeDom": "9.0.0" + } + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.3", + "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==" + }, + "System.Reactive": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==" + }, + "System.Reflection.Metadata": { + "type": "Transitive", + "resolved": "1.6.0", + "contentHash": "COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ==" + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "4.5.1", + "contentHash": "Zh8t8oqolRaFa9vmOZfdQm/qKejdqz0J9kr7o2Fu0vPeoH3BL1EOXipKWwkWtLT1JPzjByrF19fGuFlNbmPpiw==" + }, + "System.Text.Encodings.Web": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==" + }, + "System.Text.Json": { + "type": "Transitive", + "resolved": "8.0.4", + "contentHash": "bAkhgDJ88XTsqczoxEMliSrpijKZHhbJQldhAmObj/RbrN3sU5dcokuXmWJWsdQAhiMJ9bTayWsL1C9fbbCRhw==", + "dependencies": { + "System.Text.Encodings.Web": "8.0.0" + } + }, + "xunit.abstractions": { + "type": "Transitive", + "resolved": "2.0.3", + "contentHash": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg==" + }, + "xunit.extensibility.core": { + "type": "Transitive", + "resolved": "2.9.3", + "contentHash": "kf3si0YTn2a8J8eZNb+zFpwfoyvIrQ7ivNk5ZYA5yuYk1bEtMe4DxJ2CF/qsRgmEnDr7MnW1mxylBaHTZ4qErA==", + "dependencies": { + "xunit.abstractions": "2.0.3" + } + }, + "xunit.extensibility.execution": { + "type": "Transitive", + "resolved": "2.9.3", + "contentHash": "yMb6vMESlSrE3Wfj7V6cjQ3S4TXdXpRqYeNEI3zsX31uTsGMJjEw6oD5F5u1cHnMptjhEECnmZSsPxB6ChZHDQ==", + "dependencies": { + "xunit.extensibility.core": "[2.9.3]" + } + }, + "speckle.sdk": { + "type": "Project", + "dependencies": { + "GraphQL.Client": "[6.0.0, )", + "Microsoft.CSharp": "[4.7.0, )", + "Microsoft.Data.Sqlite": "[7.0.5, 7.0.5]", + "Microsoft.Extensions.DependencyInjection.Abstractions": "[2.2.0, 2.2.0]", + "Microsoft.Extensions.Logging": "[2.2.0, 2.2.0]", + "Speckle.DoubleNumerics": "[4.0.1, )", + "Speckle.Newtonsoft.Json": "[13.0.2, )", + "Speckle.Sdk.Dependencies": "[1.0.0, )" + } + }, + "speckle.sdk.dependencies": { + "type": "Project" + }, + "GraphQL.Client": { + "type": "CentralTransitive", + "requested": "[6.0.0, )", + "resolved": "6.0.0", + "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0", + "GraphQL.Client.Abstractions.Websocket": "6.0.0", + "System.Reactive": "5.0.0" + } + }, + "Microsoft.CSharp": { + "type": "CentralTransitive", + "requested": "[4.7.0, )", + "resolved": "4.7.0", + "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" + }, + "Microsoft.Data.Sqlite": { + "type": "CentralTransitive", + "requested": "[7.0.5, 7.0.5]", + "resolved": "7.0.5", + "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==", + "dependencies": { + "Microsoft.Data.Sqlite.Core": "7.0.5", + "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "CentralTransitive", + "requested": "[2.2.0, 2.2.0]", + "resolved": "2.2.0", + "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==" + }, + "Microsoft.Extensions.Logging": { + "type": "CentralTransitive", + "requested": "[2.2.0, 2.2.0]", + "resolved": "2.2.0", + "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Speckle.DoubleNumerics": { + "type": "CentralTransitive", + "requested": "[4.0.1, )", + "resolved": "4.0.1", + "contentHash": "MzEQ1Im0zTja+tEsdRIk/WlPiKqb22NmTOJcR1ZKm/mz46pezyyID3/wRz6vJUELMpSLnG7LhsxBL+nxbr7V0w==" + }, + "Speckle.Newtonsoft.Json": { + "type": "CentralTransitive", + "requested": "[13.0.2, )", + "resolved": "13.0.2", + "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" + }, + "Verify": { + "type": "CentralTransitive", + "requested": "[28.9.0, )", + "resolved": "28.9.0", + "contentHash": "qni0zDkkYSPIhnYejZCOq5ueH+y0s7kEdpSbFXarcxP7rjZvZD0Yuc567KFVFMbVRAo9IORfv9zcXtTGFmpz8A==", + "dependencies": { + "Argon": "0.26.0", + "DiffEngine": "15.8.0", + "SimpleInfoName": "3.1.0", + "System.IO.Hashing": "9.0.0" + } + } + } + } +} \ No newline at end of file diff --git a/Speckle.Sdk.sln b/Speckle.Sdk.sln index 90b5b90f..94d4b613 100644 --- a/Speckle.Sdk.sln +++ b/Speckle.Sdk.sln @@ -46,6 +46,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Sdk.Serialization.T EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Sdk.Dependencies", "src\Speckle.Sdk.Dependencies\Speckle.Sdk.Dependencies.csproj", "{27584AB4-8ACD-4850-8CC2-7E5BC739FB78}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Sdk.Testing", "Speckle.Sdk.Testing\Speckle.Sdk.Testing.csproj", "{7B617C0D-2354-415C-993C-5071D4113E27}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "performance", "performance", "{FFB07238-87E8-463A-AA39-3B38AAAA94C1}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -96,6 +100,10 @@ Global {27584AB4-8ACD-4850-8CC2-7E5BC739FB78}.Debug|Any CPU.Build.0 = Debug|Any CPU {27584AB4-8ACD-4850-8CC2-7E5BC739FB78}.Release|Any CPU.ActiveCfg = Release|Any CPU {27584AB4-8ACD-4850-8CC2-7E5BC739FB78}.Release|Any CPU.Build.0 = Release|Any CPU + {7B617C0D-2354-415C-993C-5071D4113E27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7B617C0D-2354-415C-993C-5071D4113E27}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7B617C0D-2354-415C-993C-5071D4113E27}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7B617C0D-2354-415C-993C-5071D4113E27}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {A413E196-3696-4F48-B635-04B5F76BF9C9} = {5CB96C27-FC5B-4A41-86B6-951AF99B8116} @@ -106,8 +114,9 @@ Global {AA1E1E51-49AE-4F71-84B1-938E19695BE0} = {35047EE7-AD1D-4741-80A7-8F0E874718E9} {4FB41A6D-D139-4111-8115-E3F9F6BEAF24} = {35047EE7-AD1D-4741-80A7-8F0E874718E9} {B623BD21-5CAA-43F9-A539-1835276C220E} = {DA2AED52-58F9-471E-8AD8-102FD36129E3} - {870E3396-E6F7-43AE-B120-E651FA4F46BD} = {35047EE7-AD1D-4741-80A7-8F0E874718E9} - {FF922B6D-D416-4348-8CB8-0C8B28691070} = {35047EE7-AD1D-4741-80A7-8F0E874718E9} {27584AB4-8ACD-4850-8CC2-7E5BC739FB78} = {5CB96C27-FC5B-4A41-86B6-951AF99B8116} + {7B617C0D-2354-415C-993C-5071D4113E27} = {35047EE7-AD1D-4741-80A7-8F0E874718E9} + {FF922B6D-D416-4348-8CB8-0C8B28691070} = {FFB07238-87E8-463A-AA39-3B38AAAA94C1} + {870E3396-E6F7-43AE-B120-E651FA4F46BD} = {FFB07238-87E8-463A-AA39-3B38AAAA94C1} EndGlobalSection EndGlobal diff --git a/tests/Speckle.Objects.Tests.Unit/Geometry/ArcTests.cs b/tests/Speckle.Objects.Tests.Unit/Geometry/ArcTests.cs index 6c9627ff..a7ab2d8c 100644 --- a/tests/Speckle.Objects.Tests.Unit/Geometry/ArcTests.cs +++ b/tests/Speckle.Objects.Tests.Unit/Geometry/ArcTests.cs @@ -1,7 +1,6 @@ using FluentAssertions; using Speckle.Objects.Geometry; using Speckle.Sdk.Common; -using Xunit; namespace Speckle.Objects.Tests.Unit.Geometry; diff --git a/tests/Speckle.Objects.Tests.Unit/Geometry/BoxTests.CanCreateBox.verified.json b/tests/Speckle.Objects.Tests.Unit/Geometry/BoxTests.CanCreateBox.verified.json new file mode 100644 index 00000000..25d25b00 --- /dev/null +++ b/tests/Speckle.Objects.Tests.Unit/Geometry/BoxTests.CanCreateBox.verified.json @@ -0,0 +1,90 @@ +{ + "basePlane": { + "origin": { + "units": "m", + "speckle_type": "Objects.Geometry.Point", + "DynamicPropertyKeys": [] + }, + "normal": { + "units": "m", + "z": 1.0, + "Length": 1.0, + "speckle_type": "Objects.Geometry.Vector", + "DynamicPropertyKeys": [] + }, + "xdir": { + "units": "m", + "x": 1.0, + "Length": 1.0, + "speckle_type": "Objects.Geometry.Vector", + "DynamicPropertyKeys": [] + }, + "ydir": { + "units": "m", + "y": 1.0, + "Length": 1.0, + "speckle_type": "Objects.Geometry.Vector", + "DynamicPropertyKeys": [] + }, + "units": "m", + "speckle_type": "Objects.Geometry.Plane", + "DynamicPropertyKeys": [] + }, + "plane": { + "origin": { + "units": "m", + "speckle_type": "Objects.Geometry.Point", + "DynamicPropertyKeys": [] + }, + "normal": { + "units": "m", + "z": 1.0, + "Length": 1.0, + "speckle_type": "Objects.Geometry.Vector", + "DynamicPropertyKeys": [] + }, + "xdir": { + "units": "m", + "x": 1.0, + "Length": 1.0, + "speckle_type": "Objects.Geometry.Vector", + "DynamicPropertyKeys": [] + }, + "ydir": { + "units": "m", + "y": 1.0, + "Length": 1.0, + "speckle_type": "Objects.Geometry.Vector", + "DynamicPropertyKeys": [] + }, + "units": "m", + "speckle_type": "Objects.Geometry.Plane", + "DynamicPropertyKeys": [] + }, + "xSize": { + "start": -1.0, + "end": 1.0, + "Length": 2.0, + "speckle_type": "Objects.Primitive.Interval", + "DynamicPropertyKeys": [] + }, + "ySize": { + "start": -2.0, + "end": 2.0, + "Length": 4.0, + "speckle_type": "Objects.Primitive.Interval", + "DynamicPropertyKeys": [] + }, + "zSize": { + "start": -3.0, + "end": 3.0, + "Length": 6.0, + "speckle_type": "Objects.Primitive.Interval", + "DynamicPropertyKeys": [] + }, + "units": "m", + "area": 88.0, + "volume": 48.0, + "speckle_type": "Objects.Geometry.Box", + "DynamicPropertyKeys": [] +} diff --git a/tests/Speckle.Objects.Tests.Unit/Geometry/BoxTests.cs b/tests/Speckle.Objects.Tests.Unit/Geometry/BoxTests.cs index 79a73133..716ecd32 100644 --- a/tests/Speckle.Objects.Tests.Unit/Geometry/BoxTests.cs +++ b/tests/Speckle.Objects.Tests.Unit/Geometry/BoxTests.cs @@ -1,7 +1,5 @@ -using FluentAssertions; using Speckle.Objects.Geometry; using Speckle.Sdk.Common; -using Xunit; namespace Speckle.Objects.Tests.Unit.Geometry; @@ -18,7 +16,7 @@ public class BoxTests }; [Fact] - public void CanCreateBox() + public async Task CanCreateBox() { const string UNITS = Units.Meters; var box = new Box() @@ -29,11 +27,6 @@ public class BoxTests zSize = new() { start = -3, end = 3 }, units = UNITS, }; - - // Assert area - box.area.Should().BeApproximately(2 * (2 * 4 + 2 * 6 + 4 * 6), 0.0001); - - // Assert volume - box.volume.Should().BeApproximately(2 * 4 * 6, 0.0001); + await Verify(box); } } diff --git a/tests/Speckle.Objects.Tests.Unit/Geometry/CircleTests.cs b/tests/Speckle.Objects.Tests.Unit/Geometry/CircleTests.cs index 07bfe533..6b3af807 100644 --- a/tests/Speckle.Objects.Tests.Unit/Geometry/CircleTests.cs +++ b/tests/Speckle.Objects.Tests.Unit/Geometry/CircleTests.cs @@ -1,7 +1,6 @@ using FluentAssertions; using Speckle.Objects.Geometry; using Speckle.Sdk.Common; -using Xunit; namespace Speckle.Objects.Tests.Unit.Geometry; diff --git a/tests/Speckle.Objects.Tests.Unit/Geometry/MeshTests.cs b/tests/Speckle.Objects.Tests.Unit/Geometry/MeshTests.cs index bb5c9f6d..f1ec0d5e 100644 --- a/tests/Speckle.Objects.Tests.Unit/Geometry/MeshTests.cs +++ b/tests/Speckle.Objects.Tests.Unit/Geometry/MeshTests.cs @@ -1,7 +1,6 @@ using FluentAssertions; using Speckle.Objects.Geometry; using Speckle.Sdk.Common; -using Xunit; namespace Speckle.Objects.Tests.Unit.Geometry; diff --git a/tests/Speckle.Objects.Tests.Unit/Geometry/PointTests.cs b/tests/Speckle.Objects.Tests.Unit/Geometry/PointTests.cs index eabe68c6..3bd9d736 100644 --- a/tests/Speckle.Objects.Tests.Unit/Geometry/PointTests.cs +++ b/tests/Speckle.Objects.Tests.Unit/Geometry/PointTests.cs @@ -2,7 +2,6 @@ using System.Diagnostics.CodeAnalysis; using FluentAssertions; using Speckle.Objects.Geometry; using Speckle.Sdk.Common; -using Xunit; namespace Speckle.Objects.Tests.Unit.Geometry; diff --git a/tests/Speckle.Objects.Tests.Unit/Geometry/TransformTests.cs b/tests/Speckle.Objects.Tests.Unit/Geometry/TransformTests.cs index 8581600c..ac9d61d8 100644 --- a/tests/Speckle.Objects.Tests.Unit/Geometry/TransformTests.cs +++ b/tests/Speckle.Objects.Tests.Unit/Geometry/TransformTests.cs @@ -2,7 +2,6 @@ using FluentAssertions; using Speckle.DoubleNumerics; using Speckle.Objects.Other; using Speckle.Sdk.Common; -using Xunit; namespace Speckle.Objects.Tests.Unit.Geometry; diff --git a/tests/Speckle.Objects.Tests.Unit/Global.cs b/tests/Speckle.Objects.Tests.Unit/Global.cs new file mode 100644 index 00000000..c7fc3b1f --- /dev/null +++ b/tests/Speckle.Objects.Tests.Unit/Global.cs @@ -0,0 +1 @@ +[assembly: CollectionBehavior(DisableTestParallelization = true)] diff --git a/tests/Speckle.Objects.Tests.Unit/ModelPropertySupportedTypes.cs b/tests/Speckle.Objects.Tests.Unit/ModelPropertySupportedTypes.cs index 70287fc2..c3e8e805 100644 --- a/tests/Speckle.Objects.Tests.Unit/ModelPropertySupportedTypes.cs +++ b/tests/Speckle.Objects.Tests.Unit/ModelPropertySupportedTypes.cs @@ -5,7 +5,6 @@ using Speckle.Newtonsoft.Json; using Speckle.Sdk.Host; using Speckle.Sdk.Models; using Speckle.Sdk.Serialisation; -using Xunit; namespace Speckle.Objects.Tests.Unit; diff --git a/tests/Speckle.Objects.Tests.Unit/Module.cs b/tests/Speckle.Objects.Tests.Unit/Module.cs new file mode 100644 index 00000000..999f2e69 --- /dev/null +++ b/tests/Speckle.Objects.Tests.Unit/Module.cs @@ -0,0 +1,17 @@ +using System.Runtime.CompilerServices; +using Speckle.Objects.Geometry; +using Speckle.Sdk.Host; +using Speckle.Sdk.Testing; + +namespace Speckle.Objects.Tests.Unit; + +public static class Module +{ + [ModuleInitializer] + public static void Initialize() + { + SpeckleVerify.Initialize(); + TypeLoader.Reset(); + TypeLoader.Initialize(typeof(Polyline).Assembly); + } +} diff --git a/tests/Speckle.Objects.Tests.Unit/ObjectBaseValidityTests.cs b/tests/Speckle.Objects.Tests.Unit/ObjectBaseValidityTests.cs index e3eb68db..051ee49c 100644 --- a/tests/Speckle.Objects.Tests.Unit/ObjectBaseValidityTests.cs +++ b/tests/Speckle.Objects.Tests.Unit/ObjectBaseValidityTests.cs @@ -3,7 +3,6 @@ using Speckle.Objects.Geometry; using Speckle.Objects.Geometry.Autocad; using Speckle.Sdk.Host; using Speckle.Sdk.Models; -using Xunit; using Point = Speckle.Objects.Geometry.Point; namespace Speckle.Objects.Tests.Unit; diff --git a/tests/Speckle.Objects.Tests.Unit/Speckle.Objects.Tests.Unit.csproj b/tests/Speckle.Objects.Tests.Unit/Speckle.Objects.Tests.Unit.csproj index ce38ab83..2f11c503 100644 --- a/tests/Speckle.Objects.Tests.Unit/Speckle.Objects.Tests.Unit.csproj +++ b/tests/Speckle.Objects.Tests.Unit/Speckle.Objects.Tests.Unit.csproj @@ -10,11 +10,12 @@ - + + diff --git a/tests/Speckle.Objects.Tests.Unit/Utils/MeshTriangulationHelperTests.cs b/tests/Speckle.Objects.Tests.Unit/Utils/MeshTriangulationHelperTests.cs index 2baaf8cf..cdd3cf2a 100644 --- a/tests/Speckle.Objects.Tests.Unit/Utils/MeshTriangulationHelperTests.cs +++ b/tests/Speckle.Objects.Tests.Unit/Utils/MeshTriangulationHelperTests.cs @@ -3,7 +3,6 @@ using Speckle.Objects.Geometry; using Speckle.Objects.Utils; using Speckle.Sdk.Common; using Speckle.Sdk.Dependencies; -using Xunit; namespace Speckle.Objects.Tests.Unit.Utils; diff --git a/tests/Speckle.Objects.Tests.Unit/Utils/ShallowCopyTests.cs b/tests/Speckle.Objects.Tests.Unit/Utils/ShallowCopyTests.cs index d27962e1..e7375eff 100644 --- a/tests/Speckle.Objects.Tests.Unit/Utils/ShallowCopyTests.cs +++ b/tests/Speckle.Objects.Tests.Unit/Utils/ShallowCopyTests.cs @@ -5,7 +5,6 @@ using Speckle.Objects.Geometry; using Speckle.Sdk.Common; using Speckle.Sdk.Host; using Speckle.Sdk.Models; -using Xunit; namespace Speckle.Objects.Tests.Unit.Utils; diff --git a/tests/Speckle.Objects.Tests.Unit/packages.lock.json b/tests/Speckle.Objects.Tests.Unit/packages.lock.json index 17ffda18..6592052d 100644 --- a/tests/Speckle.Objects.Tests.Unit/packages.lock.json +++ b/tests/Speckle.Objects.Tests.Unit/packages.lock.json @@ -55,16 +55,11 @@ "resolved": "0.9.6", "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" }, - "xunit": { + "xunit.assert": { "type": "Direct", "requested": "[2.9.3, )", "resolved": "2.9.3", - "contentHash": "TlXQBinK35LpOPKHAqbLY4xlEen9TBafjs0V5KnA4wZsoQLQJiirCR4CbIXvOH8NzkW4YeJKP5P/Bnrodm0h9Q==", - "dependencies": { - "xunit.analyzers": "1.18.0", - "xunit.assert": "2.9.3", - "xunit.core": "[2.9.3]" - } + "contentHash": "/Kq28fCE7MjOV42YLVRAJzRF0WmEqsmflm0cfpMjGtzQ2lR5mYVj1/i0Y8uDAOLczkL3/jArrwehfMD0YogMAA==" }, "xunit.runner.visualstudio": { "type": "Direct", @@ -72,6 +67,30 @@ "resolved": "3.0.1", "contentHash": "lbyYtsBxA8Pz8kaf5Xn/Mj1mL9z2nlBWdZhqFaj66nxXBa4JwiTDm4eGcpSMet6du9TOWI6bfha+gQR6+IHawg==" }, + "Argon": { + "type": "Transitive", + "resolved": "0.26.0", + "contentHash": "n7btGXdtRyprGnpLMpBs6rLScxlvPtVWwmTR8h7CtJvpZXBGhGvibEdZxRjeTZNrwf403jJ0ZPpt35Pz/NaNsw==" + }, + "DiffEngine": { + "type": "Transitive", + "resolved": "15.8.0", + "contentHash": "+2cUvCcpUWziG6hnns6lwxkj6VVA+WsEGx3JqHIAt/1D7p+zpyWebqXihcfXzrZ5EqQmM4h+PpuUhYWH0TeCvQ==", + "dependencies": { + "EmptyFiles": "8.7.1", + "System.Management": "9.0.0" + } + }, + "EmptyFiles": { + "type": "Transitive", + "resolved": "8.7.1", + "contentHash": "C8pvg0TvG2Mkn5LGNFGkFgFu8SUgYFwiu8U3y34qGQnnwKmGnlQTfTIUrtzfSjPxA4q7L/kRu09U5p32otZ2Aw==" + }, + "FSharp.Core": { + "type": "Transitive", + "resolved": "7.0.300", + "contentHash": "8vvItREJ1l5lcp3vBCSJ1mFevVAhR48I34DuF/EoUa7o1KlFpQpagyuZkVYMAsHPIjdp47ZxM9sI4eqeXaeWkA==" + }, "GraphQL.Client.Abstractions": { "type": "Transitive", "resolved": "6.0.0", @@ -191,6 +210,20 @@ "resolved": "13.0.1", "contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==" }, + "Quibble": { + "type": "Transitive", + "resolved": "0.3.1", + "contentHash": "LD6bz2p+4O/BQnmD4mqFZrmdN/IjsPo1wUvfmcH46Q05ng+dyMLl3d2ylj0x412F4fpJEtm0Z3EaCAx4FqgNuQ==", + "dependencies": { + "FSharp.Core": "7.0.300", + "System.Text.Json": "7.0.3" + } + }, + "SimpleInfoName": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "j+ENh86NhxrgDc6T1ueqIR2QOdDkSJY2dbTFyPN/JvIXifB4GHAunlMw/x7P6m7XaXEHr3s+SMZfKBlmnmkO6g==" + }, "SQLitePCLRaw.bundle_e_sqlite3": { "type": "Transitive", "resolved": "2.1.4", @@ -221,6 +254,11 @@ "SQLitePCLRaw.core": "2.1.4" } }, + "System.CodeDom": { + "type": "Transitive", + "resolved": "9.0.0", + "contentHash": "oTE5IfuMoET8yaZP/vdvy9xO47guAv/rOhe4DODuFBN3ySprcQOlXqO3j+e/H/YpKKR5sglrxRaZ2HYOhNJrqA==" + }, "System.ComponentModel.Annotations": { "type": "Transitive", "resolved": "4.5.0", @@ -243,6 +281,19 @@ "Microsoft.Win32.SystemEvents": "6.0.0" } }, + "System.IO.Hashing": { + "type": "Transitive", + "resolved": "9.0.0", + "contentHash": "seeO8icDfED/Qwl9PDFUx2Gf/7xv7dPsMnw5PnRwNZuz4EWMpy0wIVohC4MfCcTIoJgp+KUrWG4WH3NPSusQOA==" + }, + "System.Management": { + "type": "Transitive", + "resolved": "9.0.0", + "contentHash": "bVh4xAMI5grY5GZoklKcMBLirhC8Lqzp63Ft3zXJacwGAlLyFdF4k0qz4pnKIlO6HyL2Z4zqmHm9UkzEo6FFsA==", + "dependencies": { + "System.CodeDom": "9.0.0" + } + }, "System.Memory": { "type": "Transitive", "resolved": "4.5.3", @@ -282,6 +333,19 @@ "System.Windows.Extensions": "6.0.0" } }, + "System.Text.Encodings.Web": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==" + }, + "System.Text.Json": { + "type": "Transitive", + "resolved": "8.0.4", + "contentHash": "bAkhgDJ88XTsqczoxEMliSrpijKZHhbJQldhAmObj/RbrN3sU5dcokuXmWJWsdQAhiMJ9bTayWsL1C9fbbCRhw==", + "dependencies": { + "System.Text.Encodings.Web": "8.0.0" + } + }, "System.Windows.Extensions": { "type": "Transitive", "resolved": "6.0.0", @@ -295,25 +359,6 @@ "resolved": "2.0.3", "contentHash": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg==" }, - "xunit.analyzers": { - "type": "Transitive", - "resolved": "1.18.0", - "contentHash": "OtFMHN8yqIcYP9wcVIgJrq01AfTxijjAqVDy/WeQVSyrDC1RzBWeQPztL49DN2syXRah8TYnfvk035s7L95EZQ==" - }, - "xunit.assert": { - "type": "Transitive", - "resolved": "2.9.3", - "contentHash": "/Kq28fCE7MjOV42YLVRAJzRF0WmEqsmflm0cfpMjGtzQ2lR5mYVj1/i0Y8uDAOLczkL3/jArrwehfMD0YogMAA==" - }, - "xunit.core": { - "type": "Transitive", - "resolved": "2.9.3", - "contentHash": "BiAEvqGvyme19wE0wTKdADH+NloYqikiU0mcnmiNyXaF9HyHmE6sr/3DC5vnBkgsWaE6yPyWszKSPSApWdRVeQ==", - "dependencies": { - "xunit.extensibility.core": "[2.9.3]", - "xunit.extensibility.execution": "[2.9.3]" - } - }, "xunit.extensibility.core": { "type": "Transitive", "resolved": "2.9.3", @@ -352,6 +397,16 @@ "speckle.sdk.dependencies": { "type": "Project" }, + "speckle.sdk.testing": { + "type": "Project", + "dependencies": { + "Microsoft.NET.Test.Sdk": "[17.12.0, )", + "Speckle.Sdk": "[1.0.0, )", + "Verify.Quibble": "[2.1.1, )", + "Verify.Xunit": "[28.9.0, )", + "xunit.runner.visualstudio": "[3.0.1, )" + } + }, "GraphQL.Client": { "type": "CentralTransitive", "requested": "[6.0.0, )", @@ -408,6 +463,44 @@ "requested": "[13.0.2, )", "resolved": "13.0.2", "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" + }, + "Verify": { + "type": "CentralTransitive", + "requested": "[28.9.0, )", + "resolved": "28.9.0", + "contentHash": "qni0zDkkYSPIhnYejZCOq5ueH+y0s7kEdpSbFXarcxP7rjZvZD0Yuc567KFVFMbVRAo9IORfv9zcXtTGFmpz8A==", + "dependencies": { + "Argon": "0.26.0", + "DiffEngine": "15.8.0", + "SimpleInfoName": "3.1.0", + "System.IO.Hashing": "9.0.0" + } + }, + "Verify.Quibble": { + "type": "CentralTransitive", + "requested": "[2.1.1, )", + "resolved": "2.1.1", + "contentHash": "Z8bVwFICa3Dog6Mcnx0wlrn4Y+CFpQXx1f+ijfLn6/v4q00q+jLm9Gu/nVyUFuc75cjn6ieI08UrqXKcR9fTYw==", + "dependencies": { + "Quibble": "0.3.1", + "System.Text.Json": "8.0.4", + "Verify": "26.1.1" + } + }, + "Verify.Xunit": { + "type": "CentralTransitive", + "requested": "[28.9.0, )", + "resolved": "28.9.0", + "contentHash": "YlgbJzajNvnzTVqWtZuWdZFcShX4MyQqM4FJ28qSf7hY8wvB8G6y2EwHit+Wz/nYrdnCXWYK81JR7dxTxSeuDg==", + "dependencies": { + "Argon": "0.26.0", + "DiffEngine": "15.8.0", + "SimpleInfoName": "3.1.0", + "System.IO.Hashing": "9.0.0", + "Verify": "28.9.0", + "xunit.abstractions": "2.0.3", + "xunit.extensibility.execution": "2.9.3" + } } } } diff --git a/tests/Speckle.Sdk.Serialization.Tests/Assembly.cs b/tests/Speckle.Sdk.Serialization.Tests/Assembly.cs deleted file mode 100644 index a4bcec54..00000000 --- a/tests/Speckle.Sdk.Serialization.Tests/Assembly.cs +++ /dev/null @@ -1,3 +0,0 @@ -using Xunit; - -[assembly: CollectionBehavior(DisableTestParallelization = true)] diff --git a/tests/Speckle.Sdk.Serialization.Tests/BaseComparer.cs b/tests/Speckle.Sdk.Serialization.Tests/BaseComparer.cs deleted file mode 100644 index a7db9618..00000000 --- a/tests/Speckle.Sdk.Serialization.Tests/BaseComparer.cs +++ /dev/null @@ -1,57 +0,0 @@ -using Speckle.Sdk.Models; - -namespace Speckle.Sdk.Serialization.Tests; - -public class BaseComparer : IEqualityComparer -{ - public bool Equals(Base? x, Base? y) - { - if (ReferenceEquals(x, y)) - { - return true; - } - - if (x is null) - { - return false; - } - - if (y is null) - { - return false; - } - - Type type = x.GetType(); - if (type != y.GetType()) - { - return false; - } - - var types = DynamicBaseMemberType.Instance | DynamicBaseMemberType.Dynamic | DynamicBaseMemberType.SchemaIgnored; - var membersX = x.GetMembers(types); - var membersY = y.GetMembers(types); - if (membersX.Count != membersY.Count) - { - return false; - } - - foreach (var kvp in membersX) - { - var propertyInfo = type.GetProperty(kvp.Key); - if (propertyInfo is not null && !propertyInfo.CanWrite) - { - continue; - } - if (y[kvp.Key] != kvp.Value) - { - return false; - } - } - return x.id == y.id && x.applicationId == y.applicationId; - } - - public int GetHashCode(Base obj) - { - return HashCode.Combine(obj.id, obj.applicationId); - } -} diff --git a/tests/Speckle.Sdk.Serialization.Tests/DetachedTests.CanSerialize_New_Detached.verified.json b/tests/Speckle.Sdk.Serialization.Tests/DetachedTests.CanSerialize_New_Detached.verified.json new file mode 100644 index 00000000..77406846 --- /dev/null +++ b/tests/Speckle.Sdk.Serialization.Tests/DetachedTests.CanSerialize_New_Detached.verified.json @@ -0,0 +1,31 @@ +{ + "9ff8efb13c62fa80f3d1c4519376ba13": { + "__closure": { + "d3dd4621b2f68c3058c2b9c023a9de19": 100 + }, + "applicationId": null, + "arr": null, + "attachedProp": { + "applicationId": null, + "id": "90d58b65c9036a8bc50743f4c71c1c2e", + "name": "attachedProp", + "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SamplePropBase" + }, + "crazyProp": null, + "detachedProp": { + "__closure": null, + "referencedId": "d3dd4621b2f68c3058c2b9c023a9de19", + "speckle_type": "reference" + }, + "dynamicProp": 123, + "id": "9ff8efb13c62fa80f3d1c4519376ba13", + "list": [], + "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SampleObjectBase" + }, + "d3dd4621b2f68c3058c2b9c023a9de19": { + "applicationId": null, + "id": "d3dd4621b2f68c3058c2b9c023a9de19", + "name": "detachedProp", + "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SamplePropBase" + } +} diff --git a/tests/Speckle.Sdk.Serialization.Tests/DetachedTests.CanSerialize_New_Detached2.verified.json b/tests/Speckle.Sdk.Serialization.Tests/DetachedTests.CanSerialize_New_Detached2.verified.json new file mode 100644 index 00000000..be3c516f --- /dev/null +++ b/tests/Speckle.Sdk.Serialization.Tests/DetachedTests.CanSerialize_New_Detached2.verified.json @@ -0,0 +1,187 @@ +{ + "027a7c5ffcf8d8efe432899c729a954c": { + "__closure": { + "045cbee36837d589b17f9d8483c90763": 100, + "1afc694774efa5913d0077302cd37888": 100, + "32a385e7ddeda810e037b21ab26381b7": 100, + "4ba53b5e84e956fb076bc8b0a03ca879": 100, + "5b86b66b61c556ead500915b05852875": 100, + "8d27f5c7fac36d985d89bb6d6d8acddc": 100, + "c3858f47dd3e7a308a1b465375f1645f": 100 + }, + "applicationId": null, + "area": 0.0, + "bbox": null, + "closed": false, + "domain": { + "applicationId": null, + "end": 1.0, + "id": "4d47df83148d8bad7bd2657bd9158b4c", + "speckle_type": "Objects.Primitive.Interval", + "start": 0.0 + }, + "id": "027a7c5ffcf8d8efe432899c729a954c", + "length": 0.0, + "speckle_type": "Objects.Geometry.Polyline", + "units": "test", + "value": [ + { + "__closure": null, + "referencedId": "5b86b66b61c556ead500915b05852875", + "speckle_type": "reference" + } + ] + }, + "045cbee36837d589b17f9d8483c90763": { + "__closure": { + "1afc694774efa5913d0077302cd37888": 100 + }, + "applicationId": null, + "area": 0.0, + "bbox": null, + "closed": false, + "domain": { + "applicationId": null, + "end": 1.0, + "id": "4d47df83148d8bad7bd2657bd9158b4c", + "speckle_type": "Objects.Primitive.Interval", + "start": 0.0 + }, + "id": "045cbee36837d589b17f9d8483c90763", + "length": 0.0, + "speckle_type": "Objects.Geometry.Polyline", + "units": "test", + "value": [ + { + "__closure": null, + "referencedId": "1afc694774efa5913d0077302cd37888", + "speckle_type": "reference" + } + ] + }, + "1afc694774efa5913d0077302cd37888": { + "applicationId": null, + "data": [ + 3.0, + 2.0 + ], + "id": "1afc694774efa5913d0077302cd37888", + "speckle_type": "Speckle.Core.Models.DataChunk" + }, + "2ebfd4f317754fce14cadd001151441e": { + "__closure": { + "027a7c5ffcf8d8efe432899c729a954c": 100, + "045cbee36837d589b17f9d8483c90763": 100, + "1afc694774efa5913d0077302cd37888": 100, + "32a385e7ddeda810e037b21ab26381b7": 100, + "4ba53b5e84e956fb076bc8b0a03ca879": 100, + "5b86b66b61c556ead500915b05852875": 100, + "8d27f5c7fac36d985d89bb6d6d8acddc": 100, + "c3858f47dd3e7a308a1b465375f1645f": 100 + }, + "applicationId": "1", + "arr": null, + "attachedProp": { + "applicationId": "4", + "id": "c5dd540ee1299c0349829d045c04ef2d", + "line": { + "__closure": null, + "referencedId": "027a7c5ffcf8d8efe432899c729a954c", + "speckle_type": "reference" + }, + "name": "attachedProp", + "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SamplePropBase2" + }, + "crazyProp": null, + "detachedProp": { + "__closure": null, + "referencedId": "32a385e7ddeda810e037b21ab26381b7", + "speckle_type": "reference" + }, + "detachedProp2": { + "__closure": null, + "referencedId": "c3858f47dd3e7a308a1b465375f1645f", + "speckle_type": "reference" + }, + "dynamicProp": 123, + "id": "2ebfd4f317754fce14cadd001151441e", + "list": [], + "list2": null, + "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SampleObjectBase2" + }, + "32a385e7ddeda810e037b21ab26381b7": { + "__closure": { + "4ba53b5e84e956fb076bc8b0a03ca879": 100, + "8d27f5c7fac36d985d89bb6d6d8acddc": 100 + }, + "applicationId": "2", + "id": "32a385e7ddeda810e037b21ab26381b7", + "line": { + "__closure": null, + "referencedId": "4ba53b5e84e956fb076bc8b0a03ca879", + "speckle_type": "reference" + }, + "name": "detachedProp", + "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SamplePropBase2" + }, + "4ba53b5e84e956fb076bc8b0a03ca879": { + "__closure": { + "8d27f5c7fac36d985d89bb6d6d8acddc": 100 + }, + "applicationId": null, + "area": 0.0, + "bbox": null, + "closed": false, + "domain": { + "applicationId": null, + "end": 1.0, + "id": "4d47df83148d8bad7bd2657bd9158b4c", + "speckle_type": "Objects.Primitive.Interval", + "start": 0.0 + }, + "id": "4ba53b5e84e956fb076bc8b0a03ca879", + "length": 0.0, + "speckle_type": "Objects.Geometry.Polyline", + "units": "test", + "value": [ + { + "__closure": null, + "referencedId": "8d27f5c7fac36d985d89bb6d6d8acddc", + "speckle_type": "reference" + } + ] + }, + "5b86b66b61c556ead500915b05852875": { + "applicationId": null, + "data": [ + 3.0, + 4.0 + ], + "id": "5b86b66b61c556ead500915b05852875", + "speckle_type": "Speckle.Core.Models.DataChunk" + }, + "8d27f5c7fac36d985d89bb6d6d8acddc": { + "applicationId": null, + "data": [ + 1.0, + 2.0 + ], + "id": "8d27f5c7fac36d985d89bb6d6d8acddc", + "speckle_type": "Speckle.Core.Models.DataChunk" + }, + "c3858f47dd3e7a308a1b465375f1645f": { + "__closure": { + "045cbee36837d589b17f9d8483c90763": 100, + "1afc694774efa5913d0077302cd37888": 100 + }, + "applicationId": "3", + "id": "c3858f47dd3e7a308a1b465375f1645f", + "line": { + "__closure": null, + "referencedId": "045cbee36837d589b17f9d8483c90763", + "speckle_type": "reference" + }, + "name": "detachedProp2", + "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SamplePropBase2" + } +} diff --git a/tests/Speckle.Sdk.Serialization.Tests/DetachedTests.CanSerialize_New_Detached_With_DataChunks2.verified.json b/tests/Speckle.Sdk.Serialization.Tests/DetachedTests.CanSerialize_New_Detached_With_DataChunks2.verified.json new file mode 100644 index 00000000..ec12e5c4 --- /dev/null +++ b/tests/Speckle.Sdk.Serialization.Tests/DetachedTests.CanSerialize_New_Detached_With_DataChunks2.verified.json @@ -0,0 +1,63 @@ +{ + "0e61e61edee00404ec6e0f9f594bce24": { + "applicationId": null, + "data": [ + 1.0, + 2.0, + 3.0, + 4.0, + 5.0, + 6.0, + 7.0, + 8.0, + 9.0, + 10.0 + ], + "id": "0e61e61edee00404ec6e0f9f594bce24", + "speckle_type": "Speckle.Core.Models.DataChunk" + }, + "525b1e9eef4d07165abb4ffc518395fc": { + "__closure": { + "0e61e61edee00404ec6e0f9f594bce24": 100, + "f70738e3e3e593ac11099a6ed6b71154": 100 + }, + "applicationId": "1", + "arr": [ + { + "__closure": null, + "referencedId": "f70738e3e3e593ac11099a6ed6b71154", + "speckle_type": "reference" + } + ], + "attachedProp": null, + "crazyProp": null, + "detachedProp": null, + "detachedProp2": null, + "dynamicProp": 123, + "id": "525b1e9eef4d07165abb4ffc518395fc", + "list": [ + { + "__closure": null, + "referencedId": "0e61e61edee00404ec6e0f9f594bce24", + "speckle_type": "reference" + } + ], + "list2": [ + { + "__closure": null, + "referencedId": "f70738e3e3e593ac11099a6ed6b71154", + "speckle_type": "reference" + } + ], + "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SampleObjectBase2" + }, + "f70738e3e3e593ac11099a6ed6b71154": { + "applicationId": null, + "data": [ + 1.0, + 10.0 + ], + "id": "f70738e3e3e593ac11099a6ed6b71154", + "speckle_type": "Speckle.Core.Models.DataChunk" + } +} diff --git a/tests/Speckle.Sdk.Serialization.Tests/DetachedTests.CanSerialize_Old_Detached.verified.json b/tests/Speckle.Sdk.Serialization.Tests/DetachedTests.CanSerialize_Old_Detached.verified.json new file mode 100644 index 00000000..f10c987a --- /dev/null +++ b/tests/Speckle.Sdk.Serialization.Tests/DetachedTests.CanSerialize_Old_Detached.verified.json @@ -0,0 +1,31 @@ +{ + "9ff8efb13c62fa80f3d1c4519376ba13": { + "__closure": { + "d3dd4621b2f68c3058c2b9c023a9de19": 1 + }, + "applicationId": null, + "arr": null, + "attachedProp": { + "applicationId": null, + "id": "90d58b65c9036a8bc50743f4c71c1c2e", + "name": "attachedProp", + "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SamplePropBase" + }, + "crazyProp": null, + "detachedProp": { + "__closure": null, + "referencedId": "d3dd4621b2f68c3058c2b9c023a9de19", + "speckle_type": "reference" + }, + "dynamicProp": 123, + "id": "9ff8efb13c62fa80f3d1c4519376ba13", + "list": [], + "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SampleObjectBase" + }, + "d3dd4621b2f68c3058c2b9c023a9de19": { + "applicationId": null, + "id": "d3dd4621b2f68c3058c2b9c023a9de19", + "name": "detachedProp", + "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SamplePropBase" + } +} diff --git a/tests/Speckle.Sdk.Serialization.Tests/DetachedTests.GetPropertiesExpected_All.verified.json b/tests/Speckle.Sdk.Serialization.Tests/DetachedTests.GetPropertiesExpected_All.verified.json new file mode 100644 index 00000000..9525e06d --- /dev/null +++ b/tests/Speckle.Sdk.Serialization.Tests/DetachedTests.GetPropertiesExpected_All.verified.json @@ -0,0 +1,88 @@ +[ + { + "Name": "list", + "PropertyAttributeInfo": { + "ChunkSize": 1000, + "IsChunkable": true, + "IsDetachable": true + }, + "Value": [] + }, + { + "Name": "arr", + "PropertyAttributeInfo": { + "ChunkSize": 300, + "IsChunkable": true, + "IsDetachable": true + } + }, + { + "Name": "detachedProp", + "PropertyAttributeInfo": { + "ChunkSize": 1000, + "IsChunkable": false, + "IsDetachable": true + }, + "Value": { + "name": "detachedProp", + "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SamplePropBase", + "DynamicPropertyKeys": [] + } + }, + { + "Name": "attachedProp", + "PropertyAttributeInfo": { + "ChunkSize": 1000, + "IsChunkable": false, + "IsDetachable": false + }, + "Value": { + "name": "attachedProp", + "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SamplePropBase", + "DynamicPropertyKeys": [] + } + }, + { + "Name": "crazyProp", + "PropertyAttributeInfo": { + "ChunkSize": 1000, + "IsChunkable": false, + "IsDetachable": false + } + }, + { + "Name": "applicationId", + "PropertyAttributeInfo": { + "ChunkSize": 1000, + "IsChunkable": false, + "IsDetachable": false + } + }, + { + "Name": "speckle_type", + "PropertyAttributeInfo": { + "ChunkSize": 1000, + "IsChunkable": false, + "IsDetachable": false + }, + "Value": "Speckle.Core.Tests.Unit.Models.BaseTests+SampleObjectBase" + }, + { + "Name": "dynamicProp", + "PropertyAttributeInfo": { + "ChunkSize": 1000, + "IsChunkable": false, + "IsDetachable": false + }, + "Value": 123 + }, + { + "Name": "@prop2", + "PropertyAttributeInfo": { + "ChunkSize": -1, + "IsChunkable": false, + "IsDetachable": true + }, + "Value": 2 + } +] diff --git a/tests/Speckle.Sdk.Serialization.Tests/DetachedTests.GetPropertiesExpected_Detached.verified.json b/tests/Speckle.Sdk.Serialization.Tests/DetachedTests.GetPropertiesExpected_Detached.verified.json new file mode 100644 index 00000000..0c3b268e --- /dev/null +++ b/tests/Speckle.Sdk.Serialization.Tests/DetachedTests.GetPropertiesExpected_Detached.verified.json @@ -0,0 +1,41 @@ +[ + { + "Name": "list", + "PropertyAttributeInfo": { + "ChunkSize": 1000, + "IsChunkable": true, + "IsDetachable": true + }, + "Value": [] + }, + { + "Name": "arr", + "PropertyAttributeInfo": { + "ChunkSize": 300, + "IsChunkable": true, + "IsDetachable": true + } + }, + { + "Name": "detachedProp", + "PropertyAttributeInfo": { + "ChunkSize": 1000, + "IsChunkable": false, + "IsDetachable": true + }, + "Value": { + "name": "detachedProp", + "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SamplePropBase", + "DynamicPropertyKeys": [] + } + }, + { + "Name": "@prop2", + "PropertyAttributeInfo": { + "ChunkSize": -1, + "IsChunkable": false, + "IsDetachable": true + }, + "Value": 2 + } +] diff --git a/tests/Speckle.Sdk.Serialization.Tests/DetachedTests.cs b/tests/Speckle.Sdk.Serialization.Tests/DetachedTests.cs index 28bc847f..2a851a02 100644 --- a/tests/Speckle.Sdk.Serialization.Tests/DetachedTests.cs +++ b/tests/Speckle.Sdk.Serialization.Tests/DetachedTests.cs @@ -10,7 +10,6 @@ using Speckle.Sdk.Serialisation.V2; using Speckle.Sdk.Serialisation.V2.Send; using Speckle.Sdk.SQLite; using Speckle.Sdk.Transports; -using Xunit; namespace Speckle.Sdk.Serialization.Tests; @@ -22,42 +21,9 @@ public class DetachedTests TypeLoader.Initialize(typeof(Base).Assembly, typeof(DetachedTests).Assembly, typeof(Polyline).Assembly); } - [Fact(DisplayName = "Checks that all typed properties (including obsolete ones) are returned")] + [Fact] public async Task CanSerialize_New_Detached() { - var expectedJson = """ - { - "list": [], - "arr": null, - "detachedProp": { - "speckle_type": "reference", - "referencedId": "d3dd4621b2f68c3058c2b9c023a9de19", - "__closure": null - }, - "attachedProp": { - "name": "attachedProp", - "applicationId": null, - "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SamplePropBase", - "id": "90d58b65c9036a8bc50743f4c71c1c2e" - }, - "crazyProp": null, - "applicationId": null, - "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SampleObjectBase", - "dynamicProp": 123, - "id": "9ff8efb13c62fa80f3d1c4519376ba13", - "__closure": { - "d3dd4621b2f68c3058c2b9c023a9de19": 100 - } - } - """; - var detachedJson = """ - { - "name": "detachedProp", - "applicationId": null, - "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SamplePropBase", - "id": "d3dd4621b2f68c3058c2b9c023a9de19" - } - """; var @base = new SampleObjectBase(); @base["dynamicProp"] = 123; @base.detachedProp = new SamplePropBase() { name = "detachedProp" }; @@ -75,55 +41,12 @@ public class DetachedTests ); await process2.Serialize(@base, default); - objects.Count.Should().Be(2); - objects.ContainsKey("9ff8efb13c62fa80f3d1c4519376ba13").Should().BeTrue(); - objects.ContainsKey("d3dd4621b2f68c3058c2b9c023a9de19").Should().BeTrue(); - JToken - .DeepEquals(JObject.Parse(expectedJson), JObject.Parse(objects["9ff8efb13c62fa80f3d1c4519376ba13"])) - .Should() - .BeTrue(); - JToken - .DeepEquals(JObject.Parse(detachedJson), JObject.Parse(objects["d3dd4621b2f68c3058c2b9c023a9de19"])) - .Should() - .BeTrue(); + await VerifyJsonDictionary(objects); } - [Fact(DisplayName = "Checks that all typed properties (including obsolete ones) are returned")] - public void CanSerialize_Old_Detached() + [Fact] + public async Task CanSerialize_Old_Detached() { - var expectedJson = """ - { - "list": [], - "arr": null, - "detachedProp": { - "speckle_type": "reference", - "referencedId": "d3dd4621b2f68c3058c2b9c023a9de19", - "__closure": null - }, - "attachedProp": { - "name": "attachedProp", - "applicationId": null, - "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SamplePropBase", - "id": "90d58b65c9036a8bc50743f4c71c1c2e" - }, - "crazyProp": null, - "applicationId": null, - "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SampleObjectBase", - "dynamicProp": 123, - "id": "9ff8efb13c62fa80f3d1c4519376ba13", - "__closure": { - "d3dd4621b2f68c3058c2b9c023a9de19": 1 - } - } - """; - var detachedJson = """ - { - "name": "detachedProp", - "applicationId": null, - "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SamplePropBase", - "id": "d3dd4621b2f68c3058c2b9c023a9de19" - } - """; var @base = new SampleObjectBase(); @base["dynamicProp"] = 123; @base.detachedProp = new SamplePropBase() { name = "detachedProp" }; @@ -131,27 +54,13 @@ public class DetachedTests var objects = new ConcurrentDictionary(); var serializer = new SpeckleObjectSerializer(new[] { new MemoryTransport(objects) }); - var json = serializer.Serialize(@base); + serializer.Serialize(@base); - objects.Count.Should().Be(2); - objects.ContainsKey("9ff8efb13c62fa80f3d1c4519376ba13").Should().BeTrue(); - objects.ContainsKey("d3dd4621b2f68c3058c2b9c023a9de19").Should().BeTrue(); - JToken - .DeepEquals(JObject.Parse(json), JObject.Parse(objects["9ff8efb13c62fa80f3d1c4519376ba13"])) - .Should() - .BeTrue(); - JToken - .DeepEquals(JObject.Parse(expectedJson), JObject.Parse(objects["9ff8efb13c62fa80f3d1c4519376ba13"])) - .Should() - .BeTrue(); - JToken - .DeepEquals(JObject.Parse(detachedJson), JObject.Parse(objects["d3dd4621b2f68c3058c2b9c023a9de19"])) - .Should() - .BeTrue(); + await VerifyJsonDictionary(objects); } [Fact] - public void GetPropertiesExpected_Detached() + public async Task GetPropertiesExpected_Detached() { var @base = new SampleObjectBase(); @base["dynamicProp"] = 123; @@ -161,16 +70,11 @@ public class DetachedTests @base.attachedProp = new SamplePropBase() { name = "attachedProp" }; var children = new BaseChildFinder(new BasePropertyGatherer()).GetChildProperties(@base).ToList(); - - children.Count.Should().Be(4); - children.First(x => x.Name == "detachedProp").PropertyAttributeInfo.IsDetachable.Should().BeTrue(); - children.First(x => x.Name == "list").PropertyAttributeInfo.IsDetachable.Should().BeTrue(); - children.First(x => x.Name == "arr").PropertyAttributeInfo.IsDetachable.Should().BeTrue(); - children.First(x => x.Name == "@prop2").PropertyAttributeInfo.IsDetachable.Should().BeTrue(); + await Verify(children); } [Fact] - public void GetPropertiesExpected_All() + public async Task GetPropertiesExpected_All() { var @base = new SampleObjectBase(); @base["dynamicProp"] = 123; @@ -180,66 +84,12 @@ public class DetachedTests @base.attachedProp = new SamplePropBase() { name = "attachedProp" }; var children = new BasePropertyGatherer().ExtractAllProperties(@base).ToList(); - - children.Count.Should().Be(9); - children.First(x => x.Name == "dynamicProp").PropertyAttributeInfo.IsDetachable.Should().BeFalse(); - children.First(x => x.Name == "attachedProp").PropertyAttributeInfo.IsDetachable.Should().BeFalse(); - children.First(x => x.Name == "crazyProp").PropertyAttributeInfo.IsDetachable.Should().BeFalse(); - children.First(x => x.Name == "speckle_type").PropertyAttributeInfo.IsDetachable.Should().BeFalse(); - children.First(x => x.Name == "applicationId").PropertyAttributeInfo.IsDetachable.Should().BeFalse(); - - children.First(x => x.Name == "detachedProp").PropertyAttributeInfo.IsDetachable.Should().BeTrue(); - children.First(x => x.Name == "list").PropertyAttributeInfo.IsDetachable.Should().BeTrue(); - children.First(x => x.Name == "arr").PropertyAttributeInfo.IsDetachable.Should().BeTrue(); - children.First(x => x.Name == "@prop2").PropertyAttributeInfo.IsDetachable.Should().BeTrue(); + await Verify(children); } - [Fact(DisplayName = "Checks that all typed properties (including obsolete ones) are returned")] + [Fact] public async Task CanSerialize_New_Detached2() { - var root = """ - { - "list" : [ ], - "list2" : null, - "arr" : null, - "detachedProp" : { - "speckle_type" : "reference", - "referencedId" : "32a385e7ddeda810e037b21ab26381b7", - "__closure" : null - }, - "detachedProp2" : { - "speckle_type" : "reference", - "referencedId" : "c3858f47dd3e7a308a1b465375f1645f", - "__closure" : null - }, - "attachedProp" : { - "name" : "attachedProp", - "line" : { - "speckle_type" : "reference", - "referencedId" : "027a7c5ffcf8d8efe432899c729a954c", - "__closure" : null - }, - "applicationId" : "4", - "speckle_type" : "Speckle.Core.Tests.Unit.Models.BaseTests+SamplePropBase2", - "id" : "c5dd540ee1299c0349829d045c04ef2d" - }, - "crazyProp" : null, - "applicationId" : "1", - "speckle_type" : "Speckle.Core.Tests.Unit.Models.BaseTests+SampleObjectBase2", - "dynamicProp" : 123, - "id" : "2ebfd4f317754fce14cadd001151441e", - "__closure" : { - "8d27f5c7fac36d985d89bb6d6d8acddc" : 100, - "4ba53b5e84e956fb076bc8b0a03ca879" : 100, - "32a385e7ddeda810e037b21ab26381b7" : 100, - "1afc694774efa5913d0077302cd37888" : 100, - "045cbee36837d589b17f9d8483c90763" : 100, - "c3858f47dd3e7a308a1b465375f1645f" : 100, - "5b86b66b61c556ead500915b05852875" : 100, - "027a7c5ffcf8d8efe432899c729a954c" : 100 - } - } - """; var @base = new SampleObjectBase2(); @base["dynamicProp"] = 123; @base.applicationId = "1"; @@ -274,15 +124,10 @@ public class DetachedTests ); var results = await process2.Serialize(@base, default); - objects.Count.Should().Be(9); - var x = JObject.Parse(objects["2ebfd4f317754fce14cadd001151441e"]); - JToken.DeepEquals(JObject.Parse(root), x).Should().BeTrue(); - - results.RootId.Should().Be(@base.id); - results.ConvertedReferences.Count.Should().Be(2); + await VerifyJsonDictionary(objects); } - [Fact(DisplayName = "Checks that all typed properties (including obsolete ones) are returned")] + [Fact] public async Task CanSerialize_New_Detached_With_DataChunks() { var root = """ @@ -358,57 +203,9 @@ public class DetachedTests JToken.DeepEquals(JObject.Parse(list2), x).Should().BeTrue(); } - [Fact(DisplayName = "Checks that all typed properties (including obsolete ones) are returned")] + [Fact] public async Task CanSerialize_New_Detached_With_DataChunks2() { - var root = """ - { - "list" : [ { - "speckle_type" : "reference", - "referencedId" : "0e61e61edee00404ec6e0f9f594bce24", - "__closure" : null - } ], - "list2" : [ { - "speckle_type" : "reference", - "referencedId" : "f70738e3e3e593ac11099a6ed6b71154", - "__closure" : null - } ], - "arr" : [ { - "speckle_type" : "reference", - "referencedId" : "f70738e3e3e593ac11099a6ed6b71154", - "__closure" : null - } ], - "detachedProp" : null, - "detachedProp2" : null, - "attachedProp" : null, - "crazyProp" : null, - "applicationId" : "1", - "speckle_type" : "Speckle.Core.Tests.Unit.Models.BaseTests+SampleObjectBase2", - "dynamicProp" : 123, - "id" : "525b1e9eef4d07165abb4ffc518395fc", - "__closure" : { - "0e61e61edee00404ec6e0f9f594bce24" : 100, - "f70738e3e3e593ac11099a6ed6b71154" : 100 - } - } - """; - - var list1 = """ - { - "data" : [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0 ], - "applicationId" : null, - "speckle_type" : "Speckle.Core.Models.DataChunk", - "id" : "0e61e61edee00404ec6e0f9f594bce24" - } - """; - var list2 = """ - { - "data" : [ 1.0, 10.0 ], - "applicationId" : null, - "speckle_type" : "Speckle.Core.Models.DataChunk", - "id" : "f70738e3e3e593ac11099a6ed6b71154" - } - """; var @base = new SampleObjectBase2(); @base["dynamicProp"] = 123; @base.applicationId = "1"; @@ -427,16 +224,7 @@ public class DetachedTests new SerializeProcessOptions(false, false, true, true) ); var results = await process2.Serialize(@base, default); - - objects.Count.Should().Be(3); - var x = JObject.Parse(objects["525b1e9eef4d07165abb4ffc518395fc"]); - JToken.DeepEquals(JObject.Parse(root), x).Should().BeTrue(); - - x = JObject.Parse(objects["0e61e61edee00404ec6e0f9f594bce24"]); - JToken.DeepEquals(JObject.Parse(list1), x).Should().BeTrue(); - - x = JObject.Parse(objects["f70738e3e3e593ac11099a6ed6b71154"]); - JToken.DeepEquals(JObject.Parse(list2), x).Should().BeTrue(); + await VerifyJsonDictionary(objects); } } diff --git a/tests/Speckle.Sdk.Serialization.Tests/ExplicitInterfaceTests.Test_ExtractAllProperties.verified.json b/tests/Speckle.Sdk.Serialization.Tests/ExplicitInterfaceTests.Test_ExtractAllProperties.verified.json new file mode 100644 index 00000000..d4b13fa0 --- /dev/null +++ b/tests/Speckle.Sdk.Serialization.Tests/ExplicitInterfaceTests.Test_ExtractAllProperties.verified.json @@ -0,0 +1,28 @@ +[ + { + "Name": "RegularProperty", + "PropertyAttributeInfo": { + "ChunkSize": 1000, + "IsChunkable": false, + "IsDetachable": false + }, + "Value": "Hello" + }, + { + "Name": "applicationId", + "PropertyAttributeInfo": { + "ChunkSize": 1000, + "IsChunkable": false, + "IsDetachable": false + } + }, + { + "Name": "speckle_type", + "PropertyAttributeInfo": { + "ChunkSize": 1000, + "IsChunkable": false, + "IsDetachable": false + }, + "Value": "Speckle.Core.Serialisation.TestClass" + } +] diff --git a/tests/Speckle.Sdk.Serialization.Tests/ExplicitInterfaceTests.Test_Json.verified.json b/tests/Speckle.Sdk.Serialization.Tests/ExplicitInterfaceTests.Test_Json.verified.json new file mode 100644 index 00000000..b3a68535 --- /dev/null +++ b/tests/Speckle.Sdk.Serialization.Tests/ExplicitInterfaceTests.Test_Json.verified.json @@ -0,0 +1,8 @@ +{ + "daaa67cfd73a957247cf2d631b7ca4f3": { + "applicationId": null, + "id": "daaa67cfd73a957247cf2d631b7ca4f3", + "RegularProperty": "Hello", + "speckle_type": "Speckle.Core.Serialisation.TestClass" + } +} diff --git a/tests/Speckle.Sdk.Serialization.Tests/ExplicitInterfaceTests.cs b/tests/Speckle.Sdk.Serialization.Tests/ExplicitInterfaceTests.cs index 63f77daf..6c037413 100644 --- a/tests/Speckle.Sdk.Serialization.Tests/ExplicitInterfaceTests.cs +++ b/tests/Speckle.Sdk.Serialization.Tests/ExplicitInterfaceTests.cs @@ -1,21 +1,18 @@ -using FluentAssertions; -using Speckle.Sdk.Host; +using Speckle.Sdk.Host; using Speckle.Sdk.Models; using Speckle.Sdk.Serialisation.V2.Send; -using Xunit; namespace Speckle.Sdk.Serialization.Tests; public class ExplicitInterfaceTests { - // Constructor to replace [SetUp] public ExplicitInterfaceTests() { TypeLoader.Reset(); TypeLoader.Initialize(typeof(Base).Assembly, typeof(TestClass).Assembly); } - [Fact] // Replaces [Test] + [Fact] public async Task Test_Json() { var testClass = new TestClass() { RegularProperty = "Hello" }; @@ -32,25 +29,17 @@ public class ExplicitInterfaceTests await process2.Serialize(testClass, default); - objects.Count.Should().Be(1); - objects["daaa67cfd73a957247cf2d631b7ca4f3"] - .Should() - .Be( - "{\"RegularProperty\":\"Hello\",\"applicationId\":null,\"speckle_type\":\"Speckle.Core.Serialisation.TestClass\",\"id\":\"daaa67cfd73a957247cf2d631b7ca4f3\"}" - ); + await VerifyJsonDictionary(objects); } - [Fact] // Replaces [Test] - public void Test_ExtractAllProperties() + [Fact] + public async Task Test_ExtractAllProperties() { var testClass = new TestClass() { RegularProperty = "Hello" }; var gatherer = new BasePropertyGatherer(); var properties = gatherer.ExtractAllProperties(testClass).ToList(); - - properties.Count.Should().Be(3); - properties.Select(x => x.Name).Should().Contain("RegularProperty"); - properties.Select(x => x.Name).Should().NotContain("TestProperty"); + await Verify(properties); } } diff --git a/tests/Speckle.Sdk.Serialization.Tests/ExternalIdTests.ExternalIdTest_Detached.verified.json b/tests/Speckle.Sdk.Serialization.Tests/ExternalIdTests.ExternalIdTest_Detached.verified.json new file mode 100644 index 00000000..04349a0b --- /dev/null +++ b/tests/Speckle.Sdk.Serialization.Tests/ExternalIdTests.ExternalIdTest_Detached.verified.json @@ -0,0 +1,38 @@ +{ + "8d27f5c7fac36d985d89bb6d6d8acddc": { + "applicationId": null, + "data": [ + 1.0, + 2.0 + ], + "id": "8d27f5c7fac36d985d89bb6d6d8acddc", + "speckle_type": "Speckle.Core.Models.DataChunk" + }, + "cfaf7ae0dfc5a7cf3343bb6db46ed238": { + "__closure": { + "8d27f5c7fac36d985d89bb6d6d8acddc": 100 + }, + "applicationId": null, + "area": 0.0, + "bbox": null, + "closed": false, + "domain": { + "applicationId": null, + "end": 1.0, + "id": "4d47df83148d8bad7bd2657bd9158b4c", + "speckle_type": "Objects.Primitive.Interval", + "start": 0.0 + }, + "id": "cfaf7ae0dfc5a7cf3343bb6db46ed238", + "length": 0.0, + "speckle_type": "Objects.Geometry.Polyline", + "units": "cm", + "value": [ + { + "__closure": null, + "referencedId": "8d27f5c7fac36d985d89bb6d6d8acddc", + "speckle_type": "reference" + } + ] + } +} diff --git a/tests/Speckle.Sdk.Serialization.Tests/ExternalIdTests.ExternalIdTest_Detached_Nested.verified.json b/tests/Speckle.Sdk.Serialization.Tests/ExternalIdTests.ExternalIdTest_Detached_Nested.verified.json new file mode 100644 index 00000000..f7db9127 --- /dev/null +++ b/tests/Speckle.Sdk.Serialization.Tests/ExternalIdTests.ExternalIdTest_Detached_Nested.verified.json @@ -0,0 +1,70 @@ +{ + "8d27f5c7fac36d985d89bb6d6d8acddc": { + "applicationId": null, + "data": [ + 1.0, + 2.0 + ], + "id": "8d27f5c7fac36d985d89bb6d6d8acddc", + "speckle_type": "Speckle.Core.Models.DataChunk" + }, + "93737bb0800970f29d68748ee206399d": { + "__closure": { + "8d27f5c7fac36d985d89bb6d6d8acddc": 100, + "cfaf7ae0dfc5a7cf3343bb6db46ed238": 100 + }, + "applicationId": null, + "area": 0.0, + "bbox": null, + "closed": false, + "degree": 1, + "displayValue": { + "__closure": null, + "referencedId": "cfaf7ae0dfc5a7cf3343bb6db46ed238", + "speckle_type": "reference" + }, + "domain": { + "applicationId": null, + "end": 1.0, + "id": "4d47df83148d8bad7bd2657bd9158b4c", + "speckle_type": "Objects.Primitive.Interval", + "start": 0.0 + }, + "id": "93737bb0800970f29d68748ee206399d", + "knots": [], + "length": 0.0, + "periodic": false, + "points": [], + "rational": false, + "speckle_type": "Objects.Geometry.Curve", + "units": "cm", + "weights": [] + }, + "cfaf7ae0dfc5a7cf3343bb6db46ed238": { + "__closure": { + "8d27f5c7fac36d985d89bb6d6d8acddc": 100 + }, + "applicationId": null, + "area": 0.0, + "bbox": null, + "closed": false, + "domain": { + "applicationId": null, + "end": 1.0, + "id": "4d47df83148d8bad7bd2657bd9158b4c", + "speckle_type": "Objects.Primitive.Interval", + "start": 0.0 + }, + "id": "cfaf7ae0dfc5a7cf3343bb6db46ed238", + "length": 0.0, + "speckle_type": "Objects.Geometry.Polyline", + "units": "cm", + "value": [ + { + "__closure": null, + "referencedId": "8d27f5c7fac36d985d89bb6d6d8acddc", + "speckle_type": "reference" + } + ] + } +} diff --git a/tests/Speckle.Sdk.Serialization.Tests/ExternalIdTests.ExternalIdTest_Detached_Nested_More.verified.json b/tests/Speckle.Sdk.Serialization.Tests/ExternalIdTests.ExternalIdTest_Detached_Nested_More.verified.json new file mode 100644 index 00000000..96d651cd --- /dev/null +++ b/tests/Speckle.Sdk.Serialization.Tests/ExternalIdTests.ExternalIdTest_Detached_Nested_More.verified.json @@ -0,0 +1,89 @@ +{ + "050585d98934e7a4d199e07bd92598a5": { + "__closure": { + "8d27f5c7fac36d985d89bb6d6d8acddc": 100, + "cfaf7ae0dfc5a7cf3343bb6db46ed238": 100 + }, + "applicationId": null, + "area": 0.0, + "bbox": null, + "closed": false, + "domain": { + "applicationId": null, + "end": 1.0, + "id": "4d47df83148d8bad7bd2657bd9158b4c", + "speckle_type": "Objects.Primitive.Interval", + "start": 0.0 + }, + "id": "050585d98934e7a4d199e07bd92598a5", + "length": 0.0, + "segments": [ + { + "applicationId": null, + "area": 0.0, + "bbox": null, + "closed": false, + "degree": 1, + "displayValue": { + "__closure": null, + "referencedId": "cfaf7ae0dfc5a7cf3343bb6db46ed238", + "speckle_type": "reference" + }, + "domain": { + "applicationId": null, + "end": 1.0, + "id": "4d47df83148d8bad7bd2657bd9158b4c", + "speckle_type": "Objects.Primitive.Interval", + "start": 0.0 + }, + "id": "93737bb0800970f29d68748ee206399d", + "knots": [], + "length": 0.0, + "periodic": false, + "points": [], + "rational": false, + "speckle_type": "Objects.Geometry.Curve", + "units": "cm", + "weights": [] + } + ], + "speckle_type": "Objects.Geometry.Polycurve", + "units": "cm" + }, + "8d27f5c7fac36d985d89bb6d6d8acddc": { + "applicationId": null, + "data": [ + 1.0, + 2.0 + ], + "id": "8d27f5c7fac36d985d89bb6d6d8acddc", + "speckle_type": "Speckle.Core.Models.DataChunk" + }, + "cfaf7ae0dfc5a7cf3343bb6db46ed238": { + "__closure": { + "8d27f5c7fac36d985d89bb6d6d8acddc": 100 + }, + "applicationId": null, + "area": 0.0, + "bbox": null, + "closed": false, + "domain": { + "applicationId": null, + "end": 1.0, + "id": "4d47df83148d8bad7bd2657bd9158b4c", + "speckle_type": "Objects.Primitive.Interval", + "start": 0.0 + }, + "id": "cfaf7ae0dfc5a7cf3343bb6db46ed238", + "length": 0.0, + "speckle_type": "Objects.Geometry.Polyline", + "units": "cm", + "value": [ + { + "__closure": null, + "referencedId": "8d27f5c7fac36d985d89bb6d6d8acddc", + "speckle_type": "reference" + } + ] + } +} diff --git a/tests/Speckle.Sdk.Serialization.Tests/ExternalIdTests.ExternalIdTest_Detached_Nested_More_Too.verified.json b/tests/Speckle.Sdk.Serialization.Tests/ExternalIdTests.ExternalIdTest_Detached_Nested_More_Too.verified.json new file mode 100644 index 00000000..2b821b93 --- /dev/null +++ b/tests/Speckle.Sdk.Serialization.Tests/ExternalIdTests.ExternalIdTest_Detached_Nested_More_Too.verified.json @@ -0,0 +1,104 @@ +{ + "050585d98934e7a4d199e07bd92598a5": { + "__closure": { + "8d27f5c7fac36d985d89bb6d6d8acddc": 100, + "cfaf7ae0dfc5a7cf3343bb6db46ed238": 100 + }, + "applicationId": null, + "area": 0.0, + "bbox": null, + "closed": false, + "domain": { + "applicationId": null, + "end": 1.0, + "id": "4d47df83148d8bad7bd2657bd9158b4c", + "speckle_type": "Objects.Primitive.Interval", + "start": 0.0 + }, + "id": "050585d98934e7a4d199e07bd92598a5", + "length": 0.0, + "segments": [ + { + "applicationId": null, + "area": 0.0, + "bbox": null, + "closed": false, + "degree": 1, + "displayValue": { + "__closure": null, + "referencedId": "cfaf7ae0dfc5a7cf3343bb6db46ed238", + "speckle_type": "reference" + }, + "domain": { + "applicationId": null, + "end": 1.0, + "id": "4d47df83148d8bad7bd2657bd9158b4c", + "speckle_type": "Objects.Primitive.Interval", + "start": 0.0 + }, + "id": "93737bb0800970f29d68748ee206399d", + "knots": [], + "length": 0.0, + "periodic": false, + "points": [], + "rational": false, + "speckle_type": "Objects.Geometry.Curve", + "units": "cm", + "weights": [] + } + ], + "speckle_type": "Objects.Geometry.Polycurve", + "units": "cm" + }, + "4314c177603b00228261d6f0f4686395": { + "__closure": { + "050585d98934e7a4d199e07bd92598a5": 100, + "8d27f5c7fac36d985d89bb6d6d8acddc": 100, + "cfaf7ae0dfc5a7cf3343bb6db46ed238": 100 + }, + "@profile": { + "__closure": null, + "referencedId": "050585d98934e7a4d199e07bd92598a5", + "speckle_type": "reference" + }, + "applicationId": null, + "id": "4314c177603b00228261d6f0f4686395", + "speckle_type": "Base" + }, + "8d27f5c7fac36d985d89bb6d6d8acddc": { + "applicationId": null, + "data": [ + 1.0, + 2.0 + ], + "id": "8d27f5c7fac36d985d89bb6d6d8acddc", + "speckle_type": "Speckle.Core.Models.DataChunk" + }, + "cfaf7ae0dfc5a7cf3343bb6db46ed238": { + "__closure": { + "8d27f5c7fac36d985d89bb6d6d8acddc": 100 + }, + "applicationId": null, + "area": 0.0, + "bbox": null, + "closed": false, + "domain": { + "applicationId": null, + "end": 1.0, + "id": "4d47df83148d8bad7bd2657bd9158b4c", + "speckle_type": "Objects.Primitive.Interval", + "start": 0.0 + }, + "id": "cfaf7ae0dfc5a7cf3343bb6db46ed238", + "length": 0.0, + "speckle_type": "Objects.Geometry.Polyline", + "units": "cm", + "value": [ + { + "__closure": null, + "referencedId": "8d27f5c7fac36d985d89bb6d6d8acddc", + "speckle_type": "reference" + } + ] + } +} diff --git a/tests/Speckle.Sdk.Serialization.Tests/ExternalIdTests.cs b/tests/Speckle.Sdk.Serialization.Tests/ExternalIdTests.cs index d3d7baed..ea228242 100644 --- a/tests/Speckle.Sdk.Serialization.Tests/ExternalIdTests.cs +++ b/tests/Speckle.Sdk.Serialization.Tests/ExternalIdTests.cs @@ -1,14 +1,10 @@ -using FluentAssertions; -using Speckle.Newtonsoft.Json.Linq; -using Speckle.Objects.Geometry; +using Speckle.Objects.Geometry; using Speckle.Objects.Primitive; -using Speckle.Sdk.Common; using Speckle.Sdk.Host; using Speckle.Sdk.Models; using Speckle.Sdk.Models.Extensions; using Speckle.Sdk.Serialisation; using Speckle.Sdk.Serialisation.V2.Send; -using Xunit; namespace Speckle.Sdk.Serialization.Tests; @@ -20,27 +16,21 @@ public class ExternalIdTests TypeLoader.Initialize(typeof(Base).Assembly, typeof(Polyline).Assembly); } - [Theory] - [InlineData("cfaf7ae0dfc5a7cf3343bb6db46ed238", "8d27f5c7fac36d985d89bb6d6d8acddc")] - public void ExternalIdTest_Detached(string lineId, string valueId) + [Fact] + public async Task ExternalIdTest_Detached() { var p = new Polyline() { units = "cm", value = [1, 2] }; using var serializer = new ObjectSerializerFactory(new BasePropertyGatherer()).Create( new Dictionary(), default ); - var list = serializer.Serialize(p).ToDictionary(x => x.Item1, x => x.Item2); - list.ContainsKey(new Id(lineId)).Should().BeTrue(); - var json = list[new Id(lineId)]; - var jObject = JObject.Parse(json.Value); - jObject.ContainsKey("__closure").Should().BeTrue(); - var closures = (JObject)jObject["__closure"].NotNull(); - closures.ContainsKey(valueId).Should().BeTrue(); + var objects = serializer.Serialize(p).ToDictionary(x => x.Item1, x => x.Item2); + + await VerifyJsonDictionary(objects); } - [Theory] - [InlineData("cfaf7ae0dfc5a7cf3343bb6db46ed238", "8d27f5c7fac36d985d89bb6d6d8acddc")] - public void ExternalIdTest_Detached_Nested(string lineId, string valueId) + [Fact] + public async Task ExternalIdTest_Detached_Nested() { var curve = new Curve() { @@ -59,18 +49,13 @@ public class ExternalIdTests new Dictionary(), default ); - var list = serializer.Serialize(curve).ToDictionary(x => x.Item1, x => x.Item2); - list.ContainsKey(new Id(lineId)).Should().BeTrue(); - var json = list[new Id(lineId)]; - var jObject = JObject.Parse(json.Value); - jObject.ContainsKey("__closure").Should().BeTrue(); - var closures = (JObject)jObject["__closure"].NotNull(); - closures.ContainsKey(valueId).Should().BeTrue(); + var objects = serializer.Serialize(curve).ToDictionary(x => x.Item1, x => x.Item2); + + await VerifyJsonDictionary(objects); } - [Theory] - [InlineData("cfaf7ae0dfc5a7cf3343bb6db46ed238", "8d27f5c7fac36d985d89bb6d6d8acddc")] - public void ExternalIdTest_Detached_Nested_More(string lineId, string valueId) + [Fact] + public async Task ExternalIdTest_Detached_Nested_More() { var curve = new Curve() { @@ -90,18 +75,13 @@ public class ExternalIdTests new Dictionary(), default ); - var list = serializer.Serialize(polycurve).ToDictionary(x => x.Item1, x => x.Item2); - list.ContainsKey(new Id(lineId)).Should().BeTrue(); - var json = list[new Id(lineId)]; - var jObject = JObject.Parse(json.Value); - jObject.ContainsKey("__closure").Should().BeTrue(); - var closures = (JObject)jObject["__closure"].NotNull(); - closures.ContainsKey(valueId).Should().BeTrue(); + var objects = serializer.Serialize(polycurve).ToDictionary(x => x.Item1, x => x.Item2); + + await VerifyJsonDictionary(objects); } - [Theory] - [InlineData("cfaf7ae0dfc5a7cf3343bb6db46ed238", "8d27f5c7fac36d985d89bb6d6d8acddc")] - public void ExternalIdTest_Detached_Nested_More_Too(string lineId, string valueId) + [Fact] + public async Task ExternalIdTest_Detached_Nested_More_Too() { var curve = new Curve() { @@ -123,12 +103,7 @@ public class ExternalIdTests new Dictionary(), default ); - var list = serializer.Serialize(@base).ToDictionary(x => x.Item1, x => x.Item2); - list.ContainsKey(new Id(lineId)).Should().BeTrue(); - var json = list[new Id(lineId)]; - var jObject = JObject.Parse(json.Value); - jObject.ContainsKey("__closure").Should().BeTrue(); - var closures = (JObject)jObject["__closure"].NotNull(); - closures.ContainsKey(valueId).Should().BeTrue(); + var objects = serializer.Serialize(@base).ToDictionary(x => x.Item1, x => x.Item2); + await VerifyJsonDictionary(objects); } } diff --git a/tests/Speckle.Objects.Tests.Unit/Assembly.cs b/tests/Speckle.Sdk.Serialization.Tests/Global.cs similarity index 53% rename from tests/Speckle.Objects.Tests.Unit/Assembly.cs rename to tests/Speckle.Sdk.Serialization.Tests/Global.cs index a4bcec54..0dee07ae 100644 --- a/tests/Speckle.Objects.Tests.Unit/Assembly.cs +++ b/tests/Speckle.Sdk.Serialization.Tests/Global.cs @@ -1,3 +1,3 @@ -using Xunit; +global using static Speckle.Sdk.Testing.SpeckleVerify; [assembly: CollectionBehavior(DisableTestParallelization = true)] diff --git a/tests/Speckle.Sdk.Serialization.Tests/Module.cs b/tests/Speckle.Sdk.Serialization.Tests/Module.cs new file mode 100644 index 00000000..51b9682e --- /dev/null +++ b/tests/Speckle.Sdk.Serialization.Tests/Module.cs @@ -0,0 +1,13 @@ +using System.Runtime.CompilerServices; +using Speckle.Sdk.Testing; + +namespace Speckle.Sdk.Serialization.Tests; + +public static class Module +{ + [ModuleInitializer] + public static void Initialize() + { + SpeckleVerify.Initialize(); + } +} diff --git a/tests/Speckle.Sdk.Serialization.Tests/SerializationTests.cs b/tests/Speckle.Sdk.Serialization.Tests/SerializationTests.cs index c562fd08..58c087db 100644 --- a/tests/Speckle.Sdk.Serialization.Tests/SerializationTests.cs +++ b/tests/Speckle.Sdk.Serialization.Tests/SerializationTests.cs @@ -12,7 +12,7 @@ using Speckle.Sdk.Serialisation; using Speckle.Sdk.Serialisation.Utilities; using Speckle.Sdk.Serialisation.V2.Receive; using Speckle.Sdk.Serialisation.V2.Send; -using Xunit; +using Speckle.Sdk.Testing.Framework; namespace Speckle.Sdk.Serialization.Tests; diff --git a/tests/Speckle.Sdk.Serialization.Tests/Speckle.Sdk.Serialization.Tests.csproj b/tests/Speckle.Sdk.Serialization.Tests/Speckle.Sdk.Serialization.Tests.csproj index b8028ef4..a95ca09a 100644 --- a/tests/Speckle.Sdk.Serialization.Tests/Speckle.Sdk.Serialization.Tests.csproj +++ b/tests/Speckle.Sdk.Serialization.Tests/Speckle.Sdk.Serialization.Tests.csproj @@ -4,19 +4,17 @@ net8.0 true System.Runtime.CompilerServices.IsExternalInit;System.Runtime.CompilerServices.RequiresLocationAttribute - Speckle.Sdk.Serialization.Tests - - + diff --git a/tests/Speckle.Sdk.Serialization.Tests/packages.lock.json b/tests/Speckle.Sdk.Serialization.Tests/packages.lock.json index 17ffda18..5ad46e73 100644 --- a/tests/Speckle.Sdk.Serialization.Tests/packages.lock.json +++ b/tests/Speckle.Sdk.Serialization.Tests/packages.lock.json @@ -55,23 +55,36 @@ "resolved": "0.9.6", "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" }, - "xunit": { - "type": "Direct", - "requested": "[2.9.3, )", - "resolved": "2.9.3", - "contentHash": "TlXQBinK35LpOPKHAqbLY4xlEen9TBafjs0V5KnA4wZsoQLQJiirCR4CbIXvOH8NzkW4YeJKP5P/Bnrodm0h9Q==", - "dependencies": { - "xunit.analyzers": "1.18.0", - "xunit.assert": "2.9.3", - "xunit.core": "[2.9.3]" - } - }, "xunit.runner.visualstudio": { "type": "Direct", "requested": "[3.0.1, )", "resolved": "3.0.1", "contentHash": "lbyYtsBxA8Pz8kaf5Xn/Mj1mL9z2nlBWdZhqFaj66nxXBa4JwiTDm4eGcpSMet6du9TOWI6bfha+gQR6+IHawg==" }, + "Argon": { + "type": "Transitive", + "resolved": "0.26.0", + "contentHash": "n7btGXdtRyprGnpLMpBs6rLScxlvPtVWwmTR8h7CtJvpZXBGhGvibEdZxRjeTZNrwf403jJ0ZPpt35Pz/NaNsw==" + }, + "DiffEngine": { + "type": "Transitive", + "resolved": "15.8.0", + "contentHash": "+2cUvCcpUWziG6hnns6lwxkj6VVA+WsEGx3JqHIAt/1D7p+zpyWebqXihcfXzrZ5EqQmM4h+PpuUhYWH0TeCvQ==", + "dependencies": { + "EmptyFiles": "8.7.1", + "System.Management": "9.0.0" + } + }, + "EmptyFiles": { + "type": "Transitive", + "resolved": "8.7.1", + "contentHash": "C8pvg0TvG2Mkn5LGNFGkFgFu8SUgYFwiu8U3y34qGQnnwKmGnlQTfTIUrtzfSjPxA4q7L/kRu09U5p32otZ2Aw==" + }, + "FSharp.Core": { + "type": "Transitive", + "resolved": "7.0.300", + "contentHash": "8vvItREJ1l5lcp3vBCSJ1mFevVAhR48I34DuF/EoUa7o1KlFpQpagyuZkVYMAsHPIjdp47ZxM9sI4eqeXaeWkA==" + }, "GraphQL.Client.Abstractions": { "type": "Transitive", "resolved": "6.0.0", @@ -191,6 +204,20 @@ "resolved": "13.0.1", "contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==" }, + "Quibble": { + "type": "Transitive", + "resolved": "0.3.1", + "contentHash": "LD6bz2p+4O/BQnmD4mqFZrmdN/IjsPo1wUvfmcH46Q05ng+dyMLl3d2ylj0x412F4fpJEtm0Z3EaCAx4FqgNuQ==", + "dependencies": { + "FSharp.Core": "7.0.300", + "System.Text.Json": "7.0.3" + } + }, + "SimpleInfoName": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "j+ENh86NhxrgDc6T1ueqIR2QOdDkSJY2dbTFyPN/JvIXifB4GHAunlMw/x7P6m7XaXEHr3s+SMZfKBlmnmkO6g==" + }, "SQLitePCLRaw.bundle_e_sqlite3": { "type": "Transitive", "resolved": "2.1.4", @@ -221,6 +248,11 @@ "SQLitePCLRaw.core": "2.1.4" } }, + "System.CodeDom": { + "type": "Transitive", + "resolved": "9.0.0", + "contentHash": "oTE5IfuMoET8yaZP/vdvy9xO47guAv/rOhe4DODuFBN3ySprcQOlXqO3j+e/H/YpKKR5sglrxRaZ2HYOhNJrqA==" + }, "System.ComponentModel.Annotations": { "type": "Transitive", "resolved": "4.5.0", @@ -243,6 +275,19 @@ "Microsoft.Win32.SystemEvents": "6.0.0" } }, + "System.IO.Hashing": { + "type": "Transitive", + "resolved": "9.0.0", + "contentHash": "seeO8icDfED/Qwl9PDFUx2Gf/7xv7dPsMnw5PnRwNZuz4EWMpy0wIVohC4MfCcTIoJgp+KUrWG4WH3NPSusQOA==" + }, + "System.Management": { + "type": "Transitive", + "resolved": "9.0.0", + "contentHash": "bVh4xAMI5grY5GZoklKcMBLirhC8Lqzp63Ft3zXJacwGAlLyFdF4k0qz4pnKIlO6HyL2Z4zqmHm9UkzEo6FFsA==", + "dependencies": { + "System.CodeDom": "9.0.0" + } + }, "System.Memory": { "type": "Transitive", "resolved": "4.5.3", @@ -282,6 +327,19 @@ "System.Windows.Extensions": "6.0.0" } }, + "System.Text.Encodings.Web": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==" + }, + "System.Text.Json": { + "type": "Transitive", + "resolved": "8.0.4", + "contentHash": "bAkhgDJ88XTsqczoxEMliSrpijKZHhbJQldhAmObj/RbrN3sU5dcokuXmWJWsdQAhiMJ9bTayWsL1C9fbbCRhw==", + "dependencies": { + "System.Text.Encodings.Web": "8.0.0" + } + }, "System.Windows.Extensions": { "type": "Transitive", "resolved": "6.0.0", @@ -295,25 +353,6 @@ "resolved": "2.0.3", "contentHash": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg==" }, - "xunit.analyzers": { - "type": "Transitive", - "resolved": "1.18.0", - "contentHash": "OtFMHN8yqIcYP9wcVIgJrq01AfTxijjAqVDy/WeQVSyrDC1RzBWeQPztL49DN2syXRah8TYnfvk035s7L95EZQ==" - }, - "xunit.assert": { - "type": "Transitive", - "resolved": "2.9.3", - "contentHash": "/Kq28fCE7MjOV42YLVRAJzRF0WmEqsmflm0cfpMjGtzQ2lR5mYVj1/i0Y8uDAOLczkL3/jArrwehfMD0YogMAA==" - }, - "xunit.core": { - "type": "Transitive", - "resolved": "2.9.3", - "contentHash": "BiAEvqGvyme19wE0wTKdADH+NloYqikiU0mcnmiNyXaF9HyHmE6sr/3DC5vnBkgsWaE6yPyWszKSPSApWdRVeQ==", - "dependencies": { - "xunit.extensibility.core": "[2.9.3]", - "xunit.extensibility.execution": "[2.9.3]" - } - }, "xunit.extensibility.core": { "type": "Transitive", "resolved": "2.9.3", @@ -352,6 +391,16 @@ "speckle.sdk.dependencies": { "type": "Project" }, + "speckle.sdk.testing": { + "type": "Project", + "dependencies": { + "Microsoft.NET.Test.Sdk": "[17.12.0, )", + "Speckle.Sdk": "[1.0.0, )", + "Verify.Quibble": "[2.1.1, )", + "Verify.Xunit": "[28.9.0, )", + "xunit.runner.visualstudio": "[3.0.1, )" + } + }, "GraphQL.Client": { "type": "CentralTransitive", "requested": "[6.0.0, )", @@ -408,6 +457,44 @@ "requested": "[13.0.2, )", "resolved": "13.0.2", "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" + }, + "Verify": { + "type": "CentralTransitive", + "requested": "[28.9.0, )", + "resolved": "28.9.0", + "contentHash": "qni0zDkkYSPIhnYejZCOq5ueH+y0s7kEdpSbFXarcxP7rjZvZD0Yuc567KFVFMbVRAo9IORfv9zcXtTGFmpz8A==", + "dependencies": { + "Argon": "0.26.0", + "DiffEngine": "15.8.0", + "SimpleInfoName": "3.1.0", + "System.IO.Hashing": "9.0.0" + } + }, + "Verify.Quibble": { + "type": "CentralTransitive", + "requested": "[2.1.1, )", + "resolved": "2.1.1", + "contentHash": "Z8bVwFICa3Dog6Mcnx0wlrn4Y+CFpQXx1f+ijfLn6/v4q00q+jLm9Gu/nVyUFuc75cjn6ieI08UrqXKcR9fTYw==", + "dependencies": { + "Quibble": "0.3.1", + "System.Text.Json": "8.0.4", + "Verify": "26.1.1" + } + }, + "Verify.Xunit": { + "type": "CentralTransitive", + "requested": "[28.9.0, )", + "resolved": "28.9.0", + "contentHash": "YlgbJzajNvnzTVqWtZuWdZFcShX4MyQqM4FJ28qSf7hY8wvB8G6y2EwHit+Wz/nYrdnCXWYK81JR7dxTxSeuDg==", + "dependencies": { + "Argon": "0.26.0", + "DiffEngine": "15.8.0", + "SimpleInfoName": "3.1.0", + "System.IO.Hashing": "9.0.0", + "Verify": "28.9.0", + "xunit.abstractions": "2.0.3", + "xunit.extensibility.execution": "2.9.3" + } } } } diff --git a/tests/Speckle.Sdk.Tests.Integration/packages.lock.json b/tests/Speckle.Sdk.Tests.Integration/packages.lock.json index efc056b0..d78a6413 100644 --- a/tests/Speckle.Sdk.Tests.Integration/packages.lock.json +++ b/tests/Speckle.Sdk.Tests.Integration/packages.lock.json @@ -291,11 +291,6 @@ "resolved": "1.18.0", "contentHash": "OtFMHN8yqIcYP9wcVIgJrq01AfTxijjAqVDy/WeQVSyrDC1RzBWeQPztL49DN2syXRah8TYnfvk035s7L95EZQ==" }, - "xunit.assert": { - "type": "Transitive", - "resolved": "2.9.3", - "contentHash": "/Kq28fCE7MjOV42YLVRAJzRF0WmEqsmflm0cfpMjGtzQ2lR5mYVj1/i0Y8uDAOLczkL3/jArrwehfMD0YogMAA==" - }, "xunit.core": { "type": "Transitive", "resolved": "2.9.3", @@ -424,6 +419,12 @@ "requested": "[13.0.2, )", "resolved": "13.0.2", "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" + }, + "xunit.assert": { + "type": "CentralTransitive", + "requested": "[2.9.3, )", + "resolved": "2.9.3", + "contentHash": "/Kq28fCE7MjOV42YLVRAJzRF0WmEqsmflm0cfpMjGtzQ2lR5mYVj1/i0Y8uDAOLczkL3/jArrwehfMD0YogMAA==" } } } diff --git a/tests/Speckle.Sdk.Tests.Unit/packages.lock.json b/tests/Speckle.Sdk.Tests.Unit/packages.lock.json index 34637c07..8f7ae228 100644 --- a/tests/Speckle.Sdk.Tests.Unit/packages.lock.json +++ b/tests/Speckle.Sdk.Tests.Unit/packages.lock.json @@ -315,11 +315,6 @@ "resolved": "1.18.0", "contentHash": "OtFMHN8yqIcYP9wcVIgJrq01AfTxijjAqVDy/WeQVSyrDC1RzBWeQPztL49DN2syXRah8TYnfvk035s7L95EZQ==" }, - "xunit.assert": { - "type": "Transitive", - "resolved": "2.9.3", - "contentHash": "/Kq28fCE7MjOV42YLVRAJzRF0WmEqsmflm0cfpMjGtzQ2lR5mYVj1/i0Y8uDAOLczkL3/jArrwehfMD0YogMAA==" - }, "xunit.core": { "type": "Transitive", "resolved": "2.9.3", @@ -411,6 +406,12 @@ "requested": "[13.0.2, )", "resolved": "13.0.2", "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" + }, + "xunit.assert": { + "type": "CentralTransitive", + "requested": "[2.9.3, )", + "resolved": "2.9.3", + "contentHash": "/Kq28fCE7MjOV42YLVRAJzRF0WmEqsmflm0cfpMjGtzQ2lR5mYVj1/i0Y8uDAOLczkL3/jArrwehfMD0YogMAA==" } } }