Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }