public void DsfDataObject_Clone_NormalClone_FullDuplicationForProperties()
{
//------------Setup for test--------------------------
IDSFDataObject dataObject = new DsfDataObject(string.Empty, Guid.NewGuid(), "<x>1</x>");
Guid wfInstanceID = Guid.NewGuid();
dataObject.BookmarkExecutionCallbackID = Guid.NewGuid();
dataObject.CurrentBookmarkName = "def";
dataObject.DataList = new StringBuilder("<x/>");
dataObject.DataListID = Guid.NewGuid();
dataObject.DatalistInMergeDepth = enTranslationDepth.Data;
dataObject.DatalistInMergeID = Guid.NewGuid();
dataObject.DatalistInMergeType = enDataListMergeTypes.Union;
dataObject.DatalistOutMergeDepth = enTranslationDepth.Data;
dataObject.DatalistOutMergeFrequency = DataListMergeFrequency.Always;
dataObject.DatalistOutMergeID = Guid.NewGuid();
dataObject.DatalistOutMergeType = enDataListMergeTypes.Union;
dataObject.DebugSessionID = Guid.NewGuid();
dataObject.EnvironmentID = Guid.NewGuid();
// dataObject.Errors = new ErrorResultTO();
// dataObject.Errors.AddError("my error");
dataObject.ExecutionCallbackID = Guid.NewGuid();
dataObject.ExecutionOrigin = ExecutionOrigin.Debug;
dataObject.ExecutionOriginDescription = "xxx";
dataObject.ForceDeleteAtNextNativeActivityCleanup = true;
dataObject.IsDataListScoped = false;
dataObject.IsDebug = true;
dataObject.IsFromWebServer = true;
dataObject.IsOnDemandSimulation = true;
dataObject.NumberOfSteps = 2;
dataObject.OriginalInstanceID = Guid.NewGuid();
dataObject.ParentInstanceID = "1211";
dataObject.ParentServiceName = "xxx";
dataObject.ParentThreadID = 2;
dataObject.ParentWorkflowInstanceId = "1233";
dataObject.RawPayload = new StringBuilder("<raw>a</raw>");
dataObject.RemoteDebugItems = new List<IDebugState>();
dataObject.RemoteInvoke = false;
dataObject.RemoteInvokeResultShape = new StringBuilder("<x/>");
dataObject.RemoteInvokerID = "999";
dataObject.RemoteServiceType = "NA";
dataObject.ResourceID = Guid.NewGuid();
dataObject.ReturnType = EmitionTypes.XML;
dataObject.ServerID = Guid.NewGuid();
dataObject.ServiceName = "xxx";
dataObject.WorkflowInstanceId = wfInstanceID;
dataObject.WorkflowResumeable = false;
dataObject.ParentID = Guid.NewGuid();
dataObject.WorkspaceID = Guid.NewGuid();
dataObject.ClientID = Guid.NewGuid();
dataObject.RunWorkflowAsync = true;
dataObject.IsDebugNested = true;
dataObject.ForEachNestingLevel = 3;
dataObject.StopExecution = false;
var threadsToDispose = new Dictionary<int, List<Guid>>();
List<Guid> guidList = new List<Guid> { Guid.NewGuid() };
threadsToDispose.Add(3, guidList);
dataObject.ThreadsToDispose = threadsToDispose;
//------------Execute Test---------------------------
IDSFDataObject clonedObject = dataObject.Clone();
//------------Assert Results-------------------------
// check counts, then check values
var properties = typeof(IDSFDataObject).GetProperties();
Assert.AreEqual(57, properties.Length);
// now check each value to ensure it transfered
Assert.AreEqual(dataObject.BookmarkExecutionCallbackID, clonedObject.BookmarkExecutionCallbackID);
Assert.AreEqual(dataObject.CurrentBookmarkName, clonedObject.CurrentBookmarkName);
Assert.AreEqual(dataObject.DataList, clonedObject.DataList);
Assert.AreEqual(dataObject.DataListID, clonedObject.DataListID);
Assert.AreEqual(dataObject.DatalistInMergeDepth, clonedObject.DatalistInMergeDepth);
Assert.AreEqual(dataObject.DatalistInMergeID, clonedObject.DatalistInMergeID);
Assert.AreEqual(dataObject.DatalistInMergeType, clonedObject.DatalistInMergeType);
Assert.AreEqual(dataObject.DatalistOutMergeDepth, clonedObject.DatalistOutMergeDepth);
Assert.AreEqual(dataObject.DatalistOutMergeFrequency, clonedObject.DatalistOutMergeFrequency);
Assert.AreEqual(dataObject.DatalistOutMergeID, clonedObject.DatalistOutMergeID);
Assert.AreEqual(dataObject.DatalistOutMergeType, clonedObject.DatalistOutMergeType);
Assert.AreEqual(dataObject.DebugSessionID, clonedObject.DebugSessionID);
Assert.AreEqual(dataObject.EnvironmentID, clonedObject.EnvironmentID);
// Assert.AreEqual(dataObject.Errors, clonedObject.Errors);
Assert.AreEqual(dataObject.ExecutingUser, clonedObject.ExecutingUser);
Assert.AreEqual(dataObject.ExecutionCallbackID, clonedObject.ExecutionCallbackID);
Assert.AreEqual(dataObject.ExecutionOrigin, clonedObject.ExecutionOrigin);
Assert.AreEqual(dataObject.ExecutionOriginDescription, clonedObject.ExecutionOriginDescription);
Assert.AreEqual(dataObject.ForceDeleteAtNextNativeActivityCleanup, clonedObject.ForceDeleteAtNextNativeActivityCleanup);
Assert.AreEqual(dataObject.IsDataListScoped, clonedObject.IsDataListScoped);
Assert.AreEqual(dataObject.IsDebug, clonedObject.IsDebug);
Assert.AreEqual(dataObject.IsFromWebServer, clonedObject.IsFromWebServer);
Assert.AreEqual(dataObject.IsOnDemandSimulation, clonedObject.IsOnDemandSimulation);
Assert.AreEqual(dataObject.IsRemoteInvoke, clonedObject.IsRemoteInvoke);
Assert.AreEqual(dataObject.IsRemoteInvokeOverridden, clonedObject.IsRemoteInvokeOverridden);
Assert.AreEqual(dataObject.NumberOfSteps, clonedObject.NumberOfSteps);
Assert.AreEqual(dataObject.OriginalInstanceID, clonedObject.OriginalInstanceID);
Assert.AreEqual(dataObject.ParentInstanceID, clonedObject.ParentInstanceID);
Assert.AreEqual(dataObject.ParentServiceName, clonedObject.ParentServiceName);
Assert.AreEqual(dataObject.ParentThreadID, clonedObject.ParentThreadID);
Assert.AreEqual(dataObject.ParentWorkflowInstanceId, clonedObject.ParentWorkflowInstanceId);
Assert.AreEqual(dataObject.RawPayload, clonedObject.RawPayload);
Assert.AreEqual(dataObject.RemoteDebugItems, clonedObject.RemoteDebugItems);
Assert.AreEqual(dataObject.RemoteInvoke, clonedObject.RemoteInvoke);
Assert.AreEqual(dataObject.RemoteNonDebugInvoke, clonedObject.RemoteNonDebugInvoke);
Assert.AreEqual(dataObject.RemoteInvokeResultShape, clonedObject.RemoteInvokeResultShape);
Assert.AreEqual(dataObject.RemoteInvokerID, clonedObject.RemoteInvokerID);
Assert.AreEqual(dataObject.RemoteServiceType, clonedObject.RemoteServiceType);
Assert.AreEqual(dataObject.ResourceID, clonedObject.ResourceID);
Assert.AreEqual(dataObject.ReturnType, clonedObject.ReturnType);
Assert.AreEqual(dataObject.ServerID, clonedObject.ServerID);
Assert.AreEqual(dataObject.ClientID, clonedObject.ClientID);
Assert.AreEqual(dataObject.ServiceName, clonedObject.ServiceName);
Assert.AreEqual(dataObject.WorkflowInstanceId, clonedObject.WorkflowInstanceId);
Assert.AreEqual(dataObject.WorkflowResumeable, clonedObject.WorkflowResumeable);
Assert.AreEqual(dataObject.WorkspaceID, clonedObject.WorkspaceID);
Assert.AreEqual(dataObject.ThreadsToDispose, clonedObject.ThreadsToDispose);
Assert.AreEqual(dataObject.ParentID, clonedObject.ParentID);
Assert.AreEqual(dataObject.RunWorkflowAsync, clonedObject.RunWorkflowAsync);
Assert.AreEqual(dataObject.IsDebugNested, clonedObject.IsDebugNested);
Assert.AreEqual(dataObject.ForEachNestingLevel, clonedObject.ForEachNestingLevel);
Assert.AreEqual(dataObject.StopExecution, clonedObject.StopExecution);
}