public void ValidateOrderRequest()
        {
            // Null.
            {
                var          v = new RequestProviderValidator();
                OrderRequest r = null;

                AssertEx.Throws <ArgumentNullException>(() =>
                {
                    v.Validate(r);
                });
            }

            // Map null.
            {
                var          v = new RequestProviderValidator();
                OrderRequest r = new OrderRequest();
                r.Map = null;

                AssertEx.Throws <ArgumentNullException>(() =>
                {
                    v.Validate(r);
                });
            }

            // Valid.
            {
                var          v = new RequestProviderValidator();
                OrderRequest r = new OrderRequest();
                r.Map = new ValueMap();

                v.Validate(r);
            }
        }
        public void ValidateRefreshTableRequest()
        {
            // Null.
            {
                var v = new RequestProviderValidator();
                RefreshTableRequest r = null;

                AssertEx.Throws <ArgumentNullException>(() =>
                {
                    v.Validate(r);
                });
            }

            // Invalid tables.
            {
                foreach (var opt in new[] { TableType.Unknown, TableType.Summary })
                {
                    var v = new RequestProviderValidator();
                    RefreshTableRequest r = new RefreshTableRequest();
                    r.Table = opt;

                    AssertEx.Throws <ArgumentOutOfRangeException>(() =>
                    {
                        v.Validate(r);
                    });
                }
            }

            // Invalid order table.
            {
                var v = new RequestProviderValidator();
                RefreshTableRequest r = new RefreshTableRequest();
                r.Table = TableType.Orders;

                AssertEx.Throws <ArgumentException>(() =>
                {
                    v.Validate(r);
                });
            }

            // Valid.
            {
                foreach (var opt in new[] { TableType.Accounts, TableType.ClosedTrades, TableType.Messages,
                                            TableType.Offers, TableType.Trades })
                {
                    var v = new RequestProviderValidator();
                    RefreshTableRequest r = new RefreshTableRequest();
                    r.Table = opt;

                    v.Validate(r);
                }
            }
        }
        public void ValidateMarketDataSnapshotRequest()
        {
            // Null.
            {
                var v = new RequestProviderValidator();
                MarketDataSnapshotRequest r = null;

                AssertEx.Throws <ArgumentNullException>(() =>
                {
                    v.Validate(r);
                });
            }

            // Instrument null.
            {
                var v = new RequestProviderValidator();
                MarketDataSnapshotRequest r = new MarketDataSnapshotRequest();
                r.Instrument = null;

                AssertEx.Throws <ArgumentNullException>(() =>
                {
                    v.Validate(r);
                });
            }

            // Instrument empty.
            {
                var v = new RequestProviderValidator();
                MarketDataSnapshotRequest r = new MarketDataSnapshotRequest();
                r.Instrument = "";

                AssertEx.Throws <ArgumentNullException>(() =>
                {
                    v.Validate(r);
                });
            }

            // Negative MaxBars.
            {
                var v = new RequestProviderValidator();
                MarketDataSnapshotRequest r = new MarketDataSnapshotRequest();
                r.Instrument = "Test";
                r.MaxBars    = -5;

                AssertEx.Throws <ArgumentOutOfRangeException>(() =>
                {
                    v.Validate(r);
                });
            }

            // Valid without CustomTimeframeId.
            {
                var v = new RequestProviderValidator();
                MarketDataSnapshotRequest r = new MarketDataSnapshotRequest();
                r.Instrument = "Test";
                r.MaxBars    = 7;
                r.Timeframe  = Timeframe.Hours2;

                v.Validate(r);
            }

            // CustomTimeframeId null.
            {
                var v = new RequestProviderValidator();
                MarketDataSnapshotRequest r = new MarketDataSnapshotRequest();
                r.Instrument        = "Test";
                r.Timeframe         = Timeframe.Custom;
                r.CustomTimeframeId = null;

                AssertEx.Throws <ArgumentNullException>(() =>
                {
                    v.Validate(r);
                });
            }

            // CustomTimeframeId empty.
            {
                var v = new RequestProviderValidator();
                MarketDataSnapshotRequest r = new MarketDataSnapshotRequest();
                r.Instrument        = "Test";
                r.Timeframe         = Timeframe.Custom;
                r.CustomTimeframeId = "";

                AssertEx.Throws <ArgumentNullException>(() =>
                {
                    v.Validate(r);
                });
            }

            // valid with CustomTimeframeId.
            {
                var v = new RequestProviderValidator();
                MarketDataSnapshotRequest r = new MarketDataSnapshotRequest();
                r.Instrument        = "Test";
                r.Timeframe         = Timeframe.Custom;
                r.CustomTimeframeId = "Y1";

                v.Validate(r);
            }
        }