Exemple #1
0
            public void SetsCorrectValuesForRemovedFields()
            {
                var testVersion = WarcraftVersion.Cataclysm;

                var record = new TestDBCRecord();

                record.Version = testVersion;

                using (var ms = new MemoryStream(SimpleCataBytes))
                {
                    using var br = new BinaryReader(ms);
                    DBCDeserializer.DeserializeRecord(br, record, testVersion);
                }

                Assert.AreEqual(1, record.ID);
                Assert.AreEqual(2, record.TestSimpleField);
                Assert.AreEqual(8, record.TestForeignKeyField.Key);
                Assert.AreEqual(16, record.TestNewFieldInWrath.Offset);
            }
Exemple #2
0
            public void SetsCorrectValuesForSimpleRecord()
            {
                var testVersion = WarcraftVersion.Classic;

                var record = new TestDBCRecord();

                record.Version = testVersion;

                using (var ms = new MemoryStream(SimpleClassicBytes))
                {
                    using var br = new BinaryReader(ms);
                    DBCDeserializer.DeserializeRecord(br, record, testVersion);
                }

                Assert.AreEqual(1, record.ID);
                Assert.AreEqual(2, record.TestSimpleField);
                Assert.AreEqual(4, record.TestAddedAndRemovedField);
                Assert.AreEqual(8, record.TestForeignKeyField.Key);
            }
Exemple #3
0
            public void SetsCorrectValuesForComplexMovedFieldsSingleVersion()
            {
                var testVersion = WarcraftVersion.BurningCrusade;

                var record = new TestDBCRecordWithMultipleMovedFields();

                record.Version = testVersion;

                using (var ms = new MemoryStream(MultiMoveBCBytes))
                {
                    using var br = new BinaryReader(ms);
                    DBCDeserializer.DeserializeRecord(br, record, testVersion);
                }

                Assert.AreEqual(1, record.ID);
                Assert.AreEqual(2, record.FieldA);
                Assert.AreEqual(4, record.FieldB);
                Assert.AreEqual(8, record.FieldC);
                Assert.AreEqual(16, record.FieldD);
                Assert.AreEqual(32, record.FieldE);
            }
Exemple #4
0
        /// <summary>
        /// Reads a DBC record from the stream.
        /// </summary>
        /// <param name="reader">The current <see cref="BinaryReader"/>.</param>
        /// <param name="fieldCount">The number of expected fields.</param>
        /// <param name="recordSize">The expected record size.</param>
        /// <param name="version">The version to load.</param>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        /// <exception cref="ArgumentException"></exception>
        public static T ReadRecord <T>(this BinaryReader reader, int fieldCount, int recordSize, WarcraftVersion version = WarcraftVersion.Classic)
            where T : IDBCRecord, new()
        {
            T record = Activator.CreateInstance <T>();

            record.Version = version;

            var reflectionInfo = RecordInformationCache.Instance.GetRecordInformation(typeof(T), version);

            // Make sure the provided record type is valid for this database file
            if (reflectionInfo.FieldCount != fieldCount)
            {
                throw new ArgumentException($"The provided record type is not valid for this database file. Type: {typeof(T).Name}, Version: {version}. Invalid field count: DBC expected {fieldCount}, actual {reflectionInfo.FieldCount}");
            }

            if (reflectionInfo.Size != recordSize)
            {
                throw new ArgumentException($"The provided record type is not valid for this database file. Type: {typeof(T).Name}, Version: {version}. Invalid record size: DBC expected {recordSize}, actual {reflectionInfo.Size}");
            }

            DBCDeserializer.DeserializeRecord(reader, record, version);

            return(record);
        }
            public void ReturnsCorrectTypeForIListOfLocalizedStringReferenceSpecialType()
            {
                var complexType = typeof(IList <LocalizedStringReference>);

                Assert.AreEqual(typeof(uint), DBCDeserializer.GetUnderlyingStoredPrimitiveType(complexType));
            }
            public void ReturnsCorrectTypeForArrayOfStringReferenceSpecialType()
            {
                var complexType = typeof(StringReference[]);

                Assert.AreEqual(typeof(uint), DBCDeserializer.GetUnderlyingStoredPrimitiveType(complexType));
            }
            public void ReturnsCorrectTypeForIListOfGenericType()
            {
                var complexType = typeof(IList <ForeignKey <uint> >);

                Assert.AreEqual(typeof(uint), DBCDeserializer.GetUnderlyingStoredPrimitiveType(complexType));
            }
            public void ReturnsCorrectTypeForPrimitiveArrays()
            {
                var complexType = typeof(uint[]);

                Assert.AreEqual(typeof(uint), DBCDeserializer.GetUnderlyingStoredPrimitiveType(complexType));
            }