From bb4f7ccf2e3bf9d2a9705fe965e0b04a46925e24 Mon Sep 17 00:00:00 2001 From: "SND\\AstrorEnales_cp" Date: Sun, 21 Oct 2012 19:49:04 +0000 Subject: [PATCH] Working on ModelMesh, ModelMeshCollection, ModelMeshPart and ModelMeshPartCollection tests --- .../ANX.Framework.TestCenter.csproj | 2 + .../ANX.Framework.TestCenter_Linux.csproj | 2 + .../ANX.Framework.TestCenter_PSVita.csproj | 2 + ...X.Framework.TestCenter_WindowsMetro.csproj | 2 + .../Graphics/ModelMeshCollectionTest.cs | 76 ++++++++++++ .../Graphics/ModelMeshPartCollectionTest.cs | 30 +++++ .../Strukturen/Graphics/ModelMeshPartTest.cs | 42 +++++++ .../Strukturen/Graphics/ModelMeshTest.cs | 60 ++++++++++ ANX.Framework/Graphics/ModelMesh.cs | 33 ++--- ANX.Framework/Graphics/ModelMeshCollection.cs | 113 ++++++++---------- ANX.Framework/Graphics/ModelMeshPart.cs | 2 +- .../Graphics/ModelMeshPartCollection.cs | 22 ++-- 12 files changed, 288 insertions(+), 98 deletions(-) create mode 100644 ANX.Framework.TestCenter/Strukturen/Graphics/ModelMeshPartTest.cs create mode 100644 ANX.Framework.TestCenter/Strukturen/Graphics/ModelMeshTest.cs diff --git a/ANX.Framework.TestCenter/ANX.Framework.TestCenter.csproj b/ANX.Framework.TestCenter/ANX.Framework.TestCenter.csproj index 1750c86b..2fb097e4 100644 --- a/ANX.Framework.TestCenter/ANX.Framework.TestCenter.csproj +++ b/ANX.Framework.TestCenter/ANX.Framework.TestCenter.csproj @@ -80,6 +80,8 @@ + + diff --git a/ANX.Framework.TestCenter/ANX.Framework.TestCenter_Linux.csproj b/ANX.Framework.TestCenter/ANX.Framework.TestCenter_Linux.csproj index b5124b36..08341642 100644 --- a/ANX.Framework.TestCenter/ANX.Framework.TestCenter_Linux.csproj +++ b/ANX.Framework.TestCenter/ANX.Framework.TestCenter_Linux.csproj @@ -80,6 +80,8 @@ + + diff --git a/ANX.Framework.TestCenter/ANX.Framework.TestCenter_PSVita.csproj b/ANX.Framework.TestCenter/ANX.Framework.TestCenter_PSVita.csproj index 303e0671..20e8c076 100644 --- a/ANX.Framework.TestCenter/ANX.Framework.TestCenter_PSVita.csproj +++ b/ANX.Framework.TestCenter/ANX.Framework.TestCenter_PSVita.csproj @@ -81,6 +81,8 @@ + + diff --git a/ANX.Framework.TestCenter/ANX.Framework.TestCenter_WindowsMetro.csproj b/ANX.Framework.TestCenter/ANX.Framework.TestCenter_WindowsMetro.csproj index e5f1cfdb..cd0f440b 100644 --- a/ANX.Framework.TestCenter/ANX.Framework.TestCenter_WindowsMetro.csproj +++ b/ANX.Framework.TestCenter/ANX.Framework.TestCenter_WindowsMetro.csproj @@ -82,6 +82,8 @@ + + diff --git a/ANX.Framework.TestCenter/Strukturen/Graphics/ModelMeshCollectionTest.cs b/ANX.Framework.TestCenter/Strukturen/Graphics/ModelMeshCollectionTest.cs index d4fef862..86bcac10 100644 --- a/ANX.Framework.TestCenter/Strukturen/Graphics/ModelMeshCollectionTest.cs +++ b/ANX.Framework.TestCenter/Strukturen/Graphics/ModelMeshCollectionTest.cs @@ -1,4 +1,12 @@ using System; +using System.Collections.Generic; +using System.Globalization; +using System.Reflection; +using ANX.Framework.Graphics; +using NUnit.Framework; + +using XNAModelMesh = Microsoft.Xna.Framework.Graphics.ModelMesh; +using XNAModelMeshCollection = Microsoft.Xna.Framework.Graphics.ModelMeshCollection; // This file is part of the ANX.Framework created by the // "ANX.Framework developer group" and released under the Ms-PL license. @@ -8,5 +16,73 @@ namespace ANX.Framework.TestCenter.Strukturen.Graphics { class ModelMeshCollectionTest { + [Test] + public void Constructor() + { + XNAModelMeshCollection xna; + ModelMeshCollection anx; + CreateCollections(out xna, out anx); + + Assert.AreEqual(xna.Count, anx.Count); + } + + [Test] + public void AccessorArgumentNull() + { + XNAModelMeshCollection xna; + ModelMeshCollection anx; + CreateCollections(out xna, out anx); + + TestDelegate xnaDeleg = delegate { XNAModelMesh xnaMesh = xna[""]; }; + TestDelegate anxDeleg = delegate { ModelMesh anxMesh = anx[""]; }; + + AssertHelper.ConvertEquals(Assert.Throws(xnaDeleg), + Assert.Throws(anxDeleg), "AccessorArgumentNull"); + } + + [Test] + public void AccessorKeyNotFound() + { + XNAModelMeshCollection xna; + ModelMeshCollection anx; + CreateCollections(out xna, out anx); + + TestDelegate xnaDeleg = delegate { XNAModelMesh xnaMesh = xna["test"]; }; + TestDelegate anxDeleg = delegate { ModelMesh anxMesh = anx["test"]; }; + + AssertHelper.ConvertEquals(Assert.Throws(xnaDeleg), + Assert.Throws(anxDeleg), "AccessorKeyNotFound"); + } + + [Test] + public void Accessor() + { + XNAModelMeshCollection xna; + ModelMeshCollection anx; + CreateCollections(out xna, out anx); + + XNAModelMesh xnaMesh = xna["mesh1"]; + ModelMesh anxMesh = anx["mesh1"]; + + Assert.AreEqual(xnaMesh.Name, anxMesh.Name); + Assert.AreEqual(xnaMesh.Tag, anxMesh.Tag); + Assert.AreEqual(xnaMesh.ParentBone, anxMesh.ParentBone); + Assert.AreEqual(xnaMesh.MeshParts.Count, anxMesh.MeshParts.Count); + AssertHelper.ConvertEquals(xnaMesh.BoundingSphere, anxMesh.BoundingSphere, "Accessor"); + } + + private void CreateCollections(out XNAModelMeshCollection xna, out ModelMeshCollection anx) + { + XNAModelMesh xnaMesh; + ModelMesh anxMesh; + ModelMeshTest.CreateMeshes(out xnaMesh, out anxMesh); + var xnaParameters = new object[] { new[] { xnaMesh } }; + xna = (XNAModelMeshCollection)Activator.CreateInstance(typeof(XNAModelMeshCollection), + BindingFlags.NonPublic | BindingFlags.Instance, null, xnaParameters, CultureInfo.InvariantCulture); + + var anxParameters = new object[] { new[] { anxMesh } }; + anx = (ModelMeshCollection)Activator.CreateInstance(typeof(ModelMeshCollection), + BindingFlags.NonPublic | BindingFlags.Instance, null, anxParameters, CultureInfo.InvariantCulture); + } } } diff --git a/ANX.Framework.TestCenter/Strukturen/Graphics/ModelMeshPartCollectionTest.cs b/ANX.Framework.TestCenter/Strukturen/Graphics/ModelMeshPartCollectionTest.cs index a060e5a3..8ab2028c 100644 --- a/ANX.Framework.TestCenter/Strukturen/Graphics/ModelMeshPartCollectionTest.cs +++ b/ANX.Framework.TestCenter/Strukturen/Graphics/ModelMeshPartCollectionTest.cs @@ -1,4 +1,11 @@ using System; +using System.Globalization; +using System.Reflection; +using ANX.Framework.Graphics; +using NUnit.Framework; + +using XNAModelMeshPart = Microsoft.Xna.Framework.Graphics.ModelMeshPart; +using XNAModelMeshPartCollection = Microsoft.Xna.Framework.Graphics.ModelMeshPartCollection; // This file is part of the ANX.Framework created by the // "ANX.Framework developer group" and released under the Ms-PL license. @@ -8,5 +15,28 @@ namespace ANX.Framework.TestCenter.Strukturen.Graphics { class ModelMeshPartCollectionTest { + [Test] + public void Constructor() + { + XNAModelMeshPartCollection xna; + ModelMeshPartCollection anx; + CreateCollections(out xna, out anx); + + Assert.AreEqual(xna.Count, anx.Count); + } + + private void CreateCollections(out XNAModelMeshPartCollection xna, out ModelMeshPartCollection anx) + { + XNAModelMeshPart xnaMesh; + ModelMeshPart anxMesh; + ModelMeshPartTest.CreateMeshes(out xnaMesh, out anxMesh); + var xnaParameters = new object[] { new[] { xnaMesh } }; + xna = (XNAModelMeshPartCollection)Activator.CreateInstance(typeof(XNAModelMeshPartCollection), + BindingFlags.NonPublic | BindingFlags.Instance, null, xnaParameters, CultureInfo.InvariantCulture); + + var anxParameters = new object[] { new[] { anxMesh } }; + anx = (ModelMeshPartCollection)Activator.CreateInstance(typeof(ModelMeshPartCollection), + BindingFlags.NonPublic | BindingFlags.Instance, null, anxParameters, CultureInfo.InvariantCulture); + } } } diff --git a/ANX.Framework.TestCenter/Strukturen/Graphics/ModelMeshPartTest.cs b/ANX.Framework.TestCenter/Strukturen/Graphics/ModelMeshPartTest.cs new file mode 100644 index 00000000..60f669f9 --- /dev/null +++ b/ANX.Framework.TestCenter/Strukturen/Graphics/ModelMeshPartTest.cs @@ -0,0 +1,42 @@ +using System; +using System.Globalization; +using System.Reflection; +using ANX.Framework.Graphics; +using NUnit.Framework; + +using XNAModelMeshPart = Microsoft.Xna.Framework.Graphics.ModelMeshPart; + +// This file is part of the ANX.Framework created by the +// "ANX.Framework developer group" and released under the Ms-PL license. +// For details see: http://anxframework.codeplex.com/license + +namespace ANX.Framework.TestCenter.Strukturen.Graphics +{ + class ModelMeshPartTest + { + [Test] + public void Constructor() + { + XNAModelMeshPart xna; + ModelMeshPart anx; + CreateMeshes(out xna, out anx); + + Assert.AreEqual(xna.StartIndex, anx.StartIndex); + Assert.AreEqual(xna.Tag, anx.Tag); + Assert.AreEqual(xna.VertexOffset, anx.VertexOffset); + Assert.AreEqual(xna.PrimitiveCount, anx.PrimitiveCount); + Assert.AreEqual(xna.NumVertices, anx.NumVertices); + } + + public static void CreateMeshes(out XNAModelMeshPart xna, out ModelMeshPart anx) + { + var parameters = new object[] { 4, 64, 0, 20, 777 }; + + xna = (XNAModelMeshPart)Activator.CreateInstance(typeof(XNAModelMeshPart), + BindingFlags.NonPublic | BindingFlags.Instance, null, parameters, CultureInfo.InvariantCulture); + + anx = (ModelMeshPart)Activator.CreateInstance(typeof(ModelMeshPart), + BindingFlags.NonPublic | BindingFlags.Instance, null, parameters, CultureInfo.InvariantCulture); + } + } +} diff --git a/ANX.Framework.TestCenter/Strukturen/Graphics/ModelMeshTest.cs b/ANX.Framework.TestCenter/Strukturen/Graphics/ModelMeshTest.cs new file mode 100644 index 00000000..af9067eb --- /dev/null +++ b/ANX.Framework.TestCenter/Strukturen/Graphics/ModelMeshTest.cs @@ -0,0 +1,60 @@ +using System; +using System.Globalization; +using System.Reflection; +using ANX.Framework.Graphics; +using NUnit.Framework; + +using XNAModelMesh = Microsoft.Xna.Framework.Graphics.ModelMesh; +using XNAModelMeshPart = Microsoft.Xna.Framework.Graphics.ModelMeshPart; +using XNABoundingSphere = Microsoft.Xna.Framework.BoundingSphere; +using XNAVector3 = Microsoft.Xna.Framework.Vector3; + +// This file is part of the ANX.Framework created by the +// "ANX.Framework developer group" and released under the Ms-PL license. +// For details see: http://anxframework.codeplex.com/license + +namespace ANX.Framework.TestCenter.Strukturen.Graphics +{ + class ModelMeshTest + { + [Test] + public void Constructor() + { + XNAModelMesh xna; + ModelMesh anx; + CreateMeshes(out xna, out anx); + + Assert.AreEqual(xna.Name, anx.Name); + Assert.AreEqual(xna.Tag, anx.Tag); + Assert.AreEqual(xna.ParentBone, anx.ParentBone); + Assert.AreEqual(xna.MeshParts.Count, anx.MeshParts.Count); + Assert.AreEqual(xna.Effects.Count, anx.Effects.Count); + AssertHelper.ConvertEquals(xna.BoundingSphere, anx.BoundingSphere, "Constructor"); + } + + public static void CreateMeshes(out XNAModelMesh xna, out ModelMesh anx) + { + var xnaParameters = new object[] + { + "mesh1", + null, + new XNABoundingSphere(XNAVector3.UnitY, 2f), + new XNAModelMeshPart[0], + 17 + }; + xna = (XNAModelMesh)Activator.CreateInstance(typeof(XNAModelMesh), + BindingFlags.NonPublic | BindingFlags.Instance, null, xnaParameters, CultureInfo.InvariantCulture); + + var anxParameters = new object[] + { + "mesh1", + null, + new BoundingSphere(Vector3.UnitY, 2f), + new ModelMeshPart[0], + 17 + }; + anx = (ModelMesh)Activator.CreateInstance(typeof(ModelMesh), + BindingFlags.NonPublic | BindingFlags.Instance, null, anxParameters, CultureInfo.InvariantCulture); + } + } +} diff --git a/ANX.Framework/Graphics/ModelMesh.cs b/ANX.Framework/Graphics/ModelMesh.cs index 95ba1183..d92de0c2 100644 --- a/ANX.Framework/Graphics/ModelMesh.cs +++ b/ANX.Framework/Graphics/ModelMesh.cs @@ -1,7 +1,5 @@ #region Using Statements using System; -using System.Collections; -using System.Collections.Generic; using ANX.Framework.NonXNA.Development; #endregion // Using Statements @@ -14,10 +12,10 @@ namespace ANX.Framework.Graphics { [PercentageComplete(100)] [Developer("Glatzemann")] - [TestState(TestStateAttribute.TestState.Untested)] + [TestState(TestStateAttribute.TestState.InProgress)] public sealed class ModelMesh { - private BoundingSphere boundingSphere; + private readonly BoundingSphere boundingSphere; public BoundingSphere BoundingSphere { @@ -30,7 +28,7 @@ namespace ANX.Framework.Graphics public ModelBone ParentBone { get; private set; } public object Tag { get; set; } - public ModelMesh(string name, ModelBone bone, BoundingSphere sphere, ModelMeshPart[] meshParts, Object tag) + internal ModelMesh(string name, ModelBone bone, BoundingSphere sphere, ModelMeshPart[] meshParts, Object tag) { this.Name = name; this.ParentBone = bone; @@ -42,10 +40,8 @@ namespace ANX.Framework.Graphics foreach (var item in this.MeshParts) { item.parentMesh = this; - if (item.Effect != null && !this.Effects.Contains(item.Effect)) - { - this.Effects.Add(item.Effect); - } + if (item.Effect != null && Effects.Contains(item.Effect) == false) + Effects.Add(item.Effect); } } @@ -56,31 +52,21 @@ namespace ANX.Framework.Graphics foreach (var item in MeshParts) { - if (object.ReferenceEquals(item, part)) - { + if (ReferenceEquals(item, part)) continue; - } - if (object.ReferenceEquals(item.Effect, oldEffect)) - { + if (ReferenceEquals(item.Effect, oldEffect)) oldEffectIsInUse = true; - } - if (object.ReferenceEquals(item.Effect, newEffect)) - { + if (ReferenceEquals(item.Effect, newEffect)) newEffectIsKnown = true; - } } if (oldEffect != null && !oldEffectIsInUse) - { Effects.Remove(oldEffect); - } if (newEffect != null && !newEffectIsKnown) - { Effects.Add(newEffect); - } } public void Draw() @@ -94,7 +80,8 @@ namespace ANX.Framework.Graphics GraphicsDevice graphics = part.VertexBuffer.GraphicsDevice; graphics.SetVertexBuffer(part.VertexBuffer, part.VertexOffset); graphics.Indices = part.IndexBuffer; - graphics.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, part.NumVertices, part.StartIndex, part.PrimitiveCount); + graphics.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, part.NumVertices, part.StartIndex, + part.PrimitiveCount); } } } diff --git a/ANX.Framework/Graphics/ModelMeshCollection.cs b/ANX.Framework/Graphics/ModelMeshCollection.cs index ba995177..df68c45e 100644 --- a/ANX.Framework/Graphics/ModelMeshCollection.cs +++ b/ANX.Framework/Graphics/ModelMeshCollection.cs @@ -15,70 +15,29 @@ namespace ANX.Framework.Graphics { [PercentageComplete(100)] [Developer("Glatzemann, AstrorEnales")] - [TestState(TestStateAttribute.TestState.InProgress)] + [TestState(TestStateAttribute.TestState.Tested)] public sealed class ModelMeshCollection : ReadOnlyCollection { private readonly ModelMesh[] modelMeshes; + public ModelMesh this[string meshName] + { + get + { + ModelMesh result; + if (TryGetValue(meshName, out result) == false) + throw new KeyNotFoundException(); + + return result; + } + } + internal ModelMeshCollection(ModelMesh[] modelMeshes) : base(modelMeshes) { this.modelMeshes = modelMeshes; } - public new Enumerator GetEnumerator() - { - return new Enumerator(this.modelMeshes); - } - - public struct Enumerator : IEnumerator, IDisposable, IEnumerator - { - private readonly ModelMesh[] wrappedArray; - private int position; - - internal Enumerator(ModelMesh[] wrappedArray) - { - this.wrappedArray = wrappedArray; - this.position = -1; - } - - public ModelMesh Current - { - get - { - return this.wrappedArray[this.position]; - } - } - - public bool MoveNext() - { - this.position++; - if (this.position >= this.wrappedArray.Length) - { - this.position = this.wrappedArray.Length; - return false; - } - return true; - } - - void IEnumerator.Reset() - { - this.position = -1; - } - - public void Dispose() - { - } - - object IEnumerator.Current - { - get - { - return this.Current; - } - } - } - public bool TryGetValue(string meshName, out ModelMesh value) { if (String.IsNullOrEmpty(meshName)) @@ -98,16 +57,50 @@ namespace ANX.Framework.Graphics return false; } - public ModelMesh this[string meshName] + public new Enumerator GetEnumerator() { - get + return new Enumerator(this.modelMeshes); + } + + public struct Enumerator : IEnumerator, IDisposable, IEnumerator + { + private readonly ModelMesh[] wrappedArray; + private int position; + + public ModelMesh Current { - ModelMesh result; - if (TryGetValue(meshName, out result) == false) + get { return this.wrappedArray[this.position]; } + } + + object IEnumerator.Current + { + get { return this.Current; } + } + + internal Enumerator(ModelMesh[] wrappedArray) + { + this.wrappedArray = wrappedArray; + this.position = -1; + } + + public bool MoveNext() + { + this.position++; + if (this.position >= this.wrappedArray.Length) { - throw new KeyNotFoundException(); + this.position = this.wrappedArray.Length; + return false; } - return result; + return true; + } + + void IEnumerator.Reset() + { + this.position = -1; + } + + public void Dispose() + { } } } diff --git a/ANX.Framework/Graphics/ModelMeshPart.cs b/ANX.Framework/Graphics/ModelMeshPart.cs index 5ca9281a..5c79d036 100644 --- a/ANX.Framework/Graphics/ModelMeshPart.cs +++ b/ANX.Framework/Graphics/ModelMeshPart.cs @@ -12,7 +12,7 @@ namespace ANX.Framework.Graphics { [PercentageComplete(100)] [Developer("Glatzemann")] - [TestState(TestStateAttribute.TestState.Untested)] + [TestState(TestStateAttribute.TestState.InProgress)] public sealed class ModelMeshPart { #region Private diff --git a/ANX.Framework/Graphics/ModelMeshPartCollection.cs b/ANX.Framework/Graphics/ModelMeshPartCollection.cs index f3ad0447..70b75f0b 100644 --- a/ANX.Framework/Graphics/ModelMeshPartCollection.cs +++ b/ANX.Framework/Graphics/ModelMeshPartCollection.cs @@ -33,21 +33,15 @@ namespace ANX.Framework.Graphics private readonly ModelMeshPart[] wrappedArray; private int position; - public ModelMeshPart Current - { - get - { - return this.wrappedArray[this.position]; - } - } + public ModelMeshPart Current + { + get { return this.wrappedArray[this.position]; } + } - object IEnumerator.Current - { - get - { - return this.Current; - } - } + object IEnumerator.Current + { + get { return this.Current; } + } internal Enumerator(ModelMeshPart[] wrappedArray) {