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); }
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); }
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); }
/// <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)); }