Exemplo n.º 1
0
        public void BeginSplittingSession_TextIteratorMustBeCleanedUpInCaseOfException()
        {
            MockRepository repo = new MockRepository();


            ITextAccess         ta = repo.CreateMock <ITextAccess>();
            ITextAccessIterator it = repo.CreateMock <ITextAccessIterator>();

            Expect.Call(ta.MaximumSequentialAdvancesAllowed).Return(3);
            repo.ReplayAll();
            MessagesSplitter target = new MessagesSplitter(ta, reFactory.Create(@"111", ReOptions.None));

            repo.VerifyAll();


            repo.BackToRecordAll();
            Expect.Call(ta.OpenIterator(0, TextAccessDirection.Forward)).Return(it);
            Expect.Call(it.PositionToCharIndex(0)).Return(0);
            Expect.Call(it.CurrentBuffer).Throw(new System.Security.SecurityException());
            it.Dispose(); Expect.On(it);
            repo.ReplayAll();
            try
            {
                target.BeginSplittingSession(new Range(0, 100), 0, MessagesParserDirection.Forward);
                Assert.IsTrue(false, "We must never get here because of an exception in prev call");
            }
            catch (System.Security.SecurityException)
            {
            }
            repo.VerifyAll();
            Assert.IsTrue(target.CurrentMessageIsEmpty);
        }
Exemplo n.º 2
0
        public void BeginSplittingSession_WithStartPositionThatDoesntGetMappedToCharacterByTextAccess()
        {
            MockRepository repo = new MockRepository();


            ITextAccess         ta = repo.CreateMock <ITextAccess>();
            ITextAccessIterator it = repo.CreateMock <ITextAccessIterator>();

            Expect.Call(ta.MaximumSequentialAdvancesAllowed).Return(3);
            repo.ReplayAll();
            MessagesSplitter target = new MessagesSplitter(ta, reFactory.Create(@"111", ReOptions.None));

            repo.VerifyAll();


            repo.BackToRecordAll();
            Expect.Call(ta.OpenIterator(90, TextAccessDirection.Forward)).Return(it);
            Expect.Call(it.PositionToCharIndex(90)).Throw(new ArgumentOutOfRangeException());
            it.Dispose(); Expect.On(it);
            repo.ReplayAll();
            target.BeginSplittingSession(new Range(0, 100), 90, MessagesParserDirection.Forward);
            repo.VerifyAll();
            Assert.IsTrue(target.CurrentMessageIsEmpty);


            repo.BackToRecordAll();
            repo.ReplayAll();
            TextMessageCapture capt = new TextMessageCapture();

            Assert.IsFalse(target.GetCurrentMessageAndMoveToNextOne(capt));
            repo.VerifyAll();
            Assert.IsTrue(target.CurrentMessageIsEmpty);


            repo.BackToRecordAll();
            repo.ReplayAll();
            target.EndSplittingSession();
            repo.VerifyAll();
        }
Exemplo n.º 3
0
        public void GetCurrentMessageAndMoveToNextOne_MainScenario_Forward()
        {
            MockRepository repo = new MockRepository();


            ITextAccess         ta = repo.CreateMock <ITextAccess>();
            ITextAccessIterator it = repo.CreateMock <ITextAccessIterator>();

            Expect.Call(ta.MaximumSequentialAdvancesAllowed).Return(3);
            repo.ReplayAll();
            MessagesSplitter target = new MessagesSplitter(ta, reFactory.Create(@"abc", ReOptions.None));

            repo.VerifyAll();


            repo.BackToRecordAll();
            Expect.Call(ta.OpenIterator(0, TextAccessDirection.Forward)).Return(it);
            Expect.Call(it.PositionToCharIndex(0)).Return(0);
            Expect.Call(it.CurrentBuffer).Return(
                "123456 abc 283147948 abc 3498");
            // |      |  |          |  |   |
            // 0      7  10         21 24  28 - char idx
            // 0      8  16         45 56  67 - positions
            Expect.Call(it.CharIndexToPosition(7)).Return((long)8);
            repo.ReplayAll();
            target.BeginSplittingSession(new Range(0, 100), 0, MessagesParserDirection.Forward);
            repo.VerifyAll();
            Assert.IsFalse(target.CurrentMessageIsEmpty);


            repo.BackToRecordAll();
            Expect.Call(it.CharIndexToPosition(21)).Return((long)45);
            repo.ReplayAll();
            var capt = new TextMessageCapture();

            Assert.IsTrue(target.GetCurrentMessageAndMoveToNextOne(capt));
            repo.VerifyAll();
            Assert.AreEqual("abc", capt.HeaderBuffer.Substring(capt.HeaderMatch.Index, capt.HeaderMatch.Length));
            Assert.AreEqual(" 283147948 ", capt.BodyBuffer.Substring(capt.BodyIndex, capt.BodyLength));
            Assert.AreEqual(8L, capt.BeginPosition);
            Assert.AreEqual(45L, capt.EndPosition);
            Assert.IsFalse(capt.IsLastMessage);
            Assert.IsFalse(target.CurrentMessageIsEmpty);


            repo.BackToRecordAll();
            Expect.Call(it.Advance(24)).Repeat.Once().Do((Predicate <int>) delegate(int i)
            {
                repo.Verify(it);
                repo.BackToRecord(it);
                Expect.Call(it.CurrentBuffer).Return(
                    " 3498 abc 2626277");
                //  |     |  |
                //  0     6  9           - char idx
                //  56    72 81          - position
                Expect.Call(it.CharIndexToPosition(6)).Return((long)72);
                repo.Replay(it);
                return(true);
            });
            repo.ReplayAll();
            Assert.IsTrue(target.GetCurrentMessageAndMoveToNextOne(capt));
            repo.VerifyAll();
            Assert.AreEqual("abc", capt.HeaderBuffer.Substring(capt.HeaderMatch.Index, capt.HeaderMatch.Length));
            Assert.AreEqual(" 3498 ", capt.BodyBuffer.Substring(capt.BodyIndex, capt.BodyLength));
            Assert.AreEqual(45L, capt.BeginPosition);
            Assert.AreEqual(72L, capt.EndPosition);
            Assert.IsFalse(capt.IsLastMessage);
            Assert.IsFalse(target.CurrentMessageIsEmpty);


            repo.BackToRecordAll();
            Expect.Call(it.Advance(9)).Repeat.Once().Do((Predicate <int>) delegate(int i)
            {
                repo.Verify(it);
                repo.BackToRecord(it);
                Expect.Call(it.CurrentBuffer).Return(
                    " 2626277");
                // |       |
                // 0       8 - char idx
                // 81      90  - position
                Expect.Call(it.CharIndexToPosition(8)).Return((long)90);
                repo.Replay(it);
                return(true);
            });
            repo.ReplayAll();
            Assert.IsTrue(target.GetCurrentMessageAndMoveToNextOne(capt));
            repo.VerifyAll();
            Assert.AreEqual("abc", capt.HeaderBuffer.Substring(capt.HeaderMatch.Index, capt.HeaderMatch.Length));
            Assert.AreEqual(" 2626277", capt.BodyBuffer.Substring(capt.BodyIndex, capt.BodyLength));
            Assert.AreEqual(72L, capt.BeginPosition);
            Assert.AreEqual(90L, capt.EndPosition);
            Assert.IsTrue(capt.IsLastMessage);
            Assert.IsTrue(target.CurrentMessageIsEmpty);


            repo.BackToRecordAll();
            repo.ReplayAll();
            Assert.IsFalse(target.GetCurrentMessageAndMoveToNextOne(capt));
            repo.VerifyAll();
            Assert.IsTrue(target.CurrentMessageIsEmpty);


            repo.BackToRecordAll();
            it.Dispose(); Expect.On(it);
            repo.ReplayAll();
            target.EndSplittingSession();
            repo.VerifyAll();
        }
Exemplo n.º 4
0
        public void GetCurrentMessageAndMoveToNextOne_MainScenario_Backward()
        {
            MockRepository repo = new MockRepository();


            ITextAccess         ta = repo.CreateMock <ITextAccess>();
            ITextAccessIterator it = repo.CreateMock <ITextAccessIterator>();

            repo.BackToRecordAll();
            Expect.Call(ta.MaximumSequentialAdvancesAllowed).Return(3);
            repo.ReplayAll();
            MessagesSplitter target = new MessagesSplitter(ta, reFactory.Create(@"abc", ReOptions.None));

            repo.VerifyAll();


            repo.BackToRecordAll();
            Expect.Call(ta.OpenIterator(100, TextAccessDirection.Backward)).Return(it);
            Expect.Call(it.PositionToCharIndex(100)).Return(29);
            Expect.Call(it.CurrentBuffer).Return(
                "123456 abc 283147948 abc 3498");
            // |      |  |          |  |    |
            // 0      7  10         21 24   29  - char idx
            // 50     61 67         85 87   100 - position
            Expect.Call(it.CharIndexToPosition(21)).Return((long)85);
            repo.ReplayAll();
            target.BeginSplittingSession(new Range(0, 100), 100, MessagesParserDirection.Backward);
            repo.VerifyAll();
            Assert.IsFalse(target.CurrentMessageIsEmpty);

            repo.BackToRecordAll();
            Expect.Call(it.CharIndexToPosition(7)).Return((long)61);
            Expect.Call(it.CharIndexToPosition(29)).Return((long)100);
            repo.ReplayAll();
            var capt = new TextMessageCapture();

            Assert.IsTrue(target.GetCurrentMessageAndMoveToNextOne(capt));
            repo.VerifyAll();
            Assert.AreEqual("abc", capt.HeaderBuffer.Substring(capt.HeaderMatch.Index, capt.HeaderMatch.Length));
            Assert.AreEqual(" 3498", capt.BodyBuffer.Substring(capt.BodyIndex, capt.BodyLength));
            Assert.AreEqual(85L, capt.BeginPosition);
            Assert.AreEqual(100L, capt.EndPosition);
            Assert.IsTrue(capt.IsLastMessage);
            Assert.IsFalse(target.CurrentMessageIsEmpty);


            repo.BackToRecordAll();
            Expect.Call(it.Advance(8)).Repeat.Once().Do((Predicate <int>) delegate(int i)
            {
                repo.Verify(it);
                repo.BackToRecord(it);
                Expect.Call(it.CurrentBuffer).Return(
                    "11 abc 123456 abc 283147948 ");
                //  |  |  |       |  |         |
                //  0  3  6       14 17        27   - char idx
                //  20 33 50      61 67        85   - positions
                Expect.Call(it.CharIndexToPosition(3)).Return((long)33);
                repo.Replay(it);
                return(true);
            });
            repo.ReplayAll();
            Assert.IsTrue(target.GetCurrentMessageAndMoveToNextOne(capt));
            repo.VerifyAll();
            Assert.AreEqual("abc", capt.HeaderBuffer.Substring(capt.HeaderMatch.Index, capt.HeaderMatch.Length));
            Assert.AreEqual(" 283147948 ", capt.BodyBuffer.Substring(capt.BodyIndex, capt.BodyLength));
            Assert.AreEqual(61L, capt.BeginPosition);
            Assert.AreEqual(85L, capt.EndPosition);
            Assert.IsFalse(capt.IsLastMessage);
            Assert.IsFalse(target.CurrentMessageIsEmpty);



            repo.BackToRecordAll();
            Expect.Call(it.Advance(14)).Repeat.Once().Do((Predicate <int>) delegate(int i)
            {
                repo.Verify(it);
                repo.BackToRecord(it);
                Expect.Call(it.CurrentBuffer).Return(
                    "11 abc 123456 ");
                //  |  |  |       |
                //  0  3  6       13 - char idx
                //  20 33         61 - pos
                repo.Replay(it);
                return(true);
            });
            repo.ReplayAll();
            Assert.IsTrue(target.GetCurrentMessageAndMoveToNextOne(capt));
            repo.VerifyAll();
            Assert.AreEqual("abc", capt.HeaderBuffer.Substring(capt.HeaderMatch.Index, capt.HeaderMatch.Length));
            Assert.AreEqual(" 123456 ", capt.BodyBuffer.Substring(capt.BodyIndex, capt.BodyLength));
            Assert.AreEqual(33L, capt.BeginPosition);
            Assert.AreEqual(61L, capt.EndPosition);
            Assert.IsFalse(capt.IsLastMessage);
            Assert.IsTrue(target.CurrentMessageIsEmpty);



            repo.BackToRecordAll();
            repo.ReplayAll();
            Assert.IsFalse(target.GetCurrentMessageAndMoveToNextOne(capt));
            repo.VerifyAll();
            Assert.IsTrue(target.CurrentMessageIsEmpty);



            repo.BackToRecordAll();
            it.Dispose(); Expect.On(it);
            repo.ReplayAll();
            target.EndSplittingSession();
            repo.VerifyAll();
        }