public void SBinaryDataListEntry_MoveIndexDataForClone_MinMaxAndGapsMove_SameDataBothSides() { //------------Setup for test-------------------------- var sBinaryDataListEntry = new SBinaryDataListEntry(); sBinaryDataListEntry.Init(1); sBinaryDataListEntry.ReInstateMinValue(2); sBinaryDataListEntry.ReInstateMaxValue(5); sBinaryDataListEntry.AddGap(1); var targetEntry = new SBinaryDataListEntry(); targetEntry.Init(1); //------------Execute Test--------------------------- targetEntry.MoveIndexDataForClone(sBinaryDataListEntry.Keys.MinIndex(), sBinaryDataListEntry.Keys.MaxIndex(), sBinaryDataListEntry.FetchGaps()); //------------Assert Results------------------------- var targetKeys = targetEntry.Keys; var parentKeys = sBinaryDataListEntry.Keys; var targetMin = targetKeys.MinIndex(); var targetMax = targetKeys.MaxIndex(); var targetCount = targetKeys.Count; var parentMin = parentKeys.MinIndex(); var parentMax = parentKeys.MaxIndex(); var parentCount = parentKeys.Count; // found count we can tell if gaps moved ;) Assert.AreEqual(3, parentCount); Assert.AreEqual(parentCount, targetCount); Assert.AreEqual(parentMin, targetMin); Assert.AreEqual(parentMax, targetMax); }
public IBinaryDataListEntry Clone(enTranslationDepth depth, Guid clonedStorageId, out string error) { error = string.Empty; BinaryDataListEntry result; Guid dlKey = DataListKey; if (clonedStorageId != GlobalConstants.NullDataListID) { dlKey = clonedStorageId; } if (Columns != null) { // clone the columns IList <Dev2Column> cols = new List <Dev2Column>(Columns.Count); foreach (Dev2Column c in Columns) { cols.Add(new Dev2Column(c.ColumnName, c.ColumnDescription)); } result = new BinaryDataListEntry(Namespace, Description, cols, dlKey); } else { result = new BinaryDataListEntry(Namespace, Description, dlKey); } // 2013.09.09 - we're the same, just adjust the view and return if (clonedStorageId.Equals(DataListKey)) { // manip result's _internalObj aka the view of the data ;) result._internalObj.CopyTo(_internalObj); // copy express auditing data too ;) result.ComplexExpressionAuditor = ComplexExpressionAuditor; } if (depth == enTranslationDepth.Data || depth == enTranslationDepth.Data_With_Blank_OverWrite) { // clone _items if (IsRecordset) { IIndexIterator ii = _internalObj.Keys; bool isEmtpy = _internalObj.IsEmtpy; result._internalObj.IsEmtpy = isEmtpy; while (ii.HasMore()) { int next = ii.FetchNextIndex(); // clone the data IList <IBinaryDataListItem> items = _internalObj[next]; IList <IBinaryDataListItem> clone = new List <IBinaryDataListItem>(); // Bug 8725 if (items != null) { foreach (IBinaryDataListItem itm in items) { clone.Add(itm.Clone()); } } // now push back clone result._internalObj[next] = clone; } // ensure we reset min index if not 1 ;) var keys = _internalObj.Keys; var min = keys.MinIndex(); var max = keys.MaxIndex(); var gaps = _internalObj.FetchGaps(); result._internalObj.MoveIndexDataForClone(min, max, gaps, false); } else { IList <IBinaryDataListItem> items = _internalObj[0]; IList <IBinaryDataListItem> clone = items.Select(itm => itm.Clone()).ToList(); // now push back clone result._internalObj[0] = clone; result._internalObj.IsEmtpy = false; } } else // only wanted the shape cloned { var keys = _internalObj.Keys; var min = keys.MinIndex(); var max = keys.MaxIndex(); var gaps = _internalObj.FetchGaps(); result._internalObj.MoveIndexDataForClone(min, max, gaps, false); } result.ComplexExpressionAuditor = ComplexExpressionAuditor; return(result); }