From 02f75c717cfab36fb86b7b3f105fe5ef00d950b0 Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Wed, 24 Jul 2024 15:05:44 +0100 Subject: [PATCH] Add NotNull Empty and tests (#51) --- src/Speckle.Core/Common/NotNullExtensions.cs | 9 +++ .../packages.lock.json | 1 + .../Common/NotNullTests.cs | 61 +++++++++++++++++++ .../Logging/SpeckleLogTests.cs | 2 +- .../Speckle.Core.Tests.Unit.csproj | 1 + .../packages.lock.json | 37 +++++++++++ 6 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 tests/Speckle.Core.Tests.Unit/Common/NotNullTests.cs diff --git a/src/Speckle.Core/Common/NotNullExtensions.cs b/src/Speckle.Core/Common/NotNullExtensions.cs index 9c53ad2c..73081bc9 100644 --- a/src/Speckle.Core/Common/NotNullExtensions.cs +++ b/src/Speckle.Core/Common/NotNullExtensions.cs @@ -52,4 +52,13 @@ public static class NotNullExtensions } return obj.Value; } + + public static IEnumerable Empty(this IEnumerable? obj) + { + if (obj is null) + { + return Enumerable.Empty(); + } + return obj; + } } diff --git a/tests/Speckle.Core.Tests.Integration/packages.lock.json b/tests/Speckle.Core.Tests.Integration/packages.lock.json index cda6b910..08175c10 100644 --- a/tests/Speckle.Core.Tests.Integration/packages.lock.json +++ b/tests/Speckle.Core.Tests.Integration/packages.lock.json @@ -358,6 +358,7 @@ "Microsoft.NET.Test.Sdk": "[17.10.0, )", "NUnit": "[4.1.0, )", "NUnit3TestAdapter": "[4.5.0, )", + "Shouldly": "[4.2.1, )", "Speckle.Core": "[1.0.0, )", "Speckle.Transports.Disk": "[1.0.0, )", "altcover": "[8.8.74, )" diff --git a/tests/Speckle.Core.Tests.Unit/Common/NotNullTests.cs b/tests/Speckle.Core.Tests.Unit/Common/NotNullTests.cs new file mode 100644 index 00000000..925a4eac --- /dev/null +++ b/tests/Speckle.Core.Tests.Unit/Common/NotNullTests.cs @@ -0,0 +1,61 @@ +using NUnit.Framework; +using Shouldly; +using Speckle.Core.Common; + +namespace Speckle.Core.Tests.Unit.Common; + +public class NotNullTests +{ + [TestCase(null, 0)] + [TestCase(new string[0], 0)] + [TestCase(new[] { "yay" }, 1)] + public void Empty(string[]? test, int length) + { + var list = NotNullExtensions.Empty(test).ToList(); + list.Count.ShouldBe(length); + } + + [Test] + public void NotNullClass() + { + var t = NotNullExtensions.NotNull("test"); + t.ShouldNotBeNull().ShouldBe("test"); + } + + [Test] + public void NotNullStruct() + { + var t = NotNullExtensions.NotNull(2); + t.ShouldBe(2); + } + + [Test] + public async Task NotNullClass_Task() + { + var t = await NotNullExtensions.NotNull(Task.FromResult("test")); + t.ShouldNotBeNull().ShouldBe("test"); + } + + [Test] + public async Task NotNullStruct_Task() + { + var t = await NotNullExtensions.NotNull(Task.FromResult(2)); + t.ShouldBe(2); + } + + [Test] + public void NotNullClass_Exception() => + Assert.Throws(() => NotNullExtensions.NotNull((string?)null)); + + [Test] + public void NotNullStruct_Exception() => + Assert.Throws(() => NotNullExtensions.NotNull((int?)null)); + + [Test] + public void NotNullClass_Task_Exception() => + Assert.ThrowsAsync(() => NotNullExtensions.NotNull(Task.FromResult((string?)null))); + + [Test] + public void NotNullStruct_Task_Exception() => + Assert.ThrowsAsync(() => NotNullExtensions.NotNull(Task.FromResult((int?)null))); +} diff --git a/tests/Speckle.Core.Tests.Unit/Logging/SpeckleLogTests.cs b/tests/Speckle.Core.Tests.Unit/Logging/SpeckleLogTests.cs index 22b70330..e587feb8 100644 --- a/tests/Speckle.Core.Tests.Unit/Logging/SpeckleLogTests.cs +++ b/tests/Speckle.Core.Tests.Unit/Logging/SpeckleLogTests.cs @@ -1,4 +1,4 @@ -using NUnit.Framework; +using NUnit.Framework; using Serilog.Context; using Serilog.Events; using Speckle.Core.Logging; diff --git a/tests/Speckle.Core.Tests.Unit/Speckle.Core.Tests.Unit.csproj b/tests/Speckle.Core.Tests.Unit/Speckle.Core.Tests.Unit.csproj index 95a0f95b..20aa4cdc 100644 --- a/tests/Speckle.Core.Tests.Unit/Speckle.Core.Tests.Unit.csproj +++ b/tests/Speckle.Core.Tests.Unit/Speckle.Core.Tests.Unit.csproj @@ -11,6 +11,7 @@ + diff --git a/tests/Speckle.Core.Tests.Unit/packages.lock.json b/tests/Speckle.Core.Tests.Unit/packages.lock.json index da8845e3..2ada2fdc 100644 --- a/tests/Speckle.Core.Tests.Unit/packages.lock.json +++ b/tests/Speckle.Core.Tests.Unit/packages.lock.json @@ -52,12 +52,36 @@ "resolved": "1.14.1", "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ==" }, + "Shouldly": { + "type": "Direct", + "requested": "[4.2.1, )", + "resolved": "4.2.1", + "contentHash": "dKAKiSuhLKqD2TXwLKtqNg1nwzJcIKOOMncZjk9LYe4W+h+SCftpWdxwR79YZUIHMH+3Vu9s0s0UHNrgICLwRQ==", + "dependencies": { + "DiffEngine": "11.3.0", + "EmptyFiles": "4.4.0" + } + }, "Speckle.InterfaceGenerator": { "type": "Direct", "requested": "[0.9.5, )", "resolved": "0.9.5", "contentHash": "oU/L7pN1R7q8KkbrpQ3WJnHirPHqn+9DEA7asOcUiggV5dzVg1A/VYs7GOSusD24njxXh03tE3a2oTLOjt3cVg==" }, + "DiffEngine": { + "type": "Transitive", + "resolved": "11.3.0", + "contentHash": "k0ZgZqd09jLZQjR8FyQbSQE86Q7QZnjEzq1LPHtj1R2AoWO8sjV5x+jlSisL7NZAbUOI4y+7Bog8gkr9WIRBGw==", + "dependencies": { + "EmptyFiles": "4.4.0", + "System.Management": "6.0.1" + } + }, + "EmptyFiles": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "gwJEfIGS7FhykvtZoscwXj/XwW+mJY6UbAZk+qtLKFUGWC95kfKXnj8VkxsZQnWBxJemM/q664rGLN5nf+OHZw==" + }, "GraphQL.Client.Abstractions": { "type": "Transitive", "resolved": "6.0.0", @@ -259,11 +283,24 @@ "resolved": "4.5.0", "contentHash": "pL2ChpaRRWI/p4LXyy4RgeWlYF2sgfj/pnVMvBqwNFr5cXg7CXNnWZWxrOONLg8VGdFB8oB+EG2Qw4MLgTOe+A==" }, + "System.CodeDom": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "CPc6tWO1LAer3IzfZufDBRL+UZQcj5uS207NHALQzP84Vp/z6wF0Aa0YZImOQY8iStY0A2zI/e3ihKNPfUm8XA==" + }, "System.ComponentModel.Annotations": { "type": "Transitive", "resolved": "4.5.0", "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==" }, + "System.Management": { + "type": "Transitive", + "resolved": "6.0.1", + "contentHash": "10J1D0h/lioojphfJ4Fuh5ZUThT/xOVHdV9roGBittKKNP2PMjrvibEdbVTGZcPra1399Ja3tqIJLyQrc5Wmhg==", + "dependencies": { + "System.CodeDom": "6.0.0" + } + }, "System.Memory": { "type": "Transitive", "resolved": "4.5.3",