first comit

This commit is contained in:
Sebastian Bularca
2026-04-21 00:33:52 +02:00
parent 505b2ca161
commit 0331d0ede9
53 changed files with 3250 additions and 15 deletions

8
Tests/Editor.meta Normal file
View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 973227b88de0b1e4ba64c1955c03f09a
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,53 @@
using Jovian.TagSystem;
using NUnit.Framework;
namespace Jovian.TagSystem.Tests {
public class TestGameTagUtility {
private const string TagBase = "Test";
private const string TagOne = "Test.One";
private const string TagTwo = "Test.Two";
private const string TagThree = "Test.Three";
private const string TagFour = "Test.One.Four";
[SetUp]
public void Setup() {
var tags = new RegisteredTag[] { new(TagOne), new(TagTwo), new(TagThree), new(TagFour), new(TagBase) };
JovianTagsHandler.Initialize();
JovianTagsHandler.RegisterTags(tags);
}
[Test]
public void TestCreateGameTagContainer() {
var selection = new JovianTagsGroup(TagOne, TagTwo, TagFour);
var container = CreateGameTagContainer(selection);
Assert.AreEqual(3, container.Count);
}
[Test]
public void TestCreateGameTagContainerWithCapacity() {
var selection = new JovianTagsGroup(TagOne, TagTwo, TagFour);
var container = CreateGameTagContainer(selection, 10);
Assert.AreEqual(3, container.Count);
Assert.AreEqual(10, container.entries.Capacity);
}
[TearDown]
public void PostTest() {
JovianTagsHandler.Reset();
}
private JovianTagsContainer CreateGameTagContainer(JovianTagsGroup group) {
return group.ToContainer();
}
private JovianTagsContainer CreateGameTagContainer(JovianTagsGroup group, int capacity) {
if(!group.HasAny()) return JovianTagsContainer.Empty;
var container = new JovianTagsContainer(capacity);
foreach(var tag in group.tags) {
var resolved = JovianTagsHandler.GetTag(tag);
if(resolved.IsValid()) container.Add(resolved);
}
return container;
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: e9c31310bf551eb49bc72359408c5dee

View File

@@ -0,0 +1,109 @@
using NUnit.Framework;
namespace Jovian.TagSystem.Tests {
public class TestJovianTag {
[SetUp]
public void Setup() {
JovianTagsHandler.Initialize();
JovianTagsHandler.RegisterTag("A.B.C.D");
JovianTagsHandler.RegisterTag("A.B.E");
}
[TearDown]
public void TearDown() {
JovianTagsHandler.Reset();
}
[Test]
public void GivenTwoEqualTags_WhenCompared_ThenEqual() {
var tag1 = JovianTagsHandler.GetTag("A.B");
var tag2 = JovianTagsHandler.GetTag("A.B");
Assert.AreEqual(tag1, tag2);
}
[Test]
public void GivenNoneTag_WhenChecked_ThenIsNone() {
Assert.IsTrue(JovianTagsHandler.emptyTag.IsNone());
}
[Test]
public void GivenValidTag_WhenChecked_ThenIsValid() {
var tag = JovianTagsHandler.GetTag("A.B");
Assert.IsTrue(tag.IsValid());
}
[Test]
public void GivenSameTag_WhenIsDescendantOf_ThenTrue() {
var tag = JovianTagsHandler.GetTag("A.B");
Assert.IsTrue(tag.IsDescendantOf(tag));
}
[Test]
public void GivenChild_WhenIsDescendantOfParent_ThenTrue() {
var parent = JovianTagsHandler.GetTag("A.B");
var child = JovianTagsHandler.GetTag("A.B.C");
Assert.IsTrue(child.IsDescendantOf(parent));
}
[Test]
public void GivenGrandchild_WhenIsDescendantOfRoot_ThenTrue() {
var root = JovianTagsHandler.GetTag("A");
var grandchild = JovianTagsHandler.GetTag("A.B.C.D");
Assert.IsTrue(grandchild.IsDescendantOf(root));
}
[Test]
public void GivenParent_WhenIsDescendantOfChild_ThenFalse() {
var parent = JovianTagsHandler.GetTag("A.B");
var child = JovianTagsHandler.GetTag("A.B.C");
Assert.IsFalse(parent.IsDescendantOf(child));
}
[Test]
public void GivenParent_WhenIsAncestorOfChild_ThenTrue() {
var parent = JovianTagsHandler.GetTag("A");
var child = JovianTagsHandler.GetTag("A.B.C.D");
Assert.IsTrue(parent.IsAncestorOf(child));
}
[Test]
public void GivenChild_WhenIsAncestorOfParent_ThenFalse() {
var parent = JovianTagsHandler.GetTag("A");
var child = JovianTagsHandler.GetTag("A.B.C.D");
Assert.IsFalse(child.IsAncestorOf(parent));
}
[Test]
public void GivenSiblings_WhenIsSiblingTo_ThenTrue() {
var c = JovianTagsHandler.GetTag("A.B.C");
var e = JovianTagsHandler.GetTag("A.B.E");
// Both have parent A.B
Assert.IsTrue(c.IsSiblingTo(e));
Assert.IsTrue(e.IsSiblingTo(c));
}
[Test]
public void GivenNonSiblings_WhenIsSiblingTo_ThenFalse() {
var d = JovianTagsHandler.GetTag("A.B.C.D");
var e = JovianTagsHandler.GetTag("A.B.E");
// D's parent is C, E's parent is B — not siblings
Assert.IsFalse(d.IsSiblingTo(e));
}
[Test]
public void GivenUnrelatedBranches_WhenCrossChecked_ThenFalse() {
var c = JovianTagsHandler.GetTag("A.B.C");
var e = JovianTagsHandler.GetTag("A.B.E");
Assert.IsFalse(c.IsDescendantOf(e));
Assert.IsFalse(e.IsDescendantOf(c));
}
[Test]
public void GivenTwoDifferentTags_WhenCompared_ThenNotEqual() {
var tag1 = JovianTagsHandler.GetTag("A.B.C");
var tag2 = JovianTagsHandler.GetTag("A.B.E");
Assert.AreNotEqual(tag1, tag2);
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 743efdf77fd571944a6ae11fff741bb5

View File

@@ -0,0 +1,93 @@
using NUnit.Framework;
namespace Jovian.TagSystem.Tests {
public class TestJovianTagsContainer {
private JovianTagsContainer container;
[SetUp]
public void Setup() {
JovianTagsHandler.Initialize();
JovianTagsHandler.RegisterTag("A.B.C.D");
JovianTagsHandler.RegisterTag("A.B.E");
JovianTagsHandler.RegisterTag("X.Y");
container = new JovianTagsContainer(8);
}
[TearDown]
public void TearDown() {
JovianTagsHandler.Reset();
}
[Test]
public void GivenEmptyContainer_WhenAdd_ThenContainsTag() {
var tag = JovianTagsHandler.GetTag("A.B");
container.Add(tag);
Assert.IsTrue(container.Contains(tag));
Assert.AreEqual(1, container.Count);
}
[Test]
public void GivenContainer_WhenAddDuplicate_ThenNotAdded() {
var tag = JovianTagsHandler.GetTag("A.B");
container.Add(tag);
container.Add(tag);
Assert.AreEqual(1, container.Count);
}
[Test]
public void GivenContainer_WhenRemove_ThenNotContained() {
var tag = JovianTagsHandler.GetTag("A.B");
container.Add(tag);
container.Remove(tag);
Assert.IsFalse(container.Contains(tag));
}
[Test]
public void GivenContainer_WhenClear_ThenEmpty() {
container.Add(JovianTagsHandler.GetTag("A"));
container.Add(JovianTagsHandler.GetTag("A.B"));
container.Clear();
Assert.AreEqual(0, container.Count);
}
[Test]
public void GivenContainer_WhenIndexer_ThenCorrectTag() {
var tagA = JovianTagsHandler.GetTag("A");
var tagB = JovianTagsHandler.GetTag("A.B");
container.Add(tagA);
container.Add(tagB);
Assert.AreEqual(tagA, container[0]);
Assert.AreEqual(tagB, container[1]);
}
[Test]
public void GivenContainerWithChild_WhenContainsDescendantOf_ThenTrue() {
var parent = JovianTagsHandler.GetTag("A.B");
container.Add(JovianTagsHandler.GetTag("A.B.C.D"));
container.Add(JovianTagsHandler.GetTag("X.Y"));
Assert.IsTrue(container.ContainsDescendantOf(parent));
}
[Test]
public void GivenContainerWithParent_WhenContainsAncestorOf_ThenTrue() {
var child = JovianTagsHandler.GetTag("A.B.C");
container.Add(JovianTagsHandler.GetTag("A.B"));
container.Add(JovianTagsHandler.GetTag("X.Y"));
Assert.IsTrue(container.ContainsAncestorOf(child));
}
[Test]
public void GivenContainerWithSibling_WhenContainsSibling_ThenTrue() {
var tag = JovianTagsHandler.GetTag("A.B.C");
container.Add(JovianTagsHandler.GetTag("A.B.E")); // sibling of C (both under A.B)
Assert.IsTrue(container.ContainsSibling(tag));
}
[Test]
public void GivenContainerWithoutSibling_WhenContainsSibling_ThenFalse() {
var tag = JovianTagsHandler.GetTag("A.B.C");
container.Add(JovianTagsHandler.GetTag("X.Y")); // unrelated
Assert.IsFalse(container.ContainsSibling(tag));
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 56948cc0d1c038549b8f0c3a42aec365

View File

@@ -0,0 +1,48 @@
using NUnit.Framework;
namespace Jovian.TagSystem.Tests {
public class TestJovianTagsGroup {
private const string TAG_ONE = "Test";
private const int EXPECTED_TAG_ID = 1;
[SetUp]
public void Setup() {
var tags = new RegisteredTag[] { new(TAG_ONE) };
JovianTagsHandler.Initialize();
JovianTagsHandler.RegisterTags(tags);
}
[Test]
public void GivenSelectionWithTag_WhenContains_ThenTrue() {
var selection = new JovianTagsGroup(TAG_ONE);
var resolved = JovianTagsHandler.GetTag(TAG_ONE);
Assert.IsTrue(selection.Contains(resolved));
}
[Test]
public void GivenSelectionWithoutTag_WhenContains_ThenFalse() {
var selection = new JovianTagsGroup("NonExistent");
var resolved = JovianTagsHandler.GetTag(TAG_ONE);
Assert.IsFalse(selection.Contains(resolved));
}
[Test]
public void GivenMultipleTags_WhenToContainer_ThenAllResolved() {
JovianTagsHandler.RegisterTag("Other");
var selection = new JovianTagsGroup(TAG_ONE, "Other");
var container = selection.ToContainer();
Assert.AreEqual(2, container.Count);
}
[Test]
public void GivenSelection_WhenHasAny_ThenCorrect() {
Assert.IsTrue(new JovianTagsGroup(TAG_ONE).HasAny());
Assert.IsFalse(new JovianTagsGroup().HasAny());
}
[TearDown]
public void Dispose() {
JovianTagsHandler.Reset();
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: ecc875077acb6d7499197f892e33d948

View File

@@ -0,0 +1,157 @@
using System.Collections.Generic;
using NUnit.Framework;
using UnityEngine.TestTools;
namespace Jovian.TagSystem.Tests {
public class TestJovianTagsHandler {
private const string TagBase = "Test";
private const string TagOne = "Test.One";
private const string TagTwo = "Test.Two";
private const string TagThree = "Test.Three";
private const string TagFour = "Test.One.Four";
private RegisteredTag[] tags;
[SetUp]
public void Setup() {
tags = new RegisteredTag[] { new(TagOne), new(TagTwo), new(TagThree), new(TagFour), new(TagBase) };
JovianTagsHandler.Initialize();
}
[TearDown]
public void TearDown() {
JovianTagsHandler.Reset();
}
[Test]
public void GivenUnregisteredTag_WhenGetTag_ThenReturnsNone() {
LogAssert.ignoreFailingMessages = true;
var tag = JovianTagsHandler.GetTag(TagOne);
Assert.IsTrue(tag.IsNone());
LogAssert.ignoreFailingMessages = false;
}
[Test]
public void GivenRegisteredTags_WhenGetTag_ThenReturnsValidTag() {
JovianTagsHandler.RegisterTags(tags);
var tagOne = JovianTagsHandler.GetTag(TagOne);
var tagThree = JovianTagsHandler.GetTag(TagThree);
Assert.IsTrue(tagOne.IsValid());
Assert.IsTrue(tagThree.IsValid());
Assert.AreNotEqual(tagOne.Id, tagThree.Id);
}
[Test]
[TestCase(TagOne, ExpectedResult = true)]
[TestCase(null, ExpectedResult = false)]
[TestCase("", ExpectedResult = false)]
[TestCase("None", ExpectedResult = true)]
public bool GivenTryGetGameTag_ThenReturnsExpected(string tagName) {
JovianTagsHandler.RegisterTags(tags);
return JovianTagsHandler.TryGetGameTag(tagName, out _);
}
[Test]
[TestCase(TagOne, ExpectedResult = true)]
[TestCase(null, ExpectedResult = false)]
[TestCase("", ExpectedResult = false)]
[TestCase("None", ExpectedResult = false)]
public bool GivenTryGetGameTagNotNone_ThenReturnsExpected(string tagName) {
JovianTagsHandler.RegisterTags(tags);
return JovianTagsHandler.TryGetGameTagThatIsNotNone(tagName, out _);
}
[Test]
public void GivenRegisteredTag_WhenTryGet_ThenTagIsCorrect() {
JovianTagsHandler.RegisterTags(tags);
JovianTagsHandler.TryGetGameTag(TagOne, out var tag);
Assert.AreEqual(JovianTagsHandler.GetTag(TagOne), tag);
}
[Test]
public void GivenChildTag_WhenRegistered_ThenParentIdIsSet() {
JovianTagsHandler.RegisterTags(tags);
var tagFour = JovianTagsHandler.GetTag(TagFour);
var tagOne = JovianTagsHandler.GetTag(TagOne);
// TagFour is "Test.One.Four" — its parent should be "Test.One"
Assert.AreEqual(tagOne.Id, tagFour.ParentId);
}
[Test]
public void GivenChildTag_WhenChecked_ThenIsDescendantOfParent() {
JovianTagsHandler.RegisterTags(tags);
var tagBase = JovianTagsHandler.GetTag(TagBase);
var tagOne = JovianTagsHandler.GetTag(TagOne);
var tagFour = JovianTagsHandler.GetTag(TagFour);
Assert.IsTrue(tagOne.IsDescendantOf(tagBase));
Assert.IsTrue(tagFour.IsDescendantOf(tagBase));
Assert.IsTrue(tagFour.IsDescendantOf(tagOne));
Assert.IsFalse(tagBase.IsDescendantOf(tagOne));
}
[Test]
public void GivenParentTag_WhenChecked_ThenIsAncestorOfChild() {
JovianTagsHandler.RegisterTags(tags);
var tagBase = JovianTagsHandler.GetTag(TagBase);
var tagOne = JovianTagsHandler.GetTag(TagOne);
var tagFour = JovianTagsHandler.GetTag(TagFour);
Assert.IsTrue(tagBase.IsAncestorOf(tagOne));
Assert.IsTrue(tagBase.IsAncestorOf(tagFour));
Assert.IsTrue(tagOne.IsAncestorOf(tagFour));
Assert.IsFalse(tagFour.IsAncestorOf(tagBase));
}
[Test]
public void GivenSiblingTags_WhenChecked_ThenAreSiblings() {
JovianTagsHandler.RegisterTags(tags);
var tagOne = JovianTagsHandler.GetTag(TagOne);
var tagTwo = JovianTagsHandler.GetTag(TagTwo);
var tagThree = JovianTagsHandler.GetTag(TagThree);
var tagFour = JovianTagsHandler.GetTag(TagFour);
// One, Two, Three are all children of Test — siblings
Assert.IsTrue(tagOne.IsSiblingTo(tagTwo));
Assert.IsTrue(tagTwo.IsSiblingTo(tagThree));
// Four is child of Test.One — not a sibling of Two
Assert.IsFalse(tagFour.IsSiblingTo(tagTwo));
}
[Test]
public void GivenRegisteredTag_WhenTagToString_ThenCorrectName() {
JovianTagsHandler.RegisterTags(tags);
var tagThree = JovianTagsHandler.GetTag(TagThree);
Assert.AreEqual(TagThree, JovianTagsHandler.TagToString(tagThree));
}
[Test]
public void GivenTagName_WhenDisplayName_ThenReturnsLastSegment() {
Assert.AreEqual("Four", JovianTagsHandler.DisplayName(TagFour));
Assert.AreEqual("Test", JovianTagsHandler.DisplayName(TagBase));
}
[Test]
public void GivenRegisteredTags_WhenGetById_ThenReturnsCorrectTag() {
JovianTagsHandler.RegisterTags(tags);
var tagOne = JovianTagsHandler.GetTag(TagOne);
var tagById = JovianTagsHandler.GetTag(tagOne.Id);
Assert.AreEqual(tagOne, tagById);
}
[Test]
public void GivenEmptyTag_WhenChecked_ThenIsNone() {
Assert.IsTrue(JovianTagsHandler.emptyTag.IsNone());
Assert.IsFalse(JovianTagsHandler.emptyTag.IsValid());
}
[Test]
public void GivenSameTag_WhenRegisteredTwice_ThenSameId() {
JovianTagsHandler.RegisterTag("Foo.Bar");
var first = JovianTagsHandler.GetTag("Foo.Bar");
JovianTagsHandler.RegisterTag("Foo.Bar");
var second = JovianTagsHandler.GetTag("Foo.Bar");
Assert.AreEqual(first.Id, second.Id);
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: cd13f72302bceda4b8025e613532c78c

View File

@@ -0,0 +1,18 @@
{
"name": "Jovian.TagSystem.Tests",
"rootNamespace": "Jovian.TagSystem.Tests",
"references": [
"Jovian.TagSystem"
],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: edb98aafe9b3b37478eb078aae34a5ce
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant: