public void WebSite_BaseStationAircraftList_Applies_AircraftListFilters_When_Supplied()
        {
            foreach(var filterProperty in typeof(AircraftListFilter).GetProperties()) {
                _AircraftListFilter = new AircraftListFilter();
                _AircraftListAddress.Filter = _AircraftListFilter;

                _BaseStationAircraft.Clear();

                if(filterProperty.Name == "DistanceLower" || filterProperty.Name == "DistanceUpper") continue; // <-- we have a separate test for these
                else if(filterProperty.Name == "MustTransmitPosition") TestMustTransmitPositionFilter();
                else if(filterProperty.Name == "PositionWithin") continue; // <-- we have a separate spreadsheet test for these
                else if(filterProperty.Name.EndsWith("Contains")) TestContainsFilter(filterProperty);
                else if(filterProperty.Name.EndsWith("Equals")) TestEqualsFilter(filterProperty);
                else if(filterProperty.Name.EndsWith("Lower")) TestLowerFilter(filterProperty);
                else if(filterProperty.Name.EndsWith("StartsWith")) TestStartsWithFilter(filterProperty);
                else if(filterProperty.Name.EndsWith("Upper")) TestUpperFilter(filterProperty);
                else Assert.Fail("Need to add code to test the {0} filter", filterProperty.Name);
            }
        }
        public void WebSite_BaseStationAircraftList_Filters_Are_Culture_Agnostic()
        {
            var cultureNames = new string[] { 
                "en-GB",
                "en-US",
                "de-DE",
                "fr-FR",
                "nn-NO",
                "el-GR",
                "ru-RU",
                "zh-CHT",
            };

            _AircraftListAddress.BrowserLatitude = _AircraftListAddress.BrowserLongitude = 0;

            var currentCulture = Thread.CurrentThread.CurrentCulture;
            foreach(var cultureName in cultureNames) {
                string filterName = null;

                using(var switcher = new CultureSwitcher(cultureName)) {
                    foreach(var filterProperty in typeof(AircraftListFilter).GetProperties()) {
                        _BaseStationAircraft.Clear();
                        AddBlankAircraft(2);
                        var aircraft0 = _BaseStationAircraft[0];
                        var aircraft1 = _BaseStationAircraft[1];

                        _AircraftListFilter = new AircraftListFilter();
                        _AircraftListAddress.Filter = _AircraftListFilter;

                        filterName = filterProperty.Name;
                        var tailText = filterName.EndsWith("Upper") ? "Upper" :
                                       filterName.EndsWith("Lower") ? "Lower" :
                                       filterName.EndsWith("Within") ? "Within" :
                                       "";
                        if(tailText == "") continue;

                        string aircraftPropertyName = filterName.Substring(0, filterName.Length - tailText.Length);
                        switch(aircraftPropertyName) {
                            case "Altitude":
                                aircraft0.Altitude = -9; aircraft1.Altitude = 9;
                                filterProperty.SetValue(_AircraftListFilter, -5, null);
                                break;
                            case "Distance":
                                aircraft0.Latitude = aircraft0.Longitude = 1; aircraft1.Latitude = aircraft1.Longitude = 2;
                                filterProperty.SetValue(_AircraftListFilter, 200.25, null);
                                break;
                            case "Position":
                                aircraft0.Latitude = aircraft0.Longitude = -9.5f; aircraft1.Latitude = aircraft1.Longitude = 9.5f;
                                _AircraftListFilter.PositionWithin = new Pair<Coordinate>(new Coordinate(5.5f, -15.5f), new Coordinate(-15.5f, 5.5f));
                                break;
                            case "Squawk":
                                aircraft0.Squawk = -9; aircraft1.Squawk = 9;
                                filterProperty.SetValue(_AircraftListFilter, -5, null);
                                break;
                            default:
                                throw new NotImplementedException();
                        }

                        var list = SendJsonRequest<AircraftListJson>(_AircraftListAddress.Address).Aircraft;

                        var expectedAircraftId = tailText == "Upper" || tailText == "Within" ? 0 : 1;

                        Assert.AreEqual(1, list.Count, switcher.CultureName);
                        Assert.AreEqual(expectedAircraftId, list[0].UniqueId, switcher.CultureName);
                    }
                }
            }
        }