using System.Drawing;
using NUnit.Framework;
using Speckle.Core.Models;
using Speckle.Core.Tests.Unit.Kits;
using Point = Speckle.Core.Tests.Unit.Kits.Point;
namespace Speckle.Core.Tests.Unit.Api.Operations;
[TestFixture]
[TestOf(typeof(Core.Api.Operations))]
public class ObjectSerialization
{
[Test]
public void SimpleSerialization()
{
var table = new DiningTable();
((dynamic)table)["@strangeVariable_NAme3"] = new TableLegFixture();
var result = Core.Api.Operations.Serialize(table);
var test = Core.Api.Operations.Deserialize(result);
Assert.That(table.GetId(), Is.EqualTo(test.GetId()));
var polyline = new Polyline();
for (int i = 0; i < 100; i++)
{
polyline.Points.Add(new Point { X = i * 2, Y = i % 2 });
}
var strPoly = Core.Api.Operations.Serialize(polyline);
var dePoly = Core.Api.Operations.Deserialize(strPoly);
Assert.That(dePoly.GetId(), Is.EqualTo(polyline.GetId()));
}
[Test]
public void IgnoreCircularReferences()
{
var pt = new Point(1, 2, 3);
pt["circle"] = pt;
var test = Core.Api.Operations.Serialize(pt);
var result = Core.Api.Operations.Deserialize(test);
var circle = result["circle"];
Assert.That(circle, Is.Null);
}
[Test]
public void InterfacePropHandling()
{
Line tail = new() { Start = new Point(0, 0, 0), End = new Point(42, 42, 42) };
PolygonalFeline cat = new() { Tail = tail };
for (int i = 0; i < 10; i++)
{
cat.Claws[$"Claw number {i}"] = new Line
{
Start = new Point(i, i, i),
End = new Point(i + 3.14, i + 3.14, i + 3.14)
};
if (i % 2 == 0)
{
cat.Whiskers.Add(
new Line { Start = new Point(i / 2, i / 2, i / 2), End = new Point(i + 3.14, i + 3.14, i + 3.14) }
);
}
else
{
var brokenWhisker = new Polyline();
brokenWhisker.Points.Add(new Point(-i, 0, 0));
brokenWhisker.Points.Add(new Point(0, 0, 0));
brokenWhisker.Points.Add(new Point(i, 0, 0));
cat.Whiskers.Add(brokenWhisker);
}
cat.Fur[i] = new Line { Start = new Point(i, i, i), End = new Point(i + 3.14, i + 3.14, i + 3.14) };
}
var result = Core.Api.Operations.Serialize(cat);
var deserialisedFeline = Core.Api.Operations.Deserialize(result);
Assert.That(deserialisedFeline.GetId(), Is.EqualTo(cat.GetId())); // If we're getting the same hash... we're probably fine!
}
[Test]
public void InheritanceTests()
{
var superPoint = new SuperPoint
{
X = 10,
Y = 10,
Z = 10,
W = 42
};
var str = Core.Api.Operations.Serialize(superPoint);
var sstr = Core.Api.Operations.Deserialize(str);
Assert.That(sstr.speckle_type, Is.EqualTo(superPoint.speckle_type));
}
[Test]
public void ListDynamicProp()
{
var point = new Point();
var test = new List();
for (var i = 0; i < 100; i++)
{
test.Add(new SuperPoint { W = i });
}
point["test"] = test;
var str = Core.Api.Operations.Serialize(point);
var dsrls = Core.Api.Operations.Deserialize(str);
var list = dsrls["test"] as List