extend regression TestDetachScriptedAttachementToInventory() to check correct running status on a re-rezzed attachment
parent
e126915bc1
commit
2858b1b1f4
|
@ -47,6 +47,8 @@ using OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation;
|
||||||
using OpenSim.Region.CoreModules.World.Serialiser;
|
using OpenSim.Region.CoreModules.World.Serialiser;
|
||||||
using OpenSim.Region.Framework.Scenes;
|
using OpenSim.Region.Framework.Scenes;
|
||||||
using OpenSim.Region.Framework.Interfaces;
|
using OpenSim.Region.Framework.Interfaces;
|
||||||
|
using OpenSim.Region.ScriptEngine.Interfaces;
|
||||||
|
using OpenSim.Region.ScriptEngine.Shared.Instance;
|
||||||
using OpenSim.Region.ScriptEngine.XEngine;
|
using OpenSim.Region.ScriptEngine.XEngine;
|
||||||
using OpenSim.Services.Interfaces;
|
using OpenSim.Services.Interfaces;
|
||||||
using OpenSim.Tests.Common;
|
using OpenSim.Tests.Common;
|
||||||
|
@ -379,29 +381,49 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests
|
||||||
ScenePresence sp = SceneHelpers.AddScenePresence(scene, ua1);
|
ScenePresence sp = SceneHelpers.AddScenePresence(scene, ua1);
|
||||||
|
|
||||||
SceneObjectGroup so = SceneHelpers.CreateSceneObject(1, sp.UUID, "att-name", 0x10);
|
SceneObjectGroup so = SceneHelpers.CreateSceneObject(1, sp.UUID, "att-name", 0x10);
|
||||||
TaskInventoryHelpers.AddScript(scene, so.RootPart);
|
TaskInventoryItem scriptTaskItem
|
||||||
|
= TaskInventoryHelpers.AddScript(
|
||||||
|
scene,
|
||||||
|
so.RootPart,
|
||||||
|
"scriptItem",
|
||||||
|
"default { attach(key id) { if (id != NULL_KEY) { llSay(0, \"Hello World\"); } } }");
|
||||||
|
|
||||||
InventoryItemBase userItem = UserInventoryHelpers.AddInventoryItem(scene, so, 0x100, 0x1000);
|
InventoryItemBase userItem = UserInventoryHelpers.AddInventoryItem(scene, so, 0x100, 0x1000);
|
||||||
|
|
||||||
// FIXME: Right now, we have to do a tricksy chat listen to make sure we know when the script is running.
|
// FIXME: Right now, we have to do a tricksy chat listen to make sure we know when the script is running.
|
||||||
// In the future, we need to be able to do this programatically more predicably.
|
// In the future, we need to be able to do this programatically more predicably.
|
||||||
scene.EventManager.OnChatFromWorld += OnChatFromWorld;
|
scene.EventManager.OnChatFromWorld += OnChatFromWorld;
|
||||||
|
|
||||||
SceneObjectGroup soRezzed
|
SceneObjectGroup rezzedSo
|
||||||
= scene.AttachmentsModule.RezSingleAttachmentFromInventory(sp, userItem.ID, (uint)AttachmentPoint.Chest);
|
= scene.AttachmentsModule.RezSingleAttachmentFromInventory(sp, userItem.ID, (uint)AttachmentPoint.Chest);
|
||||||
|
|
||||||
// Wait for chat to signal rezzed script has been started.
|
// Wait for chat to signal rezzed script has been started.
|
||||||
m_chatEvent.WaitOne(60000);
|
m_chatEvent.WaitOne(60000);
|
||||||
|
|
||||||
scene.AttachmentsModule.DetachSingleAttachmentToInv(sp, soRezzed);
|
scene.AttachmentsModule.DetachSingleAttachmentToInv(sp, rezzedSo);
|
||||||
|
|
||||||
InventoryItemBase userItemUpdated = scene.InventoryService.GetItem(userItem);
|
InventoryItemBase userItemUpdated = scene.InventoryService.GetItem(userItem);
|
||||||
AssetBase asset = scene.AssetService.Get(userItemUpdated.AssetID.ToString());
|
AssetBase asset = scene.AssetService.Get(userItemUpdated.AssetID.ToString());
|
||||||
|
|
||||||
|
// TODO: It would probably be better here to check script state via the saving and retrieval of state
|
||||||
|
// information at a higher level, rather than having to inspect the serialization.
|
||||||
XmlDocument soXml = new XmlDocument();
|
XmlDocument soXml = new XmlDocument();
|
||||||
soXml.LoadXml(Encoding.UTF8.GetString(asset.Data));
|
soXml.LoadXml(Encoding.UTF8.GetString(asset.Data));
|
||||||
|
|
||||||
XmlNodeList scriptStateNodes = soXml.GetElementsByTagName("ScriptState");
|
XmlNodeList scriptStateNodes = soXml.GetElementsByTagName("ScriptState");
|
||||||
Assert.That(scriptStateNodes.Count, Is.EqualTo(1));
|
Assert.That(scriptStateNodes.Count, Is.EqualTo(1));
|
||||||
|
|
||||||
|
// Re-rez the attachment to check script running state
|
||||||
|
SceneObjectGroup reRezzedSo = scene.AttachmentsModule.RezSingleAttachmentFromInventory(sp, userItem.ID, (uint)AttachmentPoint.Chest);
|
||||||
|
|
||||||
|
// Wait for chat to signal rezzed script has been started.
|
||||||
|
m_chatEvent.WaitOne(60000);
|
||||||
|
|
||||||
|
TaskInventoryItem reRezzedScriptItem = reRezzedSo.RootPart.Inventory.GetInventoryItem(scriptTaskItem.Name);
|
||||||
|
IScriptModule xengine = scene.RequestModuleInterface<IScriptModule>();
|
||||||
|
Assert.That(xengine.GetScriptState(reRezzedScriptItem.ItemID), Is.True);
|
||||||
|
|
||||||
|
// Console.WriteLine(soXml.OuterXml);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -79,9 +79,27 @@ namespace OpenSim.Tests.Common
|
||||||
/// <param name="part"></param>
|
/// <param name="part"></param>
|
||||||
/// <returns>The item that was added</returns>
|
/// <returns>The item that was added</returns>
|
||||||
public static TaskInventoryItem AddScript(Scene scene, SceneObjectPart part)
|
public static TaskInventoryItem AddScript(Scene scene, SceneObjectPart part)
|
||||||
|
{
|
||||||
|
return AddScript(scene, part, "scriptItem", "default { state_entry() { llSay(0, \"Hello World\"); } }");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Add a simple script to the given part.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// TODO: Accept input for item and asset IDs to avoid mysterious script failures that try to use any of these
|
||||||
|
/// functions more than once in a test.
|
||||||
|
/// </remarks>
|
||||||
|
/// <param name="scene"></param>
|
||||||
|
/// <param name="part"></param>
|
||||||
|
/// <param name="scriptName">Name of the script to add</param>
|
||||||
|
/// <param name="scriptSource">LSL script source</param>
|
||||||
|
/// <returns>The item that was added</returns>
|
||||||
|
public static TaskInventoryItem AddScript(
|
||||||
|
Scene scene, SceneObjectPart part, string scriptName, string scriptSource)
|
||||||
{
|
{
|
||||||
AssetScriptText ast = new AssetScriptText();
|
AssetScriptText ast = new AssetScriptText();
|
||||||
ast.Source = "default { state_entry() { llSay(0, \"Hello World\"); } }";
|
ast.Source = scriptSource;
|
||||||
ast.Encode();
|
ast.Encode();
|
||||||
|
|
||||||
UUID assetUuid = new UUID("00000000-0000-0000-1000-000000000000");
|
UUID assetUuid = new UUID("00000000-0000-0000-1000-000000000000");
|
||||||
|
@ -91,7 +109,7 @@ namespace OpenSim.Tests.Common
|
||||||
scene.AssetService.Store(asset);
|
scene.AssetService.Store(asset);
|
||||||
TaskInventoryItem item
|
TaskInventoryItem item
|
||||||
= new TaskInventoryItem
|
= new TaskInventoryItem
|
||||||
{ Name = "scriptItem", AssetID = assetUuid, ItemID = itemUuid,
|
{ Name = scriptName, AssetID = assetUuid, ItemID = itemUuid,
|
||||||
Type = (int)AssetType.LSLText, InvType = (int)InventoryType.LSL };
|
Type = (int)AssetType.LSLText, InvType = (int)InventoryType.LSL };
|
||||||
part.Inventory.AddInventoryItem(item, true);
|
part.Inventory.AddInventoryItem(item, true);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue