public void SignalboxClass_CopyToMethod_ThrowsArgumentNullException_IfParameterIsNull()
        {
            Signalbox testObject = SignalboxHelpers.GetSignalbox();

            testObject.CopyTo(null);

            Assert.Fail();
        }
        public void SignalboxClassCopyMethodReturnsObjectWithCorrectExportDisplayNameProperty()
        {
            Signalbox sourceObject = SignalboxHelpers.GetSignalbox();

            Signalbox testObject = sourceObject.Copy();

            Assert.AreEqual(sourceObject.ExportDisplayName, testObject.ExportDisplayName);
        }
        public void SignalboxExtensionsClass_ToYamlSignalboxModelMethod_ReturnsObjectWithCorrectIdProperty_IfParameterIsNotNull()
        {
            Signalbox testParam = GetTestObject();

            SignalboxModel testOutput = testParam.ToYamlSignalboxModel();

            Assert.AreEqual(testParam.Id, testOutput.Id);
        }
        public void SignalboxClassCopyMethodReturnsDifferentObject()
        {
            Signalbox sourceObject = SignalboxHelpers.GetSignalbox();

            Signalbox testObject = sourceObject.Copy();

            Assert.AreNotSame(sourceObject, testObject);
        }
        public void SignalboxClassCopyMethodReturnsObjectWithCorrectIdProperty()
        {
            Signalbox sourceObject = SignalboxHelpers.GetSignalbox();

            Signalbox testObject = sourceObject.Copy();

            Assert.AreEqual(sourceObject.Id, testObject.Id);
        }
        public void SignalboxExtensionsClass_ToSignalboxModelMethod_ThrowsArgumentNullException_IfParameterIsNull()
        {
            Signalbox testObject = null;

            _ = testObject.ToSignalboxModel();

            Assert.Fail();
        }
        public void SignalboxExtensionsClass_ToYamlSignalboxModelMethod_ReturnsObjectWithCorrectTimetableDisplayNameProperty_IfParameterIsNotNull()
        {
            Signalbox testParam = GetTestObject();

            SignalboxModel testOutput = testParam.ToYamlSignalboxModel();

            Assert.AreEqual(testParam.ExportDisplayName, testOutput.TimetableDisplayName);
        }
        public void SignalboxExtensionsClass_ToYamlSignalboxModelMethod_ThrowsNullReferenceException_IfParameterIsNull()
        {
            Signalbox testParam = null;

            _ = testParam.ToYamlSignalboxModel();

            Assert.Fail();
        }
        public void SignalboxModelExtensionsClass_ToSignalboxMethod_ReturnsObjectWithCorrectEditorDisplayNameProperty_IfParameterIsNotNull()
        {
            SignalboxModel testParam = GetModel();

            Signalbox testOutput = testParam.ToSignalbox();

            Assert.AreEqual(testParam.EditorDisplayName, testOutput.EditorDisplayName);
        }
Exemplo n.º 10
0
        public void SignalboxCollectionClassIndexerWithIntParameterReturnsCorrectObject()
        {
            List <Signalbox>    testData       = SignalboxHelpers.GetSignalboxList(1, 64);
            SignalboxCollection testCollection = new SignalboxCollection(testData);
            int idx = _random.Next(testData.Count);

            Signalbox testObject = testCollection[idx];

            Assert.AreSame(testData[idx], testObject);
        }
        public void SignalboxClassSettingCodePropertyToExistingValueDoesNotRaiseCodeChangedEvent()
        {
            string    code        = _random.NextString(_random.Next(1, 4));
            int       invocations = 0;
            Signalbox testObject  = new Signalbox {
                Code = code
            };

            testObject.CodeChanged += new SignalboxEventHandler((o, e) => { invocations++; });

            testObject.Code = code;

            Assert.AreEqual(0, invocations);
        }
        public void SignalboxClass_CopyToMethod_OverwritesExportDisplayNameProperty()
        {
            Signalbox sourceObject = SignalboxHelpers.GetSignalbox();
            Signalbox testObject;

            do
            {
                testObject = SignalboxHelpers.GetSignalbox();
            } while (!AreSignalboxesCompletelyDifferent(sourceObject, testObject));

            sourceObject.CopyTo(testObject);

            Assert.AreEqual(sourceObject.ExportDisplayName, testObject.ExportDisplayName);
        }
        private void BtnDelete_Click(object sender, EventArgs e)
        {
            if (dataGridView.SelectedCells.Count == 0)
            {
                return;
            }
            Signalbox box = Model.FirstOrDefault(b => b.Id == (dataGridView.SelectedCells[0].OwningRow.Cells[_idColIdx].Value as string));

            if (box == null)
            {
                return;
            }
            Model.Remove(box);
        }
        public void SignalboxClassSettingExportDisplayNamePropertyToExistingVaueDoesNotRaiseExportDisplayNameChangedEvent()
        {
            string    name        = _random.NextString(_random.Next(128));
            int       invocations = 0;
            Signalbox testObject  = new Signalbox {
                ExportDisplayName = name
            };

            testObject.ExportDisplayNameChanged += new SignalboxEventHandler((o, e) => { invocations++; });

            testObject.ExportDisplayName = name;

            Assert.AreEqual(0, invocations);
        }
Exemplo n.º 15
0
        public void SignalboxCollectionClassIndexerWithIntParameterRaisesSignalboxRemoveEventWithCorrectEventArgsIfSetIsCalledWithDifferenObject()
        {
            List <Signalbox>    testData       = SignalboxHelpers.GetSignalboxList(1, 64);
            SignalboxCollection testCollection = new SignalboxCollection(testData);
            Signalbox           testObject     = SignalboxHelpers.GetSignalbox();
            Signalbox           capturedBox    = null;

            testCollection.SignalboxRemove += new Events.SignalboxEventHandler((o, e) => { capturedBox = e.Signalbox; });
            int idx = _random.Next(testData.Count);

            testCollection[idx] = testObject;

            Assert.AreSame(testData[idx], capturedBox);
        }
Exemplo n.º 16
0
        public void SignalboxCollectionClassIndexerWithIntParameterRaisesSignalboxRemoveEventIfSetIsCalledWithDifferentObject()
        {
            List <Signalbox>    testData       = SignalboxHelpers.GetSignalboxList(1, 64);
            SignalboxCollection testCollection = new SignalboxCollection(testData);
            Signalbox           testObject     = SignalboxHelpers.GetSignalbox();
            int invocations = 0;

            testCollection.SignalboxRemove += new Events.SignalboxEventHandler((o, e) => { invocations++; });
            int idx = _random.Next(testData.Count);

            testCollection[idx] = testObject;

            Assert.AreEqual(1, invocations);
        }
        public void SignalboxClass_CopyToMethod_ThrowsArgumentNullExceptionWithCorrectParamNameProperty_IfParameterIsNull()
        {
            Signalbox testObject = SignalboxHelpers.GetSignalbox();

            try
            {
                testObject.CopyTo(null);
                Assert.Fail();
            }
            catch (ArgumentNullException ex)
            {
                Assert.AreEqual("box", ex.ParamName);
            }
        }
        public void SignalboxExtensionsClass_ToSignalboxModelMethod_ThrowsArgumentNullExceptionWithCorrectParamNameProperty_IfParameterIsNull()
        {
            Signalbox testObject = null;

            try
            {
                _ = testObject.ToSignalboxModel();
                Assert.Fail();
            }
            catch (ArgumentNullException ex)
            {
                Assert.AreEqual("box", ex.ParamName);
            }
        }
        /// <summary>
        /// Convert a <see cref="Signalbox"/> instance into a <see cref="SignalboxModel"/> instance.
        /// </summary>
        /// <param name="box">The <see cref="Signalbox"/> to be converted.</param>
        /// <returns>A <see cref="SignalboxModel"/> converted from the parameter.</returns>
        public static SignalboxModel ToSignalboxModel(this Signalbox box)
        {
            if (box is null)
            {
                throw new ArgumentNullException(nameof(box));
            }

            return(new SignalboxModel
            {
                Id = box.Id,
                Code = box.Code,
                EditorDisplayName = box.EditorDisplayName,
                TimetableDisplayName = box.ExportDisplayName,
            });
        }
Exemplo n.º 20
0
        /// <summary>
        /// Convert a <see cref="Signalbox" /> instance to a <see cref="SignalboxModel" /> instance.
        /// </summary>
        /// <param name="box">The object to be converted.</param>
        /// <returns>A <see cref="SignalboxModel" /> instance containing the same data as the parameter in serialisable form.</returns>
        /// <exception cref="NullReferenceException">Thrown if the parameter is <c>null</c>.</exception>
        public static SignalboxModel ToYamlSignalboxModel(this Signalbox box)
        {
            if (box is null)
            {
                throw new NullReferenceException();
            }

            return(new SignalboxModel
            {
                Id = box.Id,
                Code = box.Code,
                EditorDisplayName = box.EditorDisplayName,
                TimetableDisplayName = box.ExportDisplayName,
            });
        }
        private void BtnAdd_Click(object sender, EventArgs e)
        {
            Signalbox newBox = new Signalbox {
                Id = GeneralHelper.GetNewId(Model)
            };

            using (SignalboxEditForm form = new SignalboxEditForm {
                Model = newBox
            })
            {
                if (form.ShowDialog() != DialogResult.OK)
                {
                    return;
                }
                Model.Add(form.Model);
            }
        }
        public void SignalboxClassSettingCodePropertyRaisesCodeChangedEvent()
        {
            string firstCode = _random.NextString(_random.Next(1, 4));
            string secondCode;

            do
            {
                secondCode = _random.NextString(_random.Next(1, 4));
            } while (firstCode == secondCode);
            int       invocations = 0;
            Signalbox testObject  = new Signalbox {
                Code = firstCode
            };

            testObject.CodeChanged += new SignalboxEventHandler((o, e) => { invocations++; });

            testObject.Code = secondCode;

            Assert.AreEqual(1, invocations);
        }
        public void SignalboxClassSettingEditorDisplayNamePropertyRaisesEditorDisplayNameChangedEvent()
        {
            string firstName = _random.NextString(_random.Next(128));
            string secondName;

            do
            {
                secondName = _random.NextString(_random.Next(128));
            } while (firstName == secondName);
            int       invocations = 0;
            Signalbox testObject  = new Signalbox {
                EditorDisplayName = firstName
            };

            testObject.EditorDisplayNameChanged += new SignalboxEventHandler((o, e) => { invocations++; });

            testObject.EditorDisplayName = secondName;

            Assert.AreEqual(1, invocations);
        }
        private void MoveUpDown(int step)
        {
            if (dataGridView.SelectedCells.Count == 0)
            {
                return;
            }
            Signalbox box = Model.FirstOrDefault(b => b.Id == (dataGridView.SelectedCells[0].OwningRow.Cells[_idColIdx].Value as string));
            int       idx = Model.IndexOf(box);

            if (idx < 0 || idx + step >= Model.Count)
            {
                return;
            }
            Signalbox otherBox = Model[idx + step];

            // This is so that neither box ever has to be in the _rowMap at the same time.
            Model[idx + step] = null;

            Model[idx]        = otherBox;
            Model[idx + step] = box;
        }
        public void SignalboxClassSettingExportDisplayNamePropertyRaisesExportDisplayNameChangedEventWithCorrectSenderAndArguments()
        {
            string firstName = _random.NextString(_random.Next(128));
            string secondName;

            do
            {
                secondName = _random.NextString(_random.Next(128));
            } while (firstName == secondName);
            object             lastSender    = null;
            SignalboxEventArgs lastEventArgs = null;
            Signalbox          testObject    = new Signalbox {
                ExportDisplayName = firstName
            };

            testObject.ExportDisplayNameChanged += new SignalboxEventHandler((o, e) => { lastSender = o; lastEventArgs = e; });

            testObject.ExportDisplayName = secondName;

            Assert.AreSame(testObject, lastSender as Signalbox);
            Assert.AreSame(testObject, lastEventArgs.Signalbox);
        }
        public void SignalboxClassSettingCodePropertyRaisesCodeChangedEventWithCorrectArguments()
        {
            string firstCode = _random.NextString(_random.Next(1, 4));
            string secondCode;

            do
            {
                secondCode = _random.NextString(_random.Next(1, 4));
            } while (firstCode == secondCode);
            object             lastSender    = null;
            SignalboxEventArgs lastEventArgs = null;
            Signalbox          testObject    = new Signalbox {
                Code = firstCode
            };

            testObject.CodeChanged += new SignalboxEventHandler((o, e) => { lastSender = o; lastEventArgs = e; });

            testObject.Code = secondCode;

            Assert.AreSame(testObject, lastSender as Signalbox);
            Assert.AreSame(testObject, lastEventArgs.Signalbox);
        }
        private void BtnEdit_Click(object sender, EventArgs e)
        {
            if (dataGridView.SelectedCells.Count == 0)
            {
                return;
            }
            Signalbox box = Model.FirstOrDefault(b => b.Id == (dataGridView.SelectedCells[0].OwningRow.Cells[_idColIdx].Value as string));

            if (box == null)
            {
                return;
            }
            using (SignalboxEditForm form = new SignalboxEditForm {
                Model = box.Copy()
            })
            {
                if (form.ShowDialog() != DialogResult.OK)
                {
                    return;
                }
                form.Model.CopyTo(box);
            }
        }
        /// <summary>
        /// Convert a <see cref="TimetableFileModel" /> instance to a <see cref="TimetableDocument" /> instance.
        /// </summary>
        /// <param name="model">The object to convert.</param>
        /// <returns>A <see cref="TimetableDocument" /> instance containing the same data as the parameter.</returns>
        /// <exception cref="NullReferenceException">Thrown if the parameter is <c>null</c>.</exception>
        public static TimetableDocument ToTimetableDocument(this TimetableFileModel model)
        {
            if (model is null)
            {
                throw new NullReferenceException();
            }

            Dictionary <string, Signalbox> signalboxes = new Dictionary <string, Signalbox>();

            Log.Trace(CultureInfo.CurrentCulture, Resources.LogMessage_TimetableFileModelConversionVersion, model.Version);
            TimetableDocument document = new TimetableDocument
            {
                Version = model.Version,
                Options = model.FileOptions != null?model.FileOptions.ToDocumentOptions() : new DocumentOptions(),
                              ExportOptions                                               = model.ExportOptions != null?model.ExportOptions.ToDocumentExportOptions() : new DocumentExportOptions(),
                                                                         Title            = model.Title ?? string.Empty,
                                                                         Subtitle         = model.Subtitle ?? string.Empty,
                                                                         DateDescription  = model.DateDescription ?? string.Empty,
                                                                         WrittenBy        = model.WrittenBy ?? string.Empty,
                                                                         CheckedBy        = model.CheckedBy ?? string.Empty,
                                                                         TimetableVersion = model.TimetableVersion ?? string.Empty,
                                                                         PublishedDate    = model.PublishedDate ?? string.Empty,
            };

            if (model.Maps != null && model.Maps.Count > 0 && model.Maps[0] != null)
            {
                if (model.Maps[0].LocationList != null)
                {
                    Log.Trace(CultureInfo.CurrentCulture, Resources.LogMessage_LocationCount, model.Maps[0].LocationList.Count);
                    foreach (LocationModel loc in model.Maps[0].LocationList)
                    {
                        document.LocationList.Add(loc.ToLocation());
                    }
                    Log.Trace(CultureInfo.CurrentCulture, Resources.LogMessage_LocationsLoaded, document.LocationList.Count);
                }
                else
                {
                    Log.Trace("No locations to load.");
                }

                if (model.Maps[0].Signalboxes != null)
                {
                    Log.Trace(CultureInfo.CurrentCulture, Resources.LogMessage_SignalboxCount, model.Maps[0].Signalboxes.Count);
                    foreach (SignalboxModel box in model.Maps[0].Signalboxes)
                    {
                        Signalbox b = box.ToSignalbox();
                        document.Signalboxes.Add(b);
                        if (!signalboxes.ContainsKey(b.Id))
                        {
                            signalboxes.Add(b.Id, b);
                        }
                    }
                    Log.Trace(CultureInfo.CurrentCulture, Resources.LogMessage_SignalboxesLoaded, document.Signalboxes.Count);
                }
                else
                {
                    Log.Trace("No signalboxes to load");
                }
            }

            if (model.SignalboxHoursSets != null)
            {
                Log.Trace(CultureInfo.CurrentCulture, Resources.LogMessage_SignalboxHoursSetCount, model.SignalboxHoursSets.Count);
                foreach (SignalboxHoursSetModel set in model.SignalboxHoursSets)
                {
                    document.SignalboxHoursSets.Add(set.ToSignalboxHoursSet(signalboxes, document.SignalboxHoursSets));
                }
                Log.Trace(CultureInfo.CurrentCulture, Resources.LogMessage_SignalboxHoursSetsLoaded, document.SignalboxHoursSets.Count);
            }
            else
            {
                Log.Trace("No signalbox hours sets to load.");
            }

            if (model.NoteDefinitions != null)
            {
                Log.Trace(CultureInfo.CurrentCulture, Resources.LogMessage_NoteDefinitionCount, model.NoteDefinitions.Count);
                foreach (NoteModel note in model.NoteDefinitions)
                {
                    document.NoteDefinitions.Add(note.ToNote());
                }
                Log.Trace(CultureInfo.CurrentCulture, Resources.LogMessage_NoteDefinitionsLoaded, document.NoteDefinitions.Count);
            }
            else
            {
                Log.Trace("No note definitions to load.");
            }

            if (model.TrainClassList != null)
            {
                Log.Trace(CultureInfo.CurrentCulture, Resources.LogMessage_TrainClassCount, model.TrainClassList.Count);
                foreach (TrainClassModel tc in model.TrainClassList)
                {
                    document.TrainClassList.Add(tc.ToTrainClass());
                }
                Log.Trace(CultureInfo.CurrentCulture, Resources.LogMessage_TrainClassesLoaded, document.TrainClassList.Count);
            }
            else
            {
                Log.Trace("No train classes to load.");
            }

            Dictionary <string, Location>   locationMap = document.LocationList.ToDictionary(o => o.Id);
            Dictionary <string, TrainClass> classMap    = document.TrainClassList.ToDictionary(c => c.Id);
            Dictionary <string, Note>       noteMap     = document.NoteDefinitions.ToDictionary(n => n.Id);

            if (model.TrainList != null)
            {
                Log.Trace(CultureInfo.CurrentCulture, Resources.LogMessage_TrainCount, model.TrainList.Count);
                foreach (TrainModel trn in model.TrainList)
                {
                    document.TrainList.Add(trn.ToTrain(locationMap, classMap, noteMap, document.Options));
                }
                Log.Trace(CultureInfo.CurrentCulture, Resources.LogMessage_TrainsLoaded, document.TrainList.Count);
            }
            else
            {
                Log.Trace("No trains to load.");
            }

            return(document);
        }
 private bool AreSignalboxesCompletelyDifferent(Signalbox s1, Signalbox s2)
 {
     return(s1.Id != s2.Id && s1.Code != s2.Code && s1.EditorDisplayName != s2.EditorDisplayName && s1.ExportDisplayName != s2.ExportDisplayName);
 }