Exemplo n.º 1
0
        public void Aircraft_Clone_Copies_Every_Property_Correctly()
        {
            Dictionary <string, object> values = new Dictionary <string, object>();

            int      intValue      = 1;
            float    floatValue    = 121.3414F;
            double   doubleValue   = 121.3414;
            long     longValue     = (long)int.MaxValue + 1L;
            DateTime dateTimeValue = new DateTime(2001, 1, 2);
            string   stringValue   = "";

            var allBoolPropertyNames = typeof(IAircraft).GetProperties().Where(r => r.PropertyType == typeof(bool) || r.PropertyType == typeof(bool?)).Select(r => r.Name).ToList();

            foreach (var trueBool in allBoolPropertyNames)
            {
                TestCleanup();
                TestInitialise();
                values.Clear();

                for (int setChangedValues = 0; setChangedValues < 2; ++setChangedValues)
                {
                    // Set the properties of the object to clone using reflection to make sure
                    // we don't forget to update this test in the future...
                    foreach (var property in typeof(IAircraft).GetProperties())
                    {
                        if (property.Name == "DataVersion")
                        {
                            continue;
                        }
                        bool isChangedValue = property.Name.EndsWith("Changed");
                        if (setChangedValues == 0 && isChangedValue)
                        {
                            continue;
                        }
                        if (setChangedValues == 1 && !isChangedValue)
                        {
                            continue;
                        }

                        ++intValue;
                        ++floatValue;
                        ++longValue;
                        dateTimeValue = dateTimeValue.AddDays(1);
                        ++_Aircraft.DataVersion;
                        stringValue = String.Format("A{0}", intValue);

                        if (!values.ContainsKey("DataVersion"))
                        {
                            values.Add("DataVersion", _Aircraft.DataVersion);
                        }
                        else
                        {
                            values["DataVersion"] = _Aircraft.DataVersion;
                        }

                        object value = null;
                        switch (property.Name)
                        {
                        case "UniqueId":                        value = _Aircraft.UniqueId = intValue; break;

                        case "Icao24":                          value = _Aircraft.Icao24 = stringValue; break;

                        case "Icao24Changed":                   value = _Aircraft.Icao24Changed; break;

                        case "Icao24Invalid":                   value = _Aircraft.Icao24Invalid = property.Name == trueBool; break;

                        case "Icao24InvalidChanged":            value = _Aircraft.Icao24InvalidChanged; break;

                        case "Callsign":                        value = _Aircraft.Callsign = stringValue; break;

                        case "CallsignChanged":                 value = _Aircraft.CallsignChanged; break;

                        case "CallsignIsSuspect":               value = _Aircraft.CallsignIsSuspect = property.Name == trueBool; break;

                        case "CallsignIsSuspectChanged":        value = _Aircraft.CallsignIsSuspectChanged; break;

                        case "CountMessagesReceived":           value = _Aircraft.CountMessagesReceived = longValue; break;

                        case "CountMessagesReceivedChanged":    value = _Aircraft.CountMessagesReceivedChanged; break;

                        case "Altitude":                        value = _Aircraft.Altitude = intValue; break;

                        case "AltitudeChanged":                 value = _Aircraft.AltitudeChanged; break;

                        case "GroundSpeed":                     value = _Aircraft.GroundSpeed = intValue; break;

                        case "GroundSpeedChanged":              value = _Aircraft.GroundSpeedChanged; break;

                        case "Latitude":                        value = _Aircraft.Latitude = doubleValue; break;

                        case "LatitudeChanged":                 value = _Aircraft.LatitudeChanged; break;

                        case "Longitude":                       value = _Aircraft.Longitude = doubleValue; break;

                        case "LongitudeChanged":                value = _Aircraft.LongitudeChanged; break;

                        case "PositionTime":                    value = _Aircraft.PositionTime = dateTimeValue; break;

                        case "PositionTimeChanged":             value = _Aircraft.PositionTimeChanged; break;

                        case "Track":                           value = _Aircraft.Track = floatValue; break;

                        case "TrackChanged":                    value = _Aircraft.TrackChanged; break;

                        case "IsTransmittingTrack":             value = _Aircraft.IsTransmittingTrack = property.Name == trueBool; break;

                        case "VerticalRate":                    value = _Aircraft.VerticalRate = intValue; break;

                        case "VerticalRateChanged":             value = _Aircraft.VerticalRateChanged; break;

                        case "Squawk":                          value = _Aircraft.Squawk = intValue; break;

                        case "SquawkChanged":                   value = _Aircraft.SquawkChanged; break;

                        case "Emergency":                       value = _Aircraft.Emergency = property.Name == trueBool; break;

                        case "EmergencyChanged":                value = _Aircraft.EmergencyChanged; break;

                        case "Registration":                    value = _Aircraft.Registration = stringValue; break;

                        case "RegistrationChanged":             value = _Aircraft.RegistrationChanged; break;

                        case "FirstSeen":                       value = _Aircraft.FirstSeen = dateTimeValue; break;

                        case "FirstSeenChanged":                value = _Aircraft.FirstSeenChanged; break;

                        case "FlightsCount":                    value = _Aircraft.FlightsCount = intValue; break;

                        case "FlightsCountChanged":             value = _Aircraft.FlightsCountChanged; break;

                        case "LastUpdate":                      value = _Aircraft.LastUpdate = dateTimeValue; break;

                        case "Type":                            value = _Aircraft.Type = stringValue; break;

                        case "TypeChanged":                     value = _Aircraft.TypeChanged; break;

                        case "Manufacturer":                    value = _Aircraft.Manufacturer = stringValue; break;

                        case "ManufacturerChanged":             value = _Aircraft.ManufacturerChanged; break;

                        case "Model":                           value = _Aircraft.Model = stringValue; break;

                        case "ModelChanged":                    value = _Aircraft.ModelChanged; break;

                        case "ConstructionNumber":              value = _Aircraft.ConstructionNumber = stringValue; break;

                        case "ConstructionNumberChanged":       value = _Aircraft.ConstructionNumberChanged; break;

                        case "Origin":                          value = _Aircraft.Origin = stringValue; break;

                        case "OriginChanged":                   value = _Aircraft.OriginChanged; break;

                        case "Destination":                     value = _Aircraft.Destination = stringValue; break;

                        case "DestinationChanged":              value = _Aircraft.DestinationChanged; break;

                        case "Stopovers":                       value = stringValue; _Aircraft.Stopovers.Add(stringValue); break;

                        case "StopoversChanged":                value = _Aircraft.StopoversChanged = longValue; break;

                        case "Operator":                        value = _Aircraft.Operator = stringValue; break;

                        case "OperatorChanged":                 value = _Aircraft.OperatorChanged; break;

                        case "OperatorIcao":                    value = _Aircraft.OperatorIcao = stringValue; break;

                        case "OperatorIcaoChanged":             value = _Aircraft.OperatorIcaoChanged; break;

                        case "WakeTurbulenceCategory":          value = _Aircraft.WakeTurbulenceCategory = WakeTurbulenceCategory.Light; break;

                        case "WakeTurbulenceCategoryChanged":   value = _Aircraft.WakeTurbulenceCategoryChanged; break;

                        case "EngineType":                      value = _Aircraft.EngineType = EngineType.Electric; break;

                        case "EngineTypeChanged":               value = _Aircraft.EngineTypeChanged; break;

                        case "NumberOfEngines":                 value = _Aircraft.NumberOfEngines = stringValue; break;

                        case "NumberOfEnginesChanged":          value = _Aircraft.NumberOfEnginesChanged; break;

                        case "Species":                         value = _Aircraft.Species = Species.Gyrocopter; break;

                        case "SpeciesChanged":                  value = _Aircraft.SpeciesChanged; break;

                        case "IsMilitary":                      value = _Aircraft.IsMilitary = property.Name == trueBool; break;

                        case "IsMilitaryChanged":               value = _Aircraft.IsMilitaryChanged; break;

                        case "Icao24Country":                   value = _Aircraft.Icao24Country = stringValue; break;

                        case "Icao24CountryChanged":            value = _Aircraft.Icao24CountryChanged; break;

                        case "PictureFileName":                 value = _Aircraft.PictureFileName = stringValue; break;

                        case "PictureFileNameChanged":          value = _Aircraft.PictureFileNameChanged; break;

                        case "FirstCoordinateChanged":          value = _Aircraft.FirstCoordinateChanged = longValue; break;

                        case "LastCoordinateChanged":           value = _Aircraft.LastCoordinateChanged = longValue; break;

                        case "LatestCoordinateTime":            value = _Aircraft.LatestCoordinateTime = dateTimeValue; break;

                        case "FullCoordinates":                 _Aircraft.FullCoordinates.Add(new Coordinate(1, 2, 3F, 4F, 5F)); value = _Aircraft.FullCoordinates[0]; break;

                        case "ShortCoordinates":                _Aircraft.ShortCoordinates.Add(new Coordinate(11, 12, 13F, 14F, 15F)); value = _Aircraft.ShortCoordinates[0]; break;

                        case "IcaoCompliantRegistration":       value = _Aircraft.Registration; break;

                        case "IsInteresting":                   value = _Aircraft.IsInteresting = property.Name == trueBool; break;

                        case "IsInterestingChanged":            value = _Aircraft.IsInterestingChanged; break;

                        case "OnGround":                        value = _Aircraft.OnGround = property.Name == trueBool; break;

                        case "OnGroundChanged":                 value = _Aircraft.OnGroundChanged; break;

                        case "SpeedType":                       value = _Aircraft.SpeedType = SpeedType.TrueAirSpeed; break;

                        case "SpeedTypeChanged":                value = _Aircraft.SpeedTypeChanged; break;

                        case "UserTag":                         value = _Aircraft.UserTag = stringValue; break;

                        case "UserTagChanged":                  value = _Aircraft.UserTagChanged; break;

                        default:                                throw new NotImplementedException();
                        }

                        Assert.IsNotNull(value, property.Name);
                        values.Add(property.Name, value);
                    }
                }

                var clone = (IAircraft)_Aircraft.Clone();

                foreach (var property in typeof(IAircraft).GetProperties())
                {
                    var expected = values[property.Name];
                    switch (property.Name)
                    {
                    case "Stopovers":           Assert.AreEqual(expected, clone.Stopovers.First(), property.Name); break;

                    case "FullCoordinates":     Assert.AreEqual(expected, clone.FullCoordinates[0], property.Name); break;

                    case "ShortCoordinates":    Assert.AreEqual(expected, clone.ShortCoordinates[0], property.Name); break;

                    default:
                        var actual = property.GetValue(clone, null);
                        Assert.AreEqual(expected, actual, property.Name); break;
                    }
                }
            }
        }