Snapshot testing (#208)

* snapshot testing with verify

* formatting

* add back old serialization tests

* pass verify

* use json correctly

* formatting

* Don't use Quibble and order ourselves because ordering doesn't matter

* whitespace on snapshot

* Better json diffing?  Quibble is back

* add common project

* add object unit tests to see how verify would work

* format

* move random exes to new solution folder

* update lock files
This commit is contained in:
Adam Hathcock
2025-01-16 13:46:53 +00:00
committed by GitHub
parent f79ae7e058
commit bafd130ece
55 changed files with 1775 additions and 450 deletions
+10
View File
@@ -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
+4 -1
View File
@@ -2,4 +2,7 @@
* text=auto
# need original files to be windows
*.txt text eol=crlf
*.txt text eol=crlf
# Verify
*.verified.json text eol=lf working-tree-encoding=UTF-8
+3 -1
View File
@@ -18,4 +18,6 @@ tools
.DS_Store
*.snupkg
coverage.xml
coverage.xml
*.received.*
+5 -1
View File
@@ -25,11 +25,15 @@
<PackageVersion Include="Speckle.DoubleNumerics" Version="4.0.1" />
<PackageVersion Include="SimpleExec" Version="12.0.0" />
<PackageVersion Include="System.Threading.Channels" Version="9.0.1" />
<PackageVersion Include="Verify" Version="28.9.0" />
<PackageVersion Include="Verify.Quibble" Version="2.1.1" />
<PackageVersion Include="Verify.Xunit" Version="28.9.0" />
<PackageVersion Include="xunit" Version="2.9.3" />
<PackageVersion Include="xunit.assert" Version="2.9.3" />
<PackageVersion Include="xunit.runner.visualstudio" Version="3.0.1" />
<GlobalPackageReference Include="PolySharp" Version="1.15.0" />
<GlobalPackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0" />
<GlobalPackageReference Include="GitVersion.MsBuild" Version="5.12.0" />
<GlobalPackageReference Include="Speckle.InterfaceGenerator" Version="0.9.6" />
</ItemGroup>
</Project>
</Project>
@@ -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<string, string> objects) : IServerObjectManager
{
@@ -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<string, string> savedObjects) : IServerObjectManager
{
@@ -1,8 +1,8 @@
using Speckle.Sdk.SQLite;
namespace Speckle.Sdk.Serialization.Tests;
namespace Speckle.Sdk.Testing.Framework;
public class DummySqLiteReceiveManager(Dictionary<string, string> savedObjects) : ISqLiteJsonCacheManager
public sealed class DummySqLiteReceiveManager(Dictionary<string, string> savedObjects) : ISqLiteJsonCacheManager
{
public void Dispose() { }
@@ -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();
@@ -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;
}
@@ -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;
}
+1
View File
@@ -0,0 +1 @@
[assembly: CollectionBehavior(DisableTestParallelization = true)]
@@ -0,0 +1,19 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<IsTestProject>true</IsTestProject>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="Verify.Quibble" />
<PackageReference Include="Verify.Xunit" />
<PackageReference Include="xunit.runner.visualstudio"/>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\src\Speckle.Sdk\Speckle.Sdk.csproj" />
</ItemGroup>
</Project>
+45
View File
@@ -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<string, Json> objects, string sourceFile) =>
await VerifyJson(JObject.FromObject(objects, _jsonSerializer).ToString(), sourceFile: sourceFile);
public static async Task VerifyJsonDictionary(
IDictionary<string, string> objects,
[CallerFilePath] string sourceFile = ""
) => await VerifyJsonObjects(objects.ToDictionary(x => x.Key, x => new Json(x.Value)), sourceFile);
public static async Task VerifyJsonDictionary(
IDictionary<Id, Json> objects,
[CallerFilePath] string sourceFile = ""
) => await VerifyJsonObjects(objects.ToDictionary(x => x.Key.Value, x => x.Value), sourceFile);
}
+7
View File
@@ -0,0 +1,7 @@
namespace Speckle.Sdk.Testing;
public class VerifyTests
{
[Fact]
public Task TestVerify() => VerifyChecks.Run();
}
+421
View File
@@ -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"
}
}
}
}
}
+11 -2
View File
@@ -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
@@ -1,7 +1,6 @@
using FluentAssertions;
using Speckle.Objects.Geometry;
using Speckle.Sdk.Common;
using Xunit;
namespace Speckle.Objects.Tests.Unit.Geometry;
@@ -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": []
}
@@ -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);
}
}
@@ -1,7 +1,6 @@
using FluentAssertions;
using Speckle.Objects.Geometry;
using Speckle.Sdk.Common;
using Xunit;
namespace Speckle.Objects.Tests.Unit.Geometry;
@@ -1,7 +1,6 @@
using FluentAssertions;
using Speckle.Objects.Geometry;
using Speckle.Sdk.Common;
using Xunit;
namespace Speckle.Objects.Tests.Unit.Geometry;
@@ -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;
@@ -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;
@@ -0,0 +1 @@
[assembly: CollectionBehavior(DisableTestParallelization = true)]
@@ -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;
@@ -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);
}
}
@@ -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;
@@ -10,11 +10,12 @@
<PackageReference Include="altcover" />
<PackageReference Include="FluentAssertions" />
<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="xunit" />
<PackageReference Include="xunit.assert" />
<PackageReference Include="xunit.runner.visualstudio"/>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Speckle.Objects\Speckle.Objects.csproj" />
<ProjectReference Include="..\..\Speckle.Sdk.Testing\Speckle.Sdk.Testing.csproj" />
</ItemGroup>
</Project>
@@ -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;
@@ -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;
@@ -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"
}
}
}
}
@@ -1,3 +0,0 @@
using Xunit;
[assembly: CollectionBehavior(DisableTestParallelization = true)]
@@ -1,57 +0,0 @@
using Speckle.Sdk.Models;
namespace Speckle.Sdk.Serialization.Tests;
public class BaseComparer : IEqualityComparer<Base>
{
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);
}
}
@@ -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"
}
}
@@ -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"
}
}
@@ -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"
}
}
@@ -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"
}
}
@@ -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
}
]
@@ -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
}
]
@@ -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<string, string>();
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);
}
}
@@ -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"
}
]
@@ -0,0 +1,8 @@
{
"daaa67cfd73a957247cf2d631b7ca4f3": {
"applicationId": null,
"id": "daaa67cfd73a957247cf2d631b7ca4f3",
"RegularProperty": "Hello",
"speckle_type": "Speckle.Core.Serialisation.TestClass"
}
}
@@ -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);
}
}
@@ -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"
}
]
}
}
@@ -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"
}
]
}
}
@@ -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"
}
]
}
}
@@ -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"
}
]
}
}
@@ -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<Id, NodeInfo>(),
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<Id, NodeInfo>(),
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<Id, NodeInfo>(),
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<Id, NodeInfo>(),
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);
}
}
@@ -1,3 +1,3 @@
using Xunit;
global using static Speckle.Sdk.Testing.SpeckleVerify;
[assembly: CollectionBehavior(DisableTestParallelization = true)]
@@ -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();
}
}
@@ -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;
@@ -4,19 +4,17 @@
<TargetFramework>net8.0</TargetFramework>
<IsTestProject>true</IsTestProject>
<PolySharpExcludeGeneratedTypes>System.Runtime.CompilerServices.IsExternalInit;System.Runtime.CompilerServices.RequiresLocationAttribute</PolySharpExcludeGeneratedTypes>
<RootNamespace>Speckle.Sdk.Serialization.Tests</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="altcover" />
<PackageReference Include="FluentAssertions" />
<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="xunit" />
<PackageReference Include="xunit.runner.visualstudio"/>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Speckle.Sdk\Speckle.Sdk.csproj" />
<ProjectReference Include="..\..\Speckle.Sdk.Testing\Speckle.Sdk.Testing.csproj" />
<ProjectReference Include="..\..\src\Speckle.Objects\Speckle.Objects.csproj" />
</ItemGroup>
@@ -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"
}
}
}
}
@@ -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=="
}
}
}
@@ -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=="
}
}
}