2009-05-29 16:11:33 +00:00
|
|
|
/*
|
|
|
|
* Copyright (c) Contributors, http://opensimulator.org/
|
|
|
|
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
|
|
|
*
|
|
|
|
* Redistribution and use in source and binary forms, with or without
|
|
|
|
* modification, are permitted provided that the following conditions are met:
|
|
|
|
* * Redistributions of source code must retain the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer.
|
|
|
|
* * Redistributions in binary form must reproduce the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
|
|
* documentation and/or other materials provided with the distribution.
|
2009-06-01 17:38:11 +00:00
|
|
|
* * Neither the name of the OpenSim Project nor the
|
2009-05-29 16:11:33 +00:00
|
|
|
* names of its contributors may be used to endorse or promote products
|
|
|
|
* derived from this software without specific prior written permission.
|
|
|
|
*
|
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
|
|
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
|
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
|
|
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
|
|
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
|
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
|
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
|
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
|
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
*/
|
|
|
|
|
|
|
|
using log4net.Config;
|
|
|
|
using NUnit.Framework;
|
|
|
|
using NUnit.Framework.SyntaxHelpers;
|
|
|
|
using OpenMetaverse;
|
2009-05-29 20:20:47 +00:00
|
|
|
using OpenSim.Framework;
|
2009-05-29 16:11:33 +00:00
|
|
|
using OpenSim.Region.Framework.Scenes;
|
2009-06-01 18:03:51 +00:00
|
|
|
using OpenSim.Region.Framework.Scenes.Serialization;
|
2009-05-29 16:11:33 +00:00
|
|
|
using OpenSim.Tests.Common;
|
|
|
|
using OpenSim.Tests.Common.Setup;
|
2009-05-29 20:20:47 +00:00
|
|
|
using System.IO;
|
|
|
|
using System.Xml;
|
2009-05-29 16:11:33 +00:00
|
|
|
|
|
|
|
namespace OpenSim.Region.CoreModules.World.Serialiser.Tests
|
|
|
|
{
|
|
|
|
[TestFixture]
|
|
|
|
public class SerialiserTests
|
|
|
|
{
|
2009-06-01 17:38:11 +00:00
|
|
|
private string xml = @"
|
|
|
|
<SceneObjectGroup>
|
|
|
|
<RootPart>
|
|
|
|
<SceneObjectPart xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">
|
|
|
|
<AllowedDrop>false</AllowedDrop>
|
|
|
|
<CreatorID><Guid>a6dacf01-4636-4bb9-8a97-30609438af9d</Guid></CreatorID>
|
|
|
|
<FolderID><Guid>e6a5a05e-e8cc-4816-8701-04165e335790</Guid></FolderID>
|
|
|
|
<InventorySerial>1</InventorySerial>
|
|
|
|
<TaskInventory />
|
|
|
|
<ObjectFlags>0</ObjectFlags>
|
|
|
|
<UUID><Guid>e6a5a05e-e8cc-4816-8701-04165e335790</Guid></UUID>
|
|
|
|
<LocalId>2698615125</LocalId>
|
2009-06-01 18:03:51 +00:00
|
|
|
<Name>PrimMyRide</Name>
|
2009-06-01 17:38:11 +00:00
|
|
|
<Material>0</Material>
|
|
|
|
<PassTouches>false</PassTouches>
|
|
|
|
<RegionHandle>1099511628032000</RegionHandle>
|
|
|
|
<ScriptAccessPin>0</ScriptAccessPin>
|
|
|
|
<GroupPosition><X>147.23</X><Y>92.698</Y><Z>22.78084</Z></GroupPosition>
|
|
|
|
<OffsetPosition><X>0</X><Y>0</Y><Z>0</Z></OffsetPosition>
|
|
|
|
<RotationOffset><X>-4.371139E-08</X><Y>-1</Y><Z>-4.371139E-08</Z><W>0</W></RotationOffset>
|
|
|
|
<Velocity><X>0</X><Y>0</Y><Z>0</Z></Velocity>
|
|
|
|
<RotationalVelocity><X>0</X><Y>0</Y><Z>0</Z></RotationalVelocity>
|
|
|
|
<AngularVelocity><X>0</X><Y>0</Y><Z>0</Z></AngularVelocity>
|
|
|
|
<Acceleration><X>0</X><Y>0</Y><Z>0</Z></Acceleration>
|
|
|
|
<Description />
|
|
|
|
<Color />
|
|
|
|
<Text />
|
|
|
|
<SitName />
|
|
|
|
<TouchName />
|
|
|
|
<LinkNum>0</LinkNum>
|
|
|
|
<ClickAction>0</ClickAction>
|
|
|
|
<Shape>
|
|
|
|
<ProfileCurve>1</ProfileCurve>
|
|
|
|
<TextureEntry>AAAAAAAAERGZmQAAAAAABQCVlZUAAAAAQEAAAABAQAAAAAAAAAAAAAAAAAAAAA==</TextureEntry>
|
|
|
|
<ExtraParams>AA==</ExtraParams>
|
|
|
|
<PathBegin>0</PathBegin>
|
|
|
|
<PathCurve>16</PathCurve>
|
|
|
|
<PathEnd>0</PathEnd>
|
|
|
|
<PathRadiusOffset>0</PathRadiusOffset>
|
|
|
|
<PathRevolutions>0</PathRevolutions>
|
|
|
|
<PathScaleX>100</PathScaleX>
|
|
|
|
<PathScaleY>100</PathScaleY>
|
|
|
|
<PathShearX>0</PathShearX>
|
|
|
|
<PathShearY>0</PathShearY>
|
|
|
|
<PathSkew>0</PathSkew>
|
|
|
|
<PathTaperX>0</PathTaperX>
|
|
|
|
<PathTaperY>0</PathTaperY>
|
|
|
|
<PathTwist>0</PathTwist>
|
|
|
|
<PathTwistBegin>0</PathTwistBegin>
|
|
|
|
<PCode>9</PCode>
|
|
|
|
<ProfileBegin>0</ProfileBegin>
|
|
|
|
<ProfileEnd>0</ProfileEnd>
|
|
|
|
<ProfileHollow>0</ProfileHollow>
|
|
|
|
<Scale><X>10</X><Y>10</Y><Z>0.5</Z></Scale>
|
|
|
|
<State>0</State>
|
|
|
|
<ProfileShape>Square</ProfileShape>
|
|
|
|
<HollowShape>Same</HollowShape>
|
|
|
|
<SculptTexture><Guid>00000000-0000-0000-0000-000000000000</Guid></SculptTexture>
|
|
|
|
<SculptType>0</SculptType><SculptData />
|
|
|
|
<FlexiSoftness>0</FlexiSoftness>
|
|
|
|
<FlexiTension>0</FlexiTension>
|
|
|
|
<FlexiDrag>0</FlexiDrag>
|
|
|
|
<FlexiGravity>0</FlexiGravity>
|
|
|
|
<FlexiWind>0</FlexiWind>
|
|
|
|
<FlexiForceX>0</FlexiForceX>
|
|
|
|
<FlexiForceY>0</FlexiForceY>
|
|
|
|
<FlexiForceZ>0</FlexiForceZ>
|
|
|
|
<LightColorR>0</LightColorR>
|
|
|
|
<LightColorG>0</LightColorG>
|
|
|
|
<LightColorB>0</LightColorB>
|
|
|
|
<LightColorA>1</LightColorA>
|
|
|
|
<LightRadius>0</LightRadius>
|
|
|
|
<LightCutoff>0</LightCutoff>
|
|
|
|
<LightFalloff>0</LightFalloff>
|
|
|
|
<LightIntensity>1</LightIntensity>
|
|
|
|
<FlexiEntry>false</FlexiEntry>
|
|
|
|
<LightEntry>false</LightEntry>
|
|
|
|
<SculptEntry>false</SculptEntry>
|
|
|
|
</Shape>
|
|
|
|
<Scale><X>10</X><Y>10</Y><Z>0.5</Z></Scale>
|
|
|
|
<UpdateFlag>0</UpdateFlag>
|
|
|
|
<SitTargetOrientation><X>0</X><Y>0</Y><Z>0</Z><W>1</W></SitTargetOrientation>
|
|
|
|
<SitTargetPosition><X>0</X><Y>0</Y><Z>0</Z></SitTargetPosition>
|
|
|
|
<SitTargetPositionLL><X>0</X><Y>0</Y><Z>0</Z></SitTargetPositionLL>
|
|
|
|
<SitTargetOrientationLL><X>0</X><Y>0</Y><Z>0</Z><W>1</W></SitTargetOrientationLL>
|
|
|
|
<ParentID>0</ParentID>
|
|
|
|
<CreationDate>1211330445</CreationDate>
|
|
|
|
<Category>0</Category>
|
|
|
|
<SalePrice>0</SalePrice>
|
|
|
|
<ObjectSaleType>0</ObjectSaleType>
|
|
|
|
<OwnershipCost>0</OwnershipCost>
|
|
|
|
<GroupID><Guid>00000000-0000-0000-0000-000000000000</Guid></GroupID>
|
|
|
|
<OwnerID><Guid>a6dacf01-4636-4bb9-8a97-30609438af9d</Guid></OwnerID>
|
|
|
|
<LastOwnerID><Guid>a6dacf01-4636-4bb9-8a97-30609438af9d</Guid></LastOwnerID>
|
|
|
|
<BaseMask>2147483647</BaseMask>
|
|
|
|
<OwnerMask>2147483647</OwnerMask>
|
|
|
|
<GroupMask>0</GroupMask>
|
|
|
|
<EveryoneMask>0</EveryoneMask>
|
|
|
|
<NextOwnerMask>2147483647</NextOwnerMask>
|
|
|
|
<Flags>None</Flags>
|
|
|
|
<CollisionSound><Guid>00000000-0000-0000-0000-000000000000</Guid></CollisionSound>
|
|
|
|
<CollisionSoundVolume>0</CollisionSoundVolume>
|
|
|
|
</SceneObjectPart>
|
|
|
|
</RootPart>
|
|
|
|
<OtherParts />
|
2009-06-02 15:24:29 +00:00
|
|
|
</SceneObjectGroup>";
|
2009-06-01 17:38:11 +00:00
|
|
|
|
2009-05-29 16:11:33 +00:00
|
|
|
private string xml2 = @"
|
|
|
|
<SceneObjectGroup>
|
|
|
|
<SceneObjectPart xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">
|
|
|
|
<CreatorID><UUID>b46ef588-411e-4a8b-a284-d7dcfe8e74ef</UUID></CreatorID>
|
|
|
|
<FolderID><UUID>9be68fdd-f740-4a0f-9675-dfbbb536b946</UUID></FolderID>
|
|
|
|
<InventorySerial>0</InventorySerial>
|
|
|
|
<TaskInventory />
|
|
|
|
<ObjectFlags>0</ObjectFlags>
|
|
|
|
<UUID><UUID>9be68fdd-f740-4a0f-9675-dfbbb536b946</UUID></UUID>
|
|
|
|
<LocalId>720005</LocalId>
|
|
|
|
<Name>PrimFun</Name>
|
|
|
|
<Material>0</Material>
|
|
|
|
<RegionHandle>1099511628032000</RegionHandle>
|
|
|
|
<ScriptAccessPin>0</ScriptAccessPin>
|
|
|
|
<GroupPosition><X>153.9854</X><Y>121.4908</Y><Z>62.21781</Z></GroupPosition>
|
|
|
|
<OffsetPosition><X>0</X><Y>0</Y><Z>0</Z></OffsetPosition>
|
|
|
|
<RotationOffset><X>0</X><Y>0</Y><Z>0</Z><W>1</W></RotationOffset>
|
|
|
|
<Velocity><X>0</X><Y>0</Y><Z>0</Z></Velocity>
|
|
|
|
<RotationalVelocity><X>0</X><Y>0</Y><Z>0</Z></RotationalVelocity>
|
|
|
|
<AngularVelocity><X>0</X><Y>0</Y><Z>0</Z></AngularVelocity>
|
|
|
|
<Acceleration><X>0</X><Y>0</Y><Z>0</Z></Acceleration>
|
|
|
|
<Description />
|
|
|
|
<Color />
|
|
|
|
<Text />
|
|
|
|
<SitName />
|
|
|
|
<TouchName />
|
|
|
|
<LinkNum>0</LinkNum>
|
|
|
|
<ClickAction>0</ClickAction>
|
|
|
|
<Shape>
|
|
|
|
<PathBegin>0</PathBegin>
|
|
|
|
<PathCurve>16</PathCurve>
|
|
|
|
<PathEnd>0</PathEnd>
|
|
|
|
<PathRadiusOffset>0</PathRadiusOffset>
|
|
|
|
<PathRevolutions>0</PathRevolutions>
|
|
|
|
<PathScaleX>200</PathScaleX>
|
|
|
|
<PathScaleY>200</PathScaleY>
|
|
|
|
<PathShearX>0</PathShearX>
|
|
|
|
<PathShearY>0</PathShearY>
|
|
|
|
<PathSkew>0</PathSkew>
|
|
|
|
<PathTaperX>0</PathTaperX>
|
|
|
|
<PathTaperY>0</PathTaperY>
|
|
|
|
<PathTwist>0</PathTwist>
|
|
|
|
<PathTwistBegin>0</PathTwistBegin>
|
|
|
|
<PCode>9</PCode>
|
|
|
|
<ProfileBegin>0</ProfileBegin>
|
|
|
|
<ProfileEnd>0</ProfileEnd>
|
|
|
|
<ProfileHollow>0</ProfileHollow>
|
|
|
|
<Scale><X>1.283131</X><Y>5.903858</Y><Z>4.266288</Z></Scale>
|
|
|
|
<State>0</State>
|
|
|
|
<ProfileShape>Circle</ProfileShape>
|
|
|
|
<HollowShape>Same</HollowShape>
|
|
|
|
<ProfileCurve>0</ProfileCurve>
|
|
|
|
<TextureEntry>iVVnRyTLQ+2SC0fK7RVGXwJ6yc/SU4RDA5nhJbLUw3R1AAAAAAAAaOw8QQOhPSRAAKE9JEAAAAAAAAAAAAAAAAAAAAA=</TextureEntry>
|
|
|
|
<ExtraParams>AA==</ExtraParams>
|
|
|
|
</Shape>
|
|
|
|
<Scale><X>1.283131</X><Y>5.903858</Y><Z>4.266288</Z></Scale>
|
|
|
|
<UpdateFlag>0</UpdateFlag>
|
|
|
|
<SitTargetOrientation><w>0</w><x>0</x><y>0</y><z>1</z></SitTargetOrientation>
|
|
|
|
<SitTargetPosition><x>0</x><y>0</y><z>0</z></SitTargetPosition>
|
|
|
|
<SitTargetPositionLL><X>0</X><Y>0</Y><Z>0</Z></SitTargetPositionLL>
|
|
|
|
<SitTargetOrientationLL><X>0</X><Y>0</Y><Z>1</Z><W>0</W></SitTargetOrientationLL>
|
|
|
|
<ParentID>0</ParentID>
|
|
|
|
<CreationDate>1216066902</CreationDate>
|
|
|
|
<Category>0</Category>
|
|
|
|
<SalePrice>0</SalePrice>
|
|
|
|
<ObjectSaleType>0</ObjectSaleType>
|
|
|
|
<OwnershipCost>0</OwnershipCost>
|
|
|
|
<GroupID><UUID>00000000-0000-0000-0000-000000000000</UUID></GroupID>
|
|
|
|
<OwnerID><UUID>b46ef588-411e-4a8b-a284-d7dcfe8e74ef</UUID></OwnerID>
|
|
|
|
<LastOwnerID><UUID>b46ef588-411e-4a8b-a284-d7dcfe8e74ef</UUID></LastOwnerID>
|
|
|
|
<BaseMask>2147483647</BaseMask>
|
|
|
|
<OwnerMask>2147483647</OwnerMask>
|
|
|
|
<GroupMask>0</GroupMask>
|
|
|
|
<EveryoneMask>0</EveryoneMask>
|
|
|
|
<NextOwnerMask>2147483647</NextOwnerMask>
|
|
|
|
<Flags>None</Flags>
|
|
|
|
<SitTargetAvatar><UUID>00000000-0000-0000-0000-000000000000</UUID></SitTargetAvatar>
|
|
|
|
</SceneObjectPart>
|
|
|
|
<OtherParts />
|
|
|
|
</SceneObjectGroup>";
|
|
|
|
|
2009-05-29 20:20:47 +00:00
|
|
|
protected Scene m_scene;
|
2009-05-29 16:27:43 +00:00
|
|
|
protected SerialiserModule m_serialiserModule;
|
|
|
|
|
|
|
|
[TestFixtureSetUp]
|
|
|
|
public void Init()
|
|
|
|
{
|
|
|
|
m_serialiserModule = new SerialiserModule();
|
* Improves SceneSetupHelper to allow the tester to choose a real or mock, inventory and asset, service modules. The boolean startServices was replaced with realServices string. If the string contains the word asset, it will start a real asset module, if it contains inventory, it starts a real inventory. Otherwise, it use mock (NullPlugin-like) objects, for tests that don't really need functionality.
* SetupScene is now actually sharing the asset and inventory modules if the tester wishes to have multiple regions connected. To link regions, just start SetupScene with the same CommunicationManager for all scenes. SceneSetupHelper will hold a static reference to the modules and won't initialize them again, just run the scenes through the modules AddRegion, RegionLoaded and PostInitialize.
* With the recent changes, both asset and inventory (and in the future, user) services should always be asked from the scene, not instantiated alone. The tests should reflect this new behavior and always start a scene.
2009-08-11 15:07:54 +00:00
|
|
|
m_scene = SceneSetupHelpers.SetupScene("");
|
2009-05-29 20:20:47 +00:00
|
|
|
SceneSetupHelpers.SetupSceneModules(m_scene, m_serialiserModule);
|
2009-05-29 16:27:43 +00:00
|
|
|
}
|
|
|
|
|
2009-06-01 18:03:51 +00:00
|
|
|
[Test]
|
2009-06-02 15:24:29 +00:00
|
|
|
public void TestDeserializeXml()
|
2009-06-01 18:03:51 +00:00
|
|
|
{
|
|
|
|
TestHelper.InMethod();
|
|
|
|
//log4net.Config.XmlConfigurator.Configure();
|
|
|
|
|
|
|
|
SceneObjectGroup so = SceneObjectSerializer.FromOriginalXmlFormat(xml);
|
|
|
|
SceneObjectPart rootPart = so.RootPart;
|
|
|
|
|
|
|
|
Assert.That(rootPart.UUID, Is.EqualTo(new UUID("e6a5a05e-e8cc-4816-8701-04165e335790")));
|
|
|
|
Assert.That(rootPart.CreatorID, Is.EqualTo(new UUID("a6dacf01-4636-4bb9-8a97-30609438af9d")));
|
|
|
|
Assert.That(rootPart.Name, Is.EqualTo("PrimMyRide"));
|
|
|
|
|
|
|
|
// TODO: Check other properties
|
2009-06-02 15:24:29 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
public void TestSerializeXml()
|
|
|
|
{
|
|
|
|
TestHelper.InMethod();
|
|
|
|
//log4net.Config.XmlConfigurator.Configure();
|
|
|
|
|
|
|
|
string rpName = "My Little Donkey";
|
|
|
|
UUID rpUuid = UUID.Parse("00000000-0000-0000-0000-000000000964");
|
|
|
|
UUID rpCreatorId = UUID.Parse("00000000-0000-0000-0000-000000000915");
|
|
|
|
PrimitiveBaseShape shape = PrimitiveBaseShape.CreateSphere();
|
|
|
|
// Vector3 groupPosition = new Vector3(10, 20, 30);
|
|
|
|
// Quaternion rotationOffset = new Quaternion(20, 30, 40, 50);
|
|
|
|
// Vector3 offsetPosition = new Vector3(5, 10, 15);
|
|
|
|
|
|
|
|
SceneObjectPart rp = new SceneObjectPart();
|
|
|
|
rp.UUID = rpUuid;
|
|
|
|
rp.Name = rpName;
|
|
|
|
rp.CreatorID = rpCreatorId;
|
|
|
|
rp.Shape = shape;
|
|
|
|
|
|
|
|
SceneObjectGroup so = new SceneObjectGroup(rp);
|
|
|
|
|
|
|
|
// Need to add the object to the scene so that the request to get script state succeeds
|
|
|
|
m_scene.AddSceneObject(so);
|
|
|
|
|
|
|
|
string xml = SceneObjectSerializer.ToOriginalXmlFormat(so);
|
|
|
|
|
|
|
|
XmlTextReader xtr = new XmlTextReader(new StringReader(xml));
|
|
|
|
xtr.ReadStartElement("SceneObjectGroup");
|
|
|
|
xtr.ReadStartElement("RootPart");
|
|
|
|
xtr.ReadStartElement("SceneObjectPart");
|
|
|
|
|
|
|
|
UUID uuid = UUID.Zero;
|
|
|
|
string name = null;
|
|
|
|
UUID creatorId = UUID.Zero;
|
|
|
|
|
|
|
|
while (xtr.Read() && xtr.Name != "SceneObjectPart")
|
|
|
|
{
|
|
|
|
if (xtr.NodeType != XmlNodeType.Element)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
switch (xtr.Name)
|
|
|
|
{
|
|
|
|
case "UUID":
|
|
|
|
xtr.ReadStartElement("UUID");
|
|
|
|
uuid = UUID.Parse(xtr.ReadElementString("Guid"));
|
|
|
|
xtr.ReadEndElement();
|
|
|
|
break;
|
|
|
|
case "Name":
|
|
|
|
name = xtr.ReadElementContentAsString();
|
|
|
|
break;
|
|
|
|
case "CreatorID":
|
|
|
|
xtr.ReadStartElement("CreatorID");
|
|
|
|
creatorId = UUID.Parse(xtr.ReadElementString("Guid"));
|
|
|
|
xtr.ReadEndElement();
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
xtr.ReadEndElement();
|
|
|
|
xtr.ReadEndElement();
|
|
|
|
xtr.ReadStartElement("OtherParts");
|
|
|
|
xtr.ReadEndElement();
|
|
|
|
xtr.Close();
|
|
|
|
|
|
|
|
// TODO: More checks
|
|
|
|
Assert.That(uuid, Is.EqualTo(rpUuid));
|
|
|
|
Assert.That(name, Is.EqualTo(rpName));
|
|
|
|
Assert.That(creatorId, Is.EqualTo(rpCreatorId));
|
2009-06-01 18:03:51 +00:00
|
|
|
}
|
2009-06-01 17:38:11 +00:00
|
|
|
|
2009-05-29 16:11:33 +00:00
|
|
|
[Test]
|
2009-06-01 17:38:11 +00:00
|
|
|
public void TestDeserializeXml2()
|
2009-05-29 16:11:33 +00:00
|
|
|
{
|
|
|
|
TestHelper.InMethod();
|
|
|
|
//log4net.Config.XmlConfigurator.Configure();
|
|
|
|
|
2009-05-29 16:27:43 +00:00
|
|
|
SceneObjectGroup so = m_serialiserModule.DeserializeGroupFromXml2(xml2);
|
2009-05-29 16:11:33 +00:00
|
|
|
SceneObjectPart rootPart = so.RootPart;
|
|
|
|
|
|
|
|
Assert.That(rootPart.UUID, Is.EqualTo(new UUID("9be68fdd-f740-4a0f-9675-dfbbb536b946")));
|
|
|
|
Assert.That(rootPart.CreatorID, Is.EqualTo(new UUID("b46ef588-411e-4a8b-a284-d7dcfe8e74ef")));
|
|
|
|
Assert.That(rootPart.Name, Is.EqualTo("PrimFun"));
|
|
|
|
|
|
|
|
// TODO: Check other properties
|
|
|
|
}
|
2009-05-29 16:27:43 +00:00
|
|
|
|
2009-05-29 20:20:47 +00:00
|
|
|
[Test]
|
2009-06-01 17:38:11 +00:00
|
|
|
public void TestSerializeXml2()
|
2009-05-29 16:27:43 +00:00
|
|
|
{
|
|
|
|
TestHelper.InMethod();
|
2009-05-29 20:20:47 +00:00
|
|
|
//log4net.Config.XmlConfigurator.Configure();
|
|
|
|
|
|
|
|
string rpName = "My Little Pony";
|
|
|
|
UUID rpUuid = UUID.Parse("00000000-0000-0000-0000-000000000064");
|
|
|
|
UUID rpCreatorId = UUID.Parse("00000000-0000-0000-0000-000000000015");
|
|
|
|
PrimitiveBaseShape shape = PrimitiveBaseShape.CreateSphere();
|
|
|
|
// Vector3 groupPosition = new Vector3(10, 20, 30);
|
|
|
|
// Quaternion rotationOffset = new Quaternion(20, 30, 40, 50);
|
|
|
|
// Vector3 offsetPosition = new Vector3(5, 10, 15);
|
|
|
|
|
|
|
|
SceneObjectPart rp = new SceneObjectPart();
|
|
|
|
rp.UUID = rpUuid;
|
|
|
|
rp.Name = rpName;
|
|
|
|
rp.CreatorID = rpCreatorId;
|
|
|
|
rp.Shape = shape;
|
|
|
|
|
|
|
|
SceneObjectGroup so = new SceneObjectGroup(rp);
|
|
|
|
|
|
|
|
// Need to add the object to the scene so that the request to get script state succeeds
|
2009-05-29 21:01:18 +00:00
|
|
|
m_scene.AddSceneObject(so);
|
2009-05-29 20:20:47 +00:00
|
|
|
|
2009-06-01 17:38:11 +00:00
|
|
|
string xml2 = m_serialiserModule.SerializeGroupToXml2(so);
|
2009-05-29 20:20:47 +00:00
|
|
|
|
|
|
|
XmlTextReader xtr = new XmlTextReader(new StringReader(xml2));
|
|
|
|
xtr.ReadStartElement("SceneObjectGroup");
|
|
|
|
xtr.ReadStartElement("SceneObjectPart");
|
|
|
|
|
|
|
|
UUID uuid = UUID.Zero;
|
|
|
|
string name = null;
|
|
|
|
UUID creatorId = UUID.Zero;
|
|
|
|
|
|
|
|
while (xtr.Read() && xtr.Name != "SceneObjectPart")
|
|
|
|
{
|
|
|
|
if (xtr.NodeType != XmlNodeType.Element)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
switch (xtr.Name)
|
|
|
|
{
|
|
|
|
case "UUID":
|
|
|
|
xtr.ReadStartElement("UUID");
|
|
|
|
uuid = UUID.Parse(xtr.ReadElementString("Guid"));
|
|
|
|
xtr.ReadEndElement();
|
|
|
|
break;
|
|
|
|
case "Name":
|
|
|
|
name = xtr.ReadElementContentAsString();
|
|
|
|
break;
|
|
|
|
case "CreatorID":
|
|
|
|
xtr.ReadStartElement("CreatorID");
|
|
|
|
creatorId = UUID.Parse(xtr.ReadElementString("Guid"));
|
|
|
|
xtr.ReadEndElement();
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
xtr.ReadEndElement();
|
|
|
|
xtr.ReadStartElement("OtherParts");
|
|
|
|
xtr.ReadEndElement();
|
|
|
|
xtr.Close();
|
|
|
|
|
|
|
|
// TODO: More checks
|
|
|
|
Assert.That(uuid, Is.EqualTo(rpUuid));
|
|
|
|
Assert.That(name, Is.EqualTo(rpName));
|
|
|
|
Assert.That(creatorId, Is.EqualTo(rpCreatorId));
|
2009-05-29 16:27:43 +00:00
|
|
|
}
|
2009-05-29 16:11:33 +00:00
|
|
|
}
|
|
|
|
}
|