コード例 #1
0
        public void BeforeEach()
        {
            searchResultModel = Substitute.For <ISearchResultModel>();
            highlightFilters  = Substitute.For <IFiltersList>();
            selectionManager  = Substitute.For <ISelectionManager>();
            messagesSource    = Substitute.For <IMessagesSource>();
            colorTheme        = Substitute.For <IColorTheme>();
            wordSelection     = new WordSelection();
            isRawMessagesMode = false;
            viewSize          = 3;
            highlightFilters.FilteringEnabled.Returns(true);
            colorTheme.HighlightingColors.Returns(ImmutableArray.CreateRange(Enumerable.Range(
                                                                                 (int)FilterAction.IncludeAndColorizeFirst, FilterAction.IncludeAndColorizeLast - FilterAction.IncludeAndColorizeFirst + 1)
                                                                             .Select(i => MakeHightlightingColor((FilterAction)i))
                                                                             ));
            msg1 = new Message(0, 1, null, new MessageTimestamp(), new StringSlice("test message 1"), SeverityFlag.Info);
            msg2 = new Message(0, 1, null, new MessageTimestamp(), new StringSlice("test message 2"), SeverityFlag.Info);
            msgWithMultilineText = new Message(0, 1, null, new MessageTimestamp(), new StringSlice(
                                                   @"2019/03/27 06:27:52.143 T#1 I app: model creation finished
import { imock, instance, when, anything, verify, resetCalls, MockPropertyPolicy, deepEqual } from 'ts-mockito';
import * as expect from 'expect';
import { Map, OrderedSet } from 'immutable';
import { ChangeNotification } from '../../../../client/model/utils';
import { PodStore, Pod } from '../../../../client/model/pod/store';
import { MeetingSession } from '../../../../client/model/meeting/impl/meeting/meetingSession';
import { Meeting, MeetingParticipant, LocalMeetingParticipant } from '../../../../client/model/meeting';
import { Conversation, ConversationStore, StreamId } from '../../../../client/model/conversation/store';
import { MeetingStartupOptions, Meeting as MeetingBase, MediaDevices, ParticipantTracks, ScreenTrack } from '../../../../client/model/meeting';
import { Protocol } from '../../../../client/model/meeting/protocol';
import { MeetingImpl } from '../../../../client/model/meeting/impl/meeting/impl/meetingImpl';
import { RtcManager, RtcManagerConfig } from '../../../../client/model/rtcManager';
import { MeetingAnalytics, LeaveSources } from '../../../../client/model/analytics';
import { MeetingParticipants } from '../../../../client/model/meeting/impl/meeting/meetingParticipants';
import { UncaughtExceptionsTrap } from '../../../utils/uncaughtExceptionsTrap';
import { AutoResetEvent, waiter } from '../../../utils/promise-utils';
import { MeetingLocalMedia } from '../../../../client/model/meeting/impl/media/meetingLocalMedia';
import { MeetingRemoteMedia } from '../../../../client/model/meeting/impl/media/meetingRemoteMedia';
import { LolexClock, install } from 'lolex';
import { RtcTokenProvider } from '../../../../client/model/meeting/impl/protocol/impl/rtcTokenProviderImpl';
import { User, UserStore, CurrentUser, UserId } from '../../../../client/model/users/store';
import { fireAndForget } from '../../../utils/promise-utils';
import { RtcSettingsStore, RtcSettings } from '../../../../client/model/settings/store';
import { GeoRouter } from '../../../../client/model/georouting/geoRouter';
import { UserBackend } from '../../../../client/model/users/backend';

describe('MeetingV2', () => {
    let meeting: Meeting;"
                                                   ), SeverityFlag.Info);
        }
コード例 #2
0
 public SourceBuffer(IMessagesSource src, Diagnostics diagnostics, MessageTextGetter displayTextGetter)
 {
     this.source            = src;
     this.diagnostics       = diagnostics;
     this.displayTextGetter = displayTextGetter;
 }
コード例 #3
0
        public DisplayLine(IMessage msg, int lineIndex, int linesCount, MessageTextGetter displayTextGetter, IMessagesSource source, int index = -1)
        {
            Message             = msg;
            LineIndex           = lineIndex;
            TotalLinesInMessage = linesCount;
            DisplayTextGetter   = displayTextGetter;
            var msgLen = msg.EndPosition - msg.Position;

            if (linesCount > 1)
            {
                var lineLen = msgLen / (double)linesCount;
                LineOffsetBegin = lineLen * lineIndex;
                LineOffsetEnd   = (lineIndex + 1) * lineLen;
                if (lineIndex == linesCount - 1)
                {
                    // this it to ensure the offset is strictly equal to the beginning of next message.
                    // generic formula with floating point arithmetics leads to inequality.
                    LineOffsetEnd = msgLen;
                }
            }
            else
            {
                LineOffsetBegin = 0;
                LineOffsetEnd   = msgLen;
            }
            Index  = index;
            Source = source;
        }
コード例 #4
0
 public SourceBuffer(IMessagesSource src)
 {
     this.source = src;
 }
コード例 #5
0
        static async Task <ScreenBufferMessagesRange> GetScreenBufferLines(
            IMessagesSource src,
            long startFrom,
            int maxCount,
            EnumMessagesFlag flags,
            bool rawLogMode,
            CancellationToken cancellation,
            bool doNotCountFirstMessage = false
            )
        {
            var backward       = (flags & EnumMessagesFlag.Backward) != 0;
            var lines          = new List <DisplayLine>();
            var loadedMessages = 0;
            var linesToIgnore  = 0;
            await src.EnumMessages(startFrom, msg =>
            {
                var messagesLinesCount = msg.GetDisplayText(rawLogMode).GetLinesCount();
                if (backward)
                {
                    for (int i = messagesLinesCount - 1; i >= 0; --i)
                    {
                        lines.Add(new DisplayLine(msg, i, messagesLinesCount));
                    }
                }
                else
                {
                    for (int i = 0; i < messagesLinesCount; ++i)
                    {
                        lines.Add(new DisplayLine(msg, i, messagesLinesCount));
                    }
                }
                ++loadedMessages;
                if (doNotCountFirstMessage && loadedMessages == 1)
                {
                    linesToIgnore = lines.Count;
                }
                return((lines.Count - linesToIgnore) < maxCount);
            }, flags | EnumMessagesFlag.IsActiveLogPositionHint, LogProviderCommandPriority.RealtimeUserAction, cancellation);

            cancellation.ThrowIfCancellationRequested();
            var firstRead = lines.FirstOrDefault();

            if (backward)
            {
                lines.Reverse();
            }
            var badPosition = backward ? src.PositionsRange.Begin : src.PositionsRange.End;
            ScreenBufferMessagesRange ret;

            ret.Lines         = lines;
            ret.BeginPosition = lines.Count > 0 ? lines[0].Message.Position : badPosition;
            if (lines.Count == 0)
            {
                ret.EndPosition = badPosition;
            }
            else
            {
                ret.EndPosition = lines[lines.Count - 1].Message.EndPosition;
            }
            return(ret);
        }
コード例 #6
0
 bool IScreenBuffer.ContainsSource(IMessagesSource source)
 {
     return(buffers.ContainsKey(source));
 }