public void Unknow_port_to_map()
        {
            var sut = new Map_message_to_input_ports();

            List<IStream> streams = new List<IStream>();
            sut.Inject(streams);

            Assert.Throws(typeof(InvalidOperationException),
                          () => sut.Process(new Message("b", "some data")));
        }
        public void Unknow_port_to_map_causes_no_error()
        {
            var sut = new Map_message_to_input_ports();

            var streams = new List<IStream>();
            sut.Inject(streams);

            var results = new List<string>();
            sut.Result += _ => results.Add(_.Port.Fullname);

            sut.Process(new Message("b", "some data"));

            Assert.AreEqual(0, results.Count);
        }
        public void Data_gets_copied()
        {
            var sut = new Map_message_to_input_ports();

            List<IStream> streams = new List<IStream>();
            streams.Add(new Stream("a", "a1"));
            sut.Inject(streams);

            IMessage result = null;
            sut.Result += _ => result = _;

            sut.Process(new Message("a", "some data"));

            Assert.AreEqual("some data", result.Data);
        }
        public void Maps_to_single_input_port()
        {
            var sut = new Map_message_to_input_ports();

            List<IStream> streams = new List<IStream>();
            streams.Add(new Stream("a", "a1"));
            streams.Add(new Stream("b", "b1"));
            streams.Add(new Stream("c", "c1"));
            sut.Inject(streams);

            string result = null;
            sut.Result += _ => result = _.Port.Fullname;

            sut.Process(new Message("b", "some data"));

            Assert.AreEqual("b1", result);
        }
        public void Maps_to_multiple_input_ports()
        {
            var sut = new Map_message_to_input_ports();

            var streams = new List<IStream>();
            streams.Add(new Stream("a", "a1"));
            streams.Add(new Stream("b", "b1"));
            streams.Add(new Stream("b", "b2"));
            streams.Add(new Stream("c", "c1"));
            sut.Inject(streams);

            var results = new List<string>();
            sut.Result += _ => results.Add(_.Port.Fullname);

            sut.Process(new Message("b", "some data"));

            Assert.That(results, Is.EquivalentTo(new[] {"b1", "b2"}));
        }
        public Process_message()
        {
            // Build
            _map = new Map_message_to_input_ports();
            var output = new Output_result();
            _create = new Create_task();
            var exec = new Execute_task();
            var nest = new Nest_message_flow();

            // Bind
            _process += _map.Process;
            _map.Result += _ => Message(_);
            _map.Result += output.Process;
            output.Result += _ => Result(_);
            output.Continue +=_create.Process;
            _create.Result += exec.Process;
            _create.UnknownOperation += nest.Process;
            exec.Result += _ => Continue(_);
            exec.HandledException += _ => Continue(_);
            exec.UnhandledException += _ => UnhandledException(_);
            nest.Result += _map.Process;

            _execute += exec.Process;
        }