public void MaximumIsGreaterThanAnyDateTime()
        {
            var t1 = new MessageTimestamp(new DateTime(3423, DateTimeKind.Local));

            Assert.IsTrue(MessageTimestamp.Compare(t1, MessageTimestamp.MaxValue) < 0);
            Assert.IsTrue(MessageTimestamp.Compare(MessageTimestamp.MaxValue, t1) > 0);

            var t2 = new MessageTimestamp(new DateTime(3423, DateTimeKind.Utc));

            Assert.IsTrue(MessageTimestamp.Compare(t2, MessageTimestamp.MaxValue) < 0);
            Assert.IsTrue(MessageTimestamp.Compare(MessageTimestamp.MaxValue, t2) > 0);

            var t3 = new MessageTimestamp(new DateTime(3423, DateTimeKind.Unspecified));

            Assert.IsTrue(MessageTimestamp.Compare(t3, MessageTimestamp.MaxValue) < 0);
            Assert.IsTrue(MessageTimestamp.Compare(MessageTimestamp.MaxValue, t3) > 0);

            var t4 = new MessageTimestamp(new DateTime(1, DateTimeKind.Local));

            Assert.IsTrue(MessageTimestamp.Compare(t4, MessageTimestamp.MaxValue) < 0);
            Assert.IsTrue(MessageTimestamp.Compare(MessageTimestamp.MaxValue, t4) > 0);

            var t5 = new MessageTimestamp(new DateTime(1, DateTimeKind.Utc));

            Assert.IsTrue(MessageTimestamp.Compare(t5, MessageTimestamp.MaxValue) < 0);
            Assert.IsTrue(MessageTimestamp.Compare(MessageTimestamp.MaxValue, t5) > 0);
        }
        public void MinimumIsLessThanAnyDateTime()
        {
            Func <long, long> localTicksToUtcTicks = ticks => new DateTime(ticks, DateTimeKind.Local).ToUniversalTime().Ticks;

            var t1 = new MessageTimestamp(new DateTime(3423, DateTimeKind.Local));

            Assert.IsTrue(MessageTimestamp.Compare(t1, MessageTimestamp.MinValue) > 0);
            Assert.IsTrue(MessageTimestamp.Compare(MessageTimestamp.MinValue, t1) < 0);

            var t2 = new MessageTimestamp(new DateTime(localTicksToUtcTicks(3423), DateTimeKind.Utc));

            Assert.IsTrue(MessageTimestamp.Compare(t2, MessageTimestamp.MinValue) > 0);
            Assert.IsTrue(MessageTimestamp.Compare(MessageTimestamp.MinValue, t2) < 0);

            var t3 = new MessageTimestamp(new DateTime(3423, DateTimeKind.Unspecified));

            Assert.IsTrue(MessageTimestamp.Compare(t3, MessageTimestamp.MinValue) > 0);
            Assert.IsTrue(MessageTimestamp.Compare(MessageTimestamp.MinValue, t3) < 0);

            var t4 = new MessageTimestamp(new DateTime(1, DateTimeKind.Local));

            Assert.IsTrue(MessageTimestamp.Compare(t4, MessageTimestamp.MinValue) > 0);
            Assert.IsTrue(MessageTimestamp.Compare(MessageTimestamp.MinValue, t4) < 0);

            var t5 = new MessageTimestamp(new DateTime(localTicksToUtcTicks(1), DateTimeKind.Utc));

            Assert.IsTrue(MessageTimestamp.Compare(t5, MessageTimestamp.MinValue) > 0);
            Assert.IsTrue(MessageTimestamp.Compare(MessageTimestamp.MinValue, t5) < 0);
        }
        public int CompareTo(TextLogEventTrigger t)
        {
            int x;

            if ((x = Math.Sign(this.StreamPosition - t.StreamPosition)) != 0)
            {
                return(x);
            }
            if ((x = MessageTimestamp.Compare(this.Timestamp, t.Timestamp)) != 0)
            {
                return(x);
            }
            return(0);
        }
示例#4
0
        public static int Compare(StateInspectorEvent evt1, MessageTimestamp evt2time, ILogSource evt2source, long evt2Position)
        {
            int sign = MessageTimestamp.Compare(evt1.Trigger.Timestamp.Adjust(evt1.Output.LogSource.TimeOffsets), evt2time);

            if (sign != 0)
            {
                return(sign);
            }
            sign = MessagesComparer.CompareLogSourceConnectionIds(
                evt1.Output.LogSource.GetSafeConnectionId(), evt2source.GetSafeConnectionId());
            if (sign != 0)
            {
                return(sign);
            }
            sign = Math.Sign(evt1.Trigger.StreamPosition - evt2Position);
            return(sign);
        }
        public void LoselessFormatTest()
        {
            var d1 = new MessageTimestamp(new DateTime(2010, 10, 22, 3, 3, 4, DateTimeKind.Local));
            var d2 = new MessageTimestamp(new DateTime(2010, 10, 22, 3, 3, 4, DateTimeKind.Utc));
            var d3 = new MessageTimestamp(new DateTime(2010, 10, 22, 3, 3, 4, DateTimeKind.Unspecified));

            var d1_str      = d1.StoreToLoselessFormat();
            var d2_str      = d2.StoreToLoselessFormat();
            var d3_str      = d3.StoreToLoselessFormat();
            var d1_restored = MessageTimestamp.ParseFromLoselessFormat(d1_str);
            var d2_restored = MessageTimestamp.ParseFromLoselessFormat(d2_str);
            var d3_restored = MessageTimestamp.ParseFromLoselessFormat(d3_str);

            Assert.AreEqual(0, MessageTimestamp.Compare(d1, d1_restored));
            Assert.AreEqual(0, MessageTimestamp.Compare(d2, d2_restored));
            Assert.AreEqual(0, MessageTimestamp.Compare(d2, d2_restored));
        }
        public int CompareThreads(IThread t1, IThread t2)
        {
            if (t1.IsDisposed || t2.IsDisposed)
            {
                return(0);
            }
            int ret = 0;

            switch (sortColumn)
            {
            case 0:
                ret = string.Compare(t2.ID, t1.ID);
                break;

            case 1:
                ret = MessageTimestamp.Compare(GetBookmarkDate(t2.FirstKnownMessage), GetBookmarkDate(t1.FirstKnownMessage));
                break;

            case 2:
                ret = MessageTimestamp.Compare(GetBookmarkDate(t2.LastKnownMessage), GetBookmarkDate(t1.LastKnownMessage));
                break;
            }
            return(ascending ? ret : -ret);
        }
        static VisualizerNode MakeRootNode(
            IReadOnlyList <IStateInspectorOutputsGroup> groups,
            EventHandler <NodeCreatedEventArgs> nodeCreationHandler,
            ImmutableDictionary <ILogSource, string> annotationsMap,
            VisualizerNode existingRoot
            )
        {
            var existingRoots = existingRoot.Children.ToLookup(c => c.InspectedObject);

            var children = ImmutableList.CreateRange(
                groups.SelectMany(
                    group => group.Roots.Select(rootObj =>
            {
                var existingNode = existingRoots[rootObj].FirstOrDefault();
                if (existingNode != null)
                {
                    return(existingNode.SetAnnotationsMap(annotationsMap));
                }
                var newNode = MakeVisualizerNode(rootObj, 1, annotationsMap);
                newNode.SetInitialProps(nodeCreationHandler);                                 // call handler on second phase when all children and parents are initiated
                return(newNode);
            })
                    )
                );

            children = children.Sort((n1, n2) => MessageTimestamp.Compare(GetNodeTimestamp(n1), GetNodeTimestamp(n2)));

            var result = new VisualizerNode(null, children, true, false, 0, annotationsMap);

            if (!result.HasSelectedNodes && result.Children.Count > 0)
            {
                result = result.Children[0].Select(true);
            }

            return(result);
        }
示例#8
0
        void EnsureTreeView()
        {
            if (!treeViewInvalidated)
            {
                return;
            }
            treeViewInvalidated = false;

            var  oldRoots      = view.EnumCollection(view.RootNodesCollection).ToList();
            var  newRoots      = new List <NodeInfo>();
            bool updateStarted = false;

            MarkAllViewPartsAsDead();
            foreach (var group in model.Groups)
            {
                TreeViewPart part;
                if (!viewPartsCache.TryGetValue(group.Key, out part))
                {
                    viewPartsCache.Add(group.Key, part = new TreeViewPart()
                    {
                        Key = group.Key
                    });

                    foreach (var rootObj in group.Roots)
                    {
                        if (!updateStarted)
                        {
                            view.BeginTreeUpdate();
                            updateStarted = true;
                        }
                        var nodesToCollapse = new List <NodeInfo>();
                        var rootNode        = CreateViewNode(view, new NodesCollectionInfo(), rootObj, 0, nodesToCollapse);
                        part.RootNodes.Add(rootNode);
                        view.ExpandAll(rootNode);
                        nodesToCollapse.ForEach(view.Collapse);
                    }
                }
                newRoots.AddRange(part.RootNodes);
                part.OutputIsAlive = true;
            }
            RemoveDeadViewPartsFromCache();

            newRoots.Sort((n1, n2) => MessageTimestamp.Compare(GetNodeTimestamp(n1), GetNodeTimestamp(n2)));

            bool propsNeedUpdating = false;

            if (!newRoots.SequenceEqual(oldRoots))
            {
                if (!updateStarted)
                {
                    view.BeginTreeUpdate();
                }

                var oldSelectedNodes = view.SelectedNodes;
                var newSelectedNodes = (
                    from selectedNode in oldSelectedNodes
                    let selectedObj = GetInspectedObject(selectedNode)
                                      where selectedObj != null
                                      let selectedObjRoot = selectedObj.GetRoot()
                                                            where newRoots.Any(r => r.Tag == selectedObjRoot)
                                                            select selectedNode
                    ).ToArray();

                view.Clear(view.RootNodesCollection);
                foreach (var rootNode in newRoots)
                {
                    view.AddNode(view.RootNodesCollection, rootNode);
                }

                if (newSelectedNodes.Length > 0)
                {
                    view.SelectedNodes = newSelectedNodes;
                    selectedObjectsPathsBeforeSelectionLoss.Clear();
                }
                else if (oldSelectedNodes.Length > 0)
                {
                    selectedObjectsPathsBeforeSelectionLoss.Clear();
                    selectedObjectsPathsBeforeSelectionLoss.AddRange(
                        from selectedNode in oldSelectedNodes
                        let selectedObj = GetInspectedObject(selectedNode)
                                          where selectedObj != null
                                          select new InspectedObjectPath(selectedObj)
                        );
                }
                else if (selectedObjectsPathsBeforeSelectionLoss.Count > 0)
                {
                    newSelectedNodes = (
                        from p in selectedObjectsPathsBeforeSelectionLoss
                        let n = p.Follow(this)
                                where n != null
                                select n.Value
                        ).ToArray();
                    if (newSelectedNodes.Length > 0)
                    {
                        view.SelectedNodes = newSelectedNodes;
                        view.ScrollSelectedNodesInView();
                        selectedObjectsPathsBeforeSelectionLoss.Clear();
                    }
                }

                view.EndTreeUpdate();
            }
            newRoots.ForEach(UpdateRootNodeText);

            if (propsNeedUpdating)
            {
                UpdateSelectedObjectPropertiesAndHistory();
            }
        }