Esempio n. 1
0
        public void Given_a_mailbox_with_no_actor_attached_When_enqueing_Then_no_action_is_scheduled()
        {
            var receiver  = A.Fake <ActorRef>();
            var sender    = A.Fake <ActorRef>();
            var scheduler = A.Fake <IScheduler>();

            var mailbox = new TestableMailbox(scheduler);

            mailbox.Enqueue(new Envelope(receiver, "message", sender));

            A.CallTo(() => scheduler.Schedule(A <Action> .Ignored)).MustNotHaveHappened();
        }
Esempio n. 2
0
        public void When_enqueing_second_without_mailbox_has_processed_first_message_Then_no_extra_action_is_scheduled()
        {
            var receiver  = A.Fake <ActorRef>();
            var sender    = A.Fake <ActorRef>();
            var scheduler = A.Fake <IScheduler>();

            var mailbox = new TestableMailbox(scheduler);

            mailbox.SetActor(A.Fake <InternalActorRef>());
            mailbox.Enqueue(new Envelope(receiver, "first message", sender));
            mailbox.Enqueue(new Envelope(receiver, "second message", sender));
            A.CallTo(() => scheduler.Schedule(A <Action> .Ignored)).MustHaveHappened(Repeated.Exactly.Once);
        }
Esempio n. 3
0
        public void When_enqueing_first_time_Then_an_action_is_scheduled()
        {
            var receiver  = A.Fake <ActorRef>();
            var sender    = A.Fake <ActorRef>();
            var scheduler = A.Fake <IScheduler>();

            var mailbox = new TestableMailbox(scheduler);

            mailbox.SetActor(A.Fake <InternalActorRef>());
            mailbox.Enqueue(new Envelope(receiver, "message", sender));

            A.CallTo(() => scheduler.Schedule(A <Action> .Ignored)).MustHaveHappened(Repeated.Exactly.Once);
        }
Esempio n. 4
0
        public void Given_two_messages_in_mailbox_When_scheduled_Then_both_messages_are_processed()
        {
            var receiver  = A.Fake <ActorRef>();
            var sender    = A.Fake <ActorRef>();
            var scheduler = new ManuallySyncronousScheduler();

            var mailbox = new TestableMailbox(scheduler);

            mailbox.SetActor(A.Fake <InternalActorRef>());
            mailbox.Enqueue(new Envelope(receiver, "first message", sender));
            mailbox.Enqueue(new Envelope(receiver, "second message", sender));

            scheduler.ExecuteAll();
            var handledMessages = mailbox.HandledMessages.Select(e => e.Message as string).ToList();

            handledMessages.Count.Should().Be(2);
            handledMessages[0].Should().Be("first message");
            handledMessages[1].Should().Be("second message");
        }
Esempio n. 5
0
        public void Given_mailbox_with_messages_When_scheduler_processes_Then_mailbox_calls_actor_with_messages()
        {
            var receiver  = A.Fake <ActorRef>();
            var sender    = A.Fake <ActorRef>();
            var scheduler = new ManuallySyncronousScheduler();

            var mailbox       = new TestableMailbox(scheduler);
            var fakeActor     = A.Fake <InternalActorRef>();
            var actorMessages = new List <Envelope>();

            A.CallTo(() => fakeActor.HandleMessage(A <Envelope> .Ignored)).Invokes(x => actorMessages.Add(x.GetArgument <Envelope>(0)));
            mailbox.SetActor(fakeActor);
            mailbox.Enqueue(new Envelope(receiver, "first message", sender));
            mailbox.Enqueue(new Envelope(receiver, "second message", sender));

            scheduler.ExecuteAll();
            actorMessages.Count.Should().Be(2);
            actorMessages[0].Message.Should().Be("first message");
            actorMessages[1].Message.Should().Be("second message");
        }