Esempio n. 1
0
        public void AlternateRom_ChangeAlternateCfgPath_RefreshCfgCrcChangesCrc()
        {
            IReadOnlyList <string> paths;
            var storageAccess    = AlternateRomTestStorageAccess.Initialize(out paths, TestRomResources.TestBinPath, TestRomResources.TestCfgPath);
            var alternateBinPath = paths[0];
            var alternateCfgPath = paths[1];
            var alternate        = new AlternateRom(alternateBinPath, alternateCfgPath, null);

            Assert.NotNull(alternate);
            Assert.True(alternate.IsValid);
            Assert.Equal(TestRomResources.TestCfgCrc, alternate.CfgCrc);

            using (var cfgStream = storageAccess.Open(alternateCfgPath))
            {
                cfgStream.Seek(0, System.IO.SeekOrigin.End);
                var cfgToAppend =
                    @"
[vars]
name = ""Weener Weener Cheekeen Deeener""
";
                var cfgDataToAppend = System.Text.Encoding.UTF8.GetBytes(cfgToAppend);
                cfgStream.Write(cfgDataToAppend, 0, cfgDataToAppend.Length);
                cfgStream.Seek(0, System.IO.SeekOrigin.Begin);
            }
            var cfgCrcChanged = false;
            var cfgCrc        = alternate.RefreshCfgCrc(out cfgCrcChanged);

            Assert.True(cfgCrcChanged);
            Assert.NotEqual(TestRomResources.TestCfgCrc, cfgCrc);
            Assert.Equal(cfgCrc, alternate.CfgCrc);
            Assert.Equal(cfgCrc, alternate.Alternate.CfgCrc);
            Assert.Equal("Weener Weener Cheekeen Deeener", alternate.GetBinFileMetadata().LongNames.First());
        }
Esempio n. 2
0
        public void AlternateRom_ChangeAlternateRom_RefreshCrcChangesCrc()
        {
            IReadOnlyList <string> paths;
            var storageAccess    = AlternateRomTestStorageAccess.Initialize(out paths, TestRomResources.TestBinPath, TestRomResources.TestCfgPath, TestRomResources.TestBinPath);
            var rom              = Rom.Create(paths[0], paths[1]);
            var alternateBinPath = paths[2];
            var alternate        = new AlternateRom(alternateBinPath, null, rom);

            Assert.NotNull(alternate);
            Assert.True(alternate.IsValid);
            Assert.Equal(0u, alternate.CfgCrc);
            Assert.Equal(TestRomResources.TestBinCrc, alternate.Crc);

            using (var binStream = storageAccess.Open(alternateBinPath))
            {
                binStream.Seek(0, System.IO.SeekOrigin.End);
                var dataToAppend = Enumerable.Repeat((byte)0xFF, 128).ToArray();
                binStream.Write(dataToAppend, 0, 128);
                binStream.Seek(0, System.IO.SeekOrigin.Begin);
            }
            var crcChanged = false;
            var crc        = alternate.RefreshCrc(out crcChanged);

            Assert.True(crcChanged);
            Assert.Equal(crc, alternate.Crc);
            Assert.NotEqual(TestRomResources.TestBinCrc, crc);
            Assert.Equal(alternate.Crc, alternate.Alternate.Crc);
            Assert.NotEqual(alternate.Original.Crc, alternate.Crc);
            Assert.NotEqual(alternate.Original.Crc, alternate.Alternate.Crc);
        }
        /// <summary>
        /// Gets the ROM to use from a <see cref="ProgramDescription"/> for deployment to a device, e.g. Intellicart, CC3, LTO Flash!, emulator, et. al.
        /// </summary>
        /// <param name="programDescription">A <see cref="ProgramDescription"/> that wraps a specific <see cref="IRom"/>.</param>
        /// <returns>The specific <see cref="IRom"/> to use for deployment.</returns>
        /// <remarks>A specific <see cref="IRom"/> may refer to a file that is not presently accessible, e.g. a ROM on a CD-ROM drive, network volume, or other
        /// non-fixed-disk location. In such a case, if the <paramref name="programDescription"/> supplies alternative location(s), the first suitable alternative
        /// location that can be accessed will be used to return a viable <see cref="IRom"/> that, hopefully, is the equivalent of the original.</remarks>
        public static IRom GetRom(this ProgramDescription programDescription)
        {
            var rom     = programDescription.Rom;
            var usesCfg = !string.IsNullOrEmpty(rom.ConfigPath);

            if (!StreamUtilities.FileExists(rom.RomPath) || (usesCfg && !StreamUtilities.FileExists(rom.ConfigPath)))
            {
                var alternateRomPaths = programDescription.Files.AlternateRomImagePaths.ToList();
                var alternateCfgPaths = programDescription.Files.AlternateRomConfigurationFilePaths.ToList();

                if (usesCfg && (alternateRomPaths.Count != alternateCfgPaths.Count))
                {
                    throw new InvalidOperationException(Resources.Strings.ProgramDescription_MissingAlternateCfgFile);
                }

                var    foundAlternate = false;
                string romPath        = null;
                string cfgPath        = null;
                for (var i = 0; (i < alternateRomPaths.Count) && !foundAlternate; ++i)
                {
                    if (StreamUtilities.FileExists(alternateRomPaths[i]))
                    {
                        romPath = alternateRomPaths[i];
                        if (usesCfg)
                        {
                            if (StreamUtilities.FileExists(alternateCfgPaths[i]))
                            {
                                // This code assumes (but cannot check -- silly PCL has no Path API) that the .cfg and ROM are in the same directory for the same index.
                                cfgPath        = alternateCfgPaths[i];
                                foundAlternate = true;
                            }
                        }
                        else
                        {
                            foundAlternate = true;
                        }
                    }
                }
                if (foundAlternate)
                {
                    rom = new AlternateRom(romPath, cfgPath, rom);
                }
            }
            return(rom);
        }
Esempio n. 4
0
        public void AlternateRom_CreateWithNullOriginalRom_AlternateIsValid()
        {
            var paths = AlternateRomTestStorageAccess.Initialize(TestRomResources.TestBinPath, TestRomResources.TestCfgPath);

            var alternateBinPath = paths[0]; // "/Resources/TestWithNullOriginalROM/tagalong.bin";
            var alternateCfgPath = paths[1]; // "/Resources/TestWithNullOriginalROM/tagalong.cfg";
            var alternate        = new AlternateRom(alternateBinPath, alternateCfgPath, null);

            Assert.NotNull(alternate);
            Assert.True(alternate.IsValid);
            Assert.Null(alternate.Original);
            Assert.NotNull(alternate.Alternate);
            Assert.Equal(alternateBinPath, alternate.RomPath);
            Assert.Equal(alternateCfgPath, alternate.ConfigPath);
            Assert.Equal(TestRomResources.TestBinCrc, alternate.Crc);
            Assert.Equal(TestRomResources.TestCfgCrc, alternate.CfgCrc);
            Assert.True(alternate.Validate());
        }
Esempio n. 5
0
        public void AlternateRom_CreateWithNullAlternateCfgPath_CreatesAlternateWithNullCfgPath()
        {
            var paths = AlternateRomTestStorageAccess.Initialize(TestRomResources.TestBinPath, TestRomResources.TestCfgPath, TestRomResources.TestBinPath);

            var rom = Rom.Create(paths[0], paths[1]);

            Assert.NotNull(rom);
            var alternateBinPath = paths[2];
            var alternate        = new AlternateRom(alternateBinPath, null, rom);

            Assert.NotNull(alternate);
            Assert.True(alternate.IsValid);
            Assert.NotNull(alternate.Original);
            Assert.NotNull(alternate.Alternate);
            Assert.NotEqual(rom.RomPath, alternate.RomPath);
            Assert.NotEqual(rom.ConfigPath, alternate.ConfigPath);
            Assert.Null(alternate.ConfigPath);
            Assert.Equal(rom.Format, alternate.Format);
            Assert.Equal(rom.Crc, alternate.Crc);
            Assert.Equal(rom.Crc, alternate.Crc);
            Assert.NotEqual(rom.CfgCrc, alternate.CfgCrc);
            Assert.Equal(0u, alternate.CfgCrc);
            Assert.True(alternate.Validate());
        }