From b30bccc03b6cea0de6900c3271502c83918efe96 Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Tue, 16 Feb 2021 20:14:12 +0100 Subject: [PATCH] Add IRobustRandom extension to get a random value from a data set (#3260) * Add extension to pick a random element from a dataset * Add tests --- .../Utility/SharedRandomExtensions.cs | 13 +++++++ .../Shared/Utility/RandomExtensionsTests.cs | 38 +++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 Content.Shared/Utility/SharedRandomExtensions.cs create mode 100644 Content.Tests/Shared/Utility/RandomExtensionsTests.cs diff --git a/Content.Shared/Utility/SharedRandomExtensions.cs b/Content.Shared/Utility/SharedRandomExtensions.cs new file mode 100644 index 0000000000..2adfdb69f7 --- /dev/null +++ b/Content.Shared/Utility/SharedRandomExtensions.cs @@ -0,0 +1,13 @@ +using Content.Shared.Prototypes; +using Robust.Shared.Random; + +namespace Content.Shared.Utility +{ + public static class SharedRandomExtensions + { + public static string Pick(this IRobustRandom random, DatasetPrototype prototype) + { + return random.Pick(prototype.Values); + } + } +} diff --git a/Content.Tests/Shared/Utility/RandomExtensionsTests.cs b/Content.Tests/Shared/Utility/RandomExtensionsTests.cs new file mode 100644 index 0000000000..1073799627 --- /dev/null +++ b/Content.Tests/Shared/Utility/RandomExtensionsTests.cs @@ -0,0 +1,38 @@ +using System.IO; +using System.Threading.Tasks; +using Content.Shared.Prototypes; +using Content.Shared.Utility; +using NUnit.Framework; +using Robust.Shared.IoC; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; + +namespace Content.Tests.Shared.Utility +{ + [TestFixture] + [TestOf(typeof(SharedRandomExtensions))] + public class RandomExtensionsTests : ContentUnitTest + { + private const string TestDatasetId = "TestDataset"; + + private static readonly string Prototypes = $@" +- type: dataset + id: {TestDatasetId} + values: + - A"; + + [Test] + public void RandomDataSetValueTest() + { + var prototypeManager = IoCManager.Resolve(); + + prototypeManager.LoadFromStream(new StringReader(Prototypes)); + + var dataSet = prototypeManager.Index(TestDatasetId); + var random = IoCManager.Resolve(); + var id = random.Pick(dataSet); + + Assert.NotNull(id); + } + } +}