public void Should_print_multiple_times_with_actions_firing_correct_count()
        {
            var counter = 0;

            var report = new XtraReport();
            report.Bands.Add(new DetailBand());
            report.Bands[0].Controls.Add(new XRLine());

            var facade =
                new ReportControlActionFacade(ReportControlAction<XRLine>.WithNoPredicate(l =>
                                                                                              {
                                                                                                  l.ForeColor =
                                                                                                      Color.Blue;
                                                                                                  counter++;
                                                                                              }));

            var controller = new ReportController(new EventAggregator(), report,facade);

            var newReport1 = controller.Print(r => r.ExportToMemory());
            var newReport2 = controller.Print(r => r.ExportToMemory());

            newReport1.Bands[0].Controls[0].ForeColor.Should().Be(Color.Blue,"Action should have been applied to control");
            newReport2.Bands[0].Controls[0].ForeColor.Should().Be(Color.Blue, "Action should have been applied to control");

            counter.Should().Be(2,"Action should only have fired once for each time");
        }
        public void Should_cast_correctly_when_single_action_of_one_type()
        {
            var label = new XRLabel() {Text = "uncoverted"};
            var action = ReportControlAction<XRLabel>.WithNoPredicate(l => l.Text = "Converted");
            var facade = new ReportControlActionFacade(action);
            facade.AttemptActionsOnControl(label);

            label.Text.Should().Be("Converted");
        }
        public void Should_cast_correctly_when_multiple_actions_of_multiple_types()
        {
            var label = new XRLabel() { Text = "uncoverted" };
            var action = ReportControlAction<XRLabel>.WithNoPredicate(l => l.Text = "Converted");
            var action2 = ReportControlAction<XRLine>.WithNoPredicate(l => l.ForeColor = Color.Gold);
            var facade = new ReportControlActionFacade(action,action2);
            facade.AttemptActionsOnControl(label);

            label.Text.Should().Be("Converted");
        }
        public void Should_only_apply_action_when_predicate_is_satisfied()
        {
            const string transformText = "Jeremiah";
            var action = new ReportControlAction<XRLabel>((l) => l.Text != string.Empty, (l) => l.Text = transformText);

            var facade = new ReportControlActionFacade(action);

            var label1 = new XRLabel { Text = string.Empty };
            var label2 = new XRLabel { Text = "ChangeMe" };

            facade.AttemptActionsOnControl(label1);
            facade.AttemptActionsOnControl(label2);

            Assert.AreNotEqual(transformText, label1.Text);
            Assert.AreEqual(transformText, label2.Text);
        }
        public void Should_not_collide_with_another_controller_when_both_printing_using_save_event_aggregator()
        {
            var view = new XtraReport { DataSource = new[] { new object(), new object() } };

            var counterA = 0;
            var counterB = 0;

            IEventAggregator aggregator = new EventAggregator();

            var actionA = ReportControlAction<XRControl>.WithNoPredicate(c => counterA++);
            var actionB = ReportControlAction<XRControl>.WithNoPredicate(c => counterB++);
            var facadeA = new ReportControlActionFacade(actionA);
            var facadeB = new ReportControlActionFacade(actionB);

            var controllerA = new ReportController(aggregator, view, facadeA);
            var controllerB = new ReportController(aggregator, view, facadeB);

            controllerA.Print(r => r.ExportToMemory());
            controllerB.Print(r => r.ExportToMemory());

            counterA.Should().Be(1);
            counterB.Should().Be(1);
        }
        public void Should_handle_detail_reports()
        {
            var textvalues = new List<Tuple<int, string>>();
            var report = new XtraReportWithLabelInDetailReport();
            report.DataSource = new List<Person2>
                                    {
                                        new Person2
                                            {
                                                Name = "Douglas Sam",
                                                Age = 17,
                                                Dogs = new List<Dog> {new Dog {Name = "Rex"}, new Dog {Name = "Rudy"}}
                                            },
                                        new Person2
                                            {
                                                Name = "Fred Thomas",
                                                Age = 35,
                                                Dogs =
                                                    new List<Dog> {new Dog {Name = "Sally"}, new Dog {Name = "Stubert"}}
                                            },
                                        new Person2
                                            {
                                                Name = "Alex Matthew",
                                                Age = 100,
                                                Dogs =
                                                    new List<Dog>
                                                        {new Dog {Name = "Nibbles"}, new Dog {Name = "Norbert"}}
                                            }

                                    };
            int counter = 0;
            var action = ReportControlAction<XRLabel>.WithNoPredicate(l =>
            {
                counter++;
                textvalues.Add(new Tuple<int, string>(l.Report.GetHashCode(), l.Text));
            });
            var facade = new ReportControlActionFacade(action);

            var c = new ReportController(new EventAggregator(), report, facade);
            var newReport = c.Print(a => a.ExportToMemory());

            counter.Should().Be(6);


        }
        public void Should_fire_actions_against_item_in_subreport()
        {
            var report = new XtraReport();
            var detailBand = new DetailBand();
            report.Bands.Add(detailBand);


            var subreport = new XtraReport();
            var container = new XRSubreport {ReportSource = subreport, Name = "container"};
            detailBand.Controls.Add(container);
            

            var subReportBand = new DetailBand();
            subreport.Bands.Add(subReportBand);
            subReportBand.Controls.Add(new XRLine {Name = "line"});

            var facade =
                new ReportControlActionFacade(ReportControlAction<XRLine>.WithNoPredicate(l => l.ForeColor = Color.Blue));

            var report2 = new ReportController(new EventAggregator(), report, facade).Print(r => r.ExportToMemory());

            var newSubreport =
                ((XRSubreport) report2.Bands[0].Controls[0]).ReportSource;

            ((XRLine) newSubreport.Bands[0].Controls[0]).ForeColor.Should().Be(Color.Blue);

        }
 public void GivenTheXtrasubreportEngineIsInitialized()
 {
     var facade = new ReportControlActionFacade(_action);
     _controller = new ReportController(new EventAggregator(),_report, facade);
     
 }