using NUnit.Framework; using Robust.Shared.Configuration; using Robust.Shared.ContentPack; using Robust.Shared.IoC; using Robust.Shared.Log; using Robust.Shared.Timing; using Robust.Shared.Utility; namespace Robust.Shared.Tests.ContentPack; [TestFixture] [TestOf(typeof(ResourceManager))] [Parallelizable(ParallelScope.All)] internal sealed class ResourceManagerTest2 { [Test] public void TestMemoryRootReadFiles() { var (_, res) = CreateRes(); var testRoot = new MemoryContentRoot(); testRoot.AddOrUpdateFile(new ResPath("/a.txt"), "a"u8.ToArray()); testRoot.AddOrUpdateFile(new ResPath("/b.txt"), "b"u8.ToArray()); testRoot.AddOrUpdateFile(new ResPath("/c.txt"), "c"u8.ToArray()); testRoot.AddOrUpdateFile(new ResPath("/d/foo.txt"), "foo"u8.ToArray()); res.AddRoot(new ResPath("/"), testRoot); Assert.Multiple(() => { Assert.That(res.ContentFileReadAllText("/a.txt"), Is.EqualTo("a")); Assert.That(res.ContentFileReadAllText("/b.txt"), Is.EqualTo("b")); Assert.That(res.ContentFileReadAllText("/c.txt"), Is.EqualTo("c")); Assert.That(res.ContentFileReadAllText("/d/foo.txt"), Is.EqualTo("foo")); }); } [Test] public void TestMemoryRootGetDirectoryEntries() { var (_, res) = CreateRes(); var testRoot = new MemoryContentRoot(); testRoot.AddOrUpdateFile(new ResPath("/a.txt"), "a"u8.ToArray()); testRoot.AddOrUpdateFile(new ResPath("/b.txt"), "b"u8.ToArray()); testRoot.AddOrUpdateFile(new ResPath("/c.txt"), "c"u8.ToArray()); testRoot.AddOrUpdateFile(new ResPath("/d/foo.txt"), "foo"u8.ToArray()); res.AddRoot(new ResPath("/"), testRoot); Assert.Multiple(() => { Assert.That(res.ContentGetDirectoryEntries(new ResPath("/")), Is.EquivalentTo(new[] { "a.txt", "b.txt", "c.txt", "d/" })); // Listing should work both with and without a trailing / Assert.That(res.ContentGetDirectoryEntries(new ResPath("/d")), Is.EquivalentTo(new[] { "foo.txt" })); Assert.That(res.ContentGetDirectoryEntries(new ResPath("/d/")), Is.EquivalentTo(new[] { "foo.txt" })); }); } /// /// Test that a mount path is properly shown as a directory entry. /// [Test] public void TestGetDirectoryEntriesTwoMounts() { var (_, res) = CreateRes(); var testRoot = new MemoryContentRoot(); testRoot.AddOrUpdateFile(new ResPath("foo.txt"), Array.Empty()); testRoot.AddOrUpdateFile(new ResPath("bar/foo.txt"), Array.Empty()); res.AddRoot(new ResPath("/"), testRoot); res.AddRoot(new ResPath("/second"), testRoot); res.AddRoot(new ResPath("/third/fourth"), testRoot); Assert.That(res.ContentGetDirectoryEntries(new ResPath("/")), Is.EquivalentTo(new [] { "foo.txt", "bar/", "second/", "third/" })); } private static (IDependencyCollection, IResourceManagerInternal) CreateRes() { var deps = new DependencyCollection(); deps.Register(); deps.Register(); deps.Register(); deps.Register(); deps.Register(); deps.BuildGraph(); return (deps, deps.Resolve()); } }