예제 #1
0
        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);
        }
예제 #2
0
        /// <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
        }