public void ProgramDescription_Copy_ProducesEquivalentCopy() { var information = new TestProgramInformation(); var crc = 5u; var name = "AgletMaster 5905"; information.AddCrc(crc, name); var description0 = new ProgramDescription(crc, null, information); description0.ShortName = "A\aa"; description0.Vendor = "V\vv"; var description1 = description0.Copy(); Assert.Equal(description0.Name, description1.Name); Assert.Equal(description0.ShortName, description1.ShortName); Assert.Equal(description0.Vendor, description1.Vendor); Assert.Equal(description0.Year, description1.Year); Assert.Equal(description0.Features, description1.Features); Assert.False(object.ReferenceEquals(description0.XmlName, description1.XmlName)); Assert.Equal(description0.XmlName.XmlText, description1.XmlName.XmlText); Assert.Equal(description0.XmlName.Escaped, description1.XmlName.Escaped); Assert.False(object.ReferenceEquals(description0.XmlShortName, description1.XmlShortName)); Assert.Equal(description0.XmlShortName.XmlText, description1.XmlShortName.XmlText); Assert.Equal(description0.XmlShortName.Escaped, description1.XmlShortName.Escaped); Assert.Equal(description0.Vendor, description1.Vendor); Assert.False(object.ReferenceEquals(description0.XmlVendor, description1.XmlVendor)); Assert.Equal(description0.XmlVendor.XmlText, description1.XmlVendor.XmlText); Assert.Equal(description0.XmlVendor.Escaped, description1.XmlVendor.Escaped); Assert.True(object.ReferenceEquals(description0.Rom, description1.Rom)); VerifyProgramInformation(description0.ProgramInformation, description1.ProgramInformation); VerifyProgramSupportFiles(description0.Files, description1.Files); Assert.Equal(description0, description1); }
/// <summary> /// Initializes a new instance of the Program class. /// </summary> /// <param name="description">The program which is represented as a file.</param> /// <param name="fileSystem">The file system to which the program entry belongs.</param> public Program(ProgramDescription description, FileSystem fileSystem) : base(fileSystem) { var newDescription = description.Copy(); fileSystem.Files.Add(this); var updatedCrc = OnProgramDescriptionChanged(_description, newDescription, false); _description = newDescription; if (!updatedCrc) { UpdateCrc(); } _description.Files.DefaultLtoFlashDataPath = _description.Rom.GetLtoFlashFilePath(); // The following block causes at least two extra calls to IRomHelpers.PrepareForDeployment. // It's not clear exactly what the benefit of this is based on simple code inspection. #if false // Force updates for support files. var forceSupportFilesUpdates = new[] { ProgramSupportFiles.DefaultLtoFlashDataPathPropertyName, ProgramSupportFiles.RomConfigurationFilePathPropertyName, ProgramSupportFiles.DefaultManualTextPathPropertyName, ProgramSupportFiles.DefaultSaveDataPathPropertyName }; foreach (var supportFile in forceSupportFilesUpdates) { HandleProgramSupportFilesPropertyChanged(_description.Files, new System.ComponentModel.PropertyChangedEventArgs(supportFile)); } #endif // false }