예제 #1
0
            public void ReturnsTrueForARecordFieldArrayProperty()
            {
                var arrayProperty = typeof(TestDBCRecordWithArray).GetProperties()
                                    .First(p => p.Name == nameof(TestDBCRecordWithArray.ArrayField));

                Assert.True(DBCInspector.IsPropertyFieldArray(arrayProperty));
            }
예제 #2
0
            public void ReturnsFalseForMovedFieldButNotInTheSpecifiedVersion()
            {
                var movedProperty = DBCInspector.GetRecordProperties(typeof(TestDBCRecordWithSingleMovedField))
                                    .First(p => p.Name == nameof(TestDBCRecordWithSingleMovedField.FieldC));

                Assert.IsFalse(DBCInspector.HasPropertyMovedInVersion(WarcraftVersion.Classic, movedProperty));
            }
예제 #3
0
            public void ThrowsIfPropertyHasNotMoved()
            {
                var movedPropertyButNotInVersion = DBCInspector.GetRecordProperties(typeof(TestDBCRecordWithSingleMovedFieldMultipleVersions))
                                                   .First(p => p.Name == nameof(TestDBCRecordWithSingleMovedFieldMultipleVersions.FieldC));

                Assert.Throws <ArgumentException>(() => DBCInspector.GetMostRecentPropertyMove(WarcraftVersion.Classic, movedPropertyButNotInVersion));
            }
예제 #4
0
            public void OnAPropertyThatIsNotAForeignKeyThrows()
            {
                var otherProperty = typeof(TestDBCRecord).GetProperties()
                                    .First(p => p.Name == nameof(TestDBCRecord.TestSimpleField));

                Assert.Throws <ArgumentException>(() => DBCInspector.GetForeignKeyInfo(otherProperty));
            }
예제 #5
0
            public void OnAPropertyWithoutTheForeignKeyInfoAttributeThrows()
            {
                var invalidForeignKeyProperty = typeof(TestDBCRecordInvalidForeignKeyField).GetProperties()
                                                .First(p => p.Name == nameof(TestDBCRecordInvalidForeignKeyField.TestForeignKeyFieldMissingInfo));

                Assert.Throws <InvalidDataException>(() => DBCInspector.GetForeignKeyInfo(invalidForeignKeyProperty));
            }
예제 #6
0
            public void ReturnsFalseForNotMovedField()
            {
                var notMovedProperty = DBCInspector.GetRecordProperties(typeof(TestDBCRecordWithSingleMovedField))
                                       .First(p => p.Name == nameof(TestDBCRecordWithSingleMovedField.FieldA));

                Assert.IsFalse(DBCInspector.HasPropertyMovedInVersion(WarcraftVersion.BurningCrusade, notMovedProperty));
            }
예제 #7
0
            public void AssignsCorrectChainsMultiVersion()
            {
                var orderer = new FieldOrderer
                              (
                    WarcraftVersion.Wrath,
                    DBCInspector.GetVersionRelevantProperties(WarcraftVersion.Wrath, typeof(TestDBCRecordWithMultipleMovedFields))
                    .ToList()
                              );

                var propertyA = DBCInspector.GetRecordProperties(typeof(TestDBCRecordWithMultipleMovedFields))
                                .First(p => p.Name == nameof(TestDBCRecordWithMultipleMovedFields.FieldA));

                var propertyC = DBCInspector.GetRecordProperties(typeof(TestDBCRecordWithMultipleMovedFields))
                                .First(p => p.Name == nameof(TestDBCRecordWithMultipleMovedFields.FieldC));

                var propertyD = DBCInspector.GetRecordProperties(typeof(TestDBCRecordWithMultipleMovedFields))
                                .First(p => p.Name == nameof(TestDBCRecordWithMultipleMovedFields.FieldD));

                var propertyE = DBCInspector.GetRecordProperties(typeof(TestDBCRecordWithMultipleMovedFields))
                                .First(p => p.Name == nameof(TestDBCRecordWithMultipleMovedFields.FieldE));

                Assert.That(orderer.PrecedenceChains[propertyA].Select(p => p.Name), Is.EquivalentTo(MultiMoveBCDependencyChainFieldA));
                Assert.That(orderer.PrecedenceChains[propertyC].Select(p => p.Name), Is.EquivalentTo(MultiMoveBCDependencyChainFieldC));
                Assert.That(orderer.PrecedenceChains[propertyD].Select(p => p.Name), Is.EquivalentTo(MultiMoveWrathDependencyChainFieldD));
                Assert.That(orderer.PrecedenceChains[propertyE].Select(p => p.Name), Is.EquivalentTo(MultiMoveBCDependencyChainFieldE));
            }
예제 #8
0
            public void ThrowsForAnUnmarkedProperty()
            {
                var simpleProperty = typeof(TestDBCRecordWithArray).GetProperties()
                                     .First(p => p.Name == nameof(TestDBCRecordWithArray.SimpleField));

                Assert.Throws <ArgumentException>(() => DBCInspector.GetVersionRelevantPropertyFieldArrayAttribute(WarcraftVersion.Classic, simpleProperty));
            }
예제 #9
0
            public void ReturnsFalseForAnUnmarkedProperty()
            {
                var arrayProperty = typeof(TestDBCRecord).GetProperties()
                                    .First(p => p.Name == nameof(TestDBCRecord.TestNotRecordField));

                Assert.False(DBCInspector.IsPropertyFieldArray(arrayProperty));
            }
예제 #10
0
            public void IncludesArrayFields()
            {
                var recordProperties = DBCInspector.GetRecordProperties(typeof(TestDBCRecordWithArray));

                var recordPropertyNames = recordProperties.Select(p => p.Name);

                Assert.That(recordPropertyNames, Is.EquivalentTo(TestRecordWithArrayPropertyNames));
            }
예제 #11
0
            public void IncludesArrayFieldsWhenMultipleVersionsArePresent()
            {
                var recordProperties = DBCInspector.GetVersionRelevantProperties(WarcraftVersion.Classic, typeof(TestDBCRecordWithVersionedArray));

                var recordPropertyNames = recordProperties.Select(p => p.Name);

                Assert.That(recordPropertyNames, Is.EquivalentTo(VersionedArrayRecordNames));
            }
예제 #12
0
            public void GetsAValidPropertySet()
            {
                var recordProperties = DBCInspector.GetRecordProperties(typeof(TestDBCRecord));

                var recordPropertyNames = recordProperties.Select(p => p.Name);

                Assert.That(recordPropertyNames, Is.EquivalentTo(TestRecordPropertyNames));
            }
예제 #13
0
            public void GetsAValidVersionedPropertySetForRemovedProperties()
            {
                var recordProperties = DBCInspector.GetVersionRelevantProperties(WarcraftVersion.Cataclysm, typeof(TestDBCRecord));

                var recordPropertyNames = recordProperties.Select(p => p.Name);

                Assert.That(recordPropertyNames, Is.EquivalentTo(TestRecordCataPropertyNames));
            }
예제 #14
0
            public void ReturnsCorrectSizeOnVersionedRecords()
            {
                long recordSizeClassic = DBCInspector.GetRecordSize(WarcraftVersion.Classic, typeof(TestDBCRecord));
                long recordSizeWrath   = DBCInspector.GetRecordSize(WarcraftVersion.Wrath, typeof(TestDBCRecord));
                long recordSizeCata    = DBCInspector.GetRecordSize(WarcraftVersion.Cataclysm, typeof(TestDBCRecord));

                Assert.AreEqual(16, recordSizeClassic);
                Assert.AreEqual(20, recordSizeWrath);
                Assert.AreEqual(16, recordSizeCata);
            }
예제 #15
0
            public void OnAValidForeignKeyPropertyReturnsValidData()
            {
                var foreignKeyProperty = typeof(TestDBCRecord).GetProperties()
                                         .First(p => p.Name == nameof(TestDBCRecord.TestForeignKeyField));

                var foreignKeyInfo = DBCInspector.GetForeignKeyInfo(foreignKeyProperty);

                Assert.AreEqual(DatabaseName.AnimationData, foreignKeyInfo.Database);
                Assert.AreEqual(nameof(AnimationDataRecord.ID), foreignKeyInfo.Field);
            }
예제 #16
0
            public void ReturnsCorrectCountOnRecordsOnVersionedRecords()
            {
                long propCountClassic = DBCInspector.GetPropertyCount(WarcraftVersion.Classic, typeof(TestDBCRecord));
                long propCountWrath   = DBCInspector.GetPropertyCount(WarcraftVersion.Wrath, typeof(TestDBCRecord));
                long propCountCata    = DBCInspector.GetPropertyCount(WarcraftVersion.Cataclysm, typeof(TestDBCRecord));

                Assert.AreEqual(4, propCountClassic);
                Assert.AreEqual(5, propCountWrath);
                Assert.AreEqual(4, propCountCata);
            }
예제 #17
0
            public void ReturnsCorrectPropertiesForSingleField()
            {
                var recordProperties = DBCInspector.GetRecordProperties(typeof(TestDBCRecordWithSingleMovedField)).ToList();

                var movedPropertiesClassic = DBCInspector.GetMovedProperties(WarcraftVersion.Classic, recordProperties).Select(p => p.Key.Name);
                var movedPropertiesBC      = DBCInspector.GetMovedProperties(WarcraftVersion.BurningCrusade, recordProperties).Select(p => p.Key.Name);

                Assert.That(movedPropertiesClassic, Is.Empty);
                Assert.That(movedPropertiesBC, Is.EquivalentTo(SingleMovedFieldRecordNamesMovingFields));
            }
예제 #18
0
            public void ReturnsCorrectAttributeForSingleVersionMove()
            {
                var movedProperty = DBCInspector.GetRecordProperties(typeof(TestDBCRecordWithSingleMovedField))
                                    .First(p => p.Name == nameof(TestDBCRecordWithSingleMovedField.FieldC));

                var attribute = DBCInspector.GetMostRecentPropertyMove(WarcraftVersion.BurningCrusade, movedProperty);

                Assert.AreEqual(WarcraftVersion.BurningCrusade, attribute.MovedIn);
                Assert.AreEqual(nameof(DBCRecord.ID), attribute.ComesAfter);
            }
예제 #19
0
            public void DoesNotThrowWhenThereAreNoCyclicalDependencies()
            {
                var orderer = new FieldOrderer
                              (
                    WarcraftVersion.BurningCrusade,
                    DBCInspector.GetVersionRelevantProperties(WarcraftVersion.BurningCrusade, typeof(TestDBCRecordWithMultipleMovedFields))
                    .ToList()
                              );

                Assert.DoesNotThrow(() => orderer.ReorderProperties());
            }
예제 #20
0
            public void ThrowsWhenThereAreCyclicalDependencies()
            {
                var orderer = new FieldOrderer
                              (
                    WarcraftVersion.BurningCrusade,
                    DBCInspector.GetVersionRelevantProperties(WarcraftVersion.BurningCrusade, typeof(TestDBCRecordWithInvalidReentrantMovedFields))
                    .ToList()
                              );

                Assert.Throws <InvalidOperationException>(() => orderer.ReorderProperties());
            }
예제 #21
0
            public void ReturnsCorrectOrderForMultiMove()
            {
                var orderer = new FieldOrderer
                              (
                    WarcraftVersion.BurningCrusade,
                    DBCInspector.GetVersionRelevantProperties(WarcraftVersion.BurningCrusade, typeof(TestDBCRecordWithMultipleMovedFields))
                    .ToList()
                              );

                Assert.That(orderer.ReorderProperties().Select(p => p.Name), Is.EquivalentTo(MultiMovedFieldsBCAfterMove));
            }
예제 #22
0
            public void ReturnsAValidAttributeForAMarkedProperty()
            {
                var arrayProperty = typeof(TestDBCRecordWithArray).GetProperties()
                                    .First(p => p.Name == nameof(TestDBCRecordWithArray.ArrayField));

                RecordFieldAttribute attribute = null;

                Assert.DoesNotThrow(() => attribute = DBCInspector.GetVersionRelevantPropertyFieldArrayAttribute(WarcraftVersion.Classic, arrayProperty));

                Assert.AreEqual(WarcraftVersion.Classic, attribute.IntroducedIn);
            }
예제 #23
0
            public void ReturnsTrueForForeignKeyPropertiesAndViceVersa()
            {
                var foreignKeyProperty = typeof(TestDBCRecord).GetProperties()
                                         .First(p => p.Name == nameof(TestDBCRecord.TestForeignKeyField));

                var otherProperty = typeof(TestDBCRecord).GetProperties()
                                    .First(p => p.Name == nameof(TestDBCRecord.TestSimpleField));

                Assert.True(DBCInspector.IsPropertyForeignKey(foreignKeyProperty));
                Assert.False(DBCInspector.IsPropertyForeignKey(otherProperty));
            }
예제 #24
0
            public void AssignsMovingProperties()
            {
                var orderer = new FieldOrderer
                              (
                    WarcraftVersion.BurningCrusade,
                    DBCInspector.GetVersionRelevantProperties(WarcraftVersion.BurningCrusade, typeof(TestDBCRecordWithSingleMovedField))
                    .ToList()
                              );

                var assignedPropertyNames = orderer.MovingProperties.Select(p => p.Key.Name);

                Assert.That(assignedPropertyNames, Is.EquivalentTo(SingleMovedFieldRecordNamesMovingFields));
            }
예제 #25
0
            public void AssignsOriginalProperties()
            {
                var orderer = new FieldOrderer
                              (
                    WarcraftVersion.Classic,
                    DBCInspector.GetVersionRelevantProperties(WarcraftVersion.Classic, typeof(TestDBCRecordWithSingleMovedField))
                    .ToList()
                              );

                var assignedPropertyNames = orderer.OriginalProperties.Select(p => p.Name);

                Assert.That(assignedPropertyNames, Is.EquivalentTo(SingleMovedFieldNamesBeforeMove));
            }
예제 #26
0
            public void ReturnsFalseForNonMoved()
            {
                var orderer = new FieldOrderer
                              (
                    WarcraftVersion.BurningCrusade,
                    DBCInspector.GetVersionRelevantProperties(WarcraftVersion.BurningCrusade, typeof(TestDBCRecordWithInvalidReentrantMovedFields))
                    .ToList()
                              );

                var propertyB = DBCInspector.GetRecordProperties(typeof(TestDBCRecordWithInvalidReentrantMovedFields))
                                .First(p => p.Name == nameof(TestDBCRecordWithInvalidReentrantMovedFields.FieldB));

                Assert.IsFalse(orderer.HasCyclicMoveDependency(propertyB));
            }
예제 #27
0
            public void GetsCorrectChainForMultiVersionMove()
            {
                var orderer = new FieldOrderer
                              (
                    WarcraftVersion.Wrath,
                    DBCInspector.GetVersionRelevantProperties(WarcraftVersion.Wrath, typeof(TestDBCRecordWithMultipleMovedFields))
                    .ToList()
                              );

                var movedProperty = DBCInspector.GetRecordProperties(typeof(TestDBCRecordWithMultipleMovedFields))
                                    .First(p => p.Name == nameof(TestDBCRecordWithMultipleMovedFields.FieldD));

                var moveAttribute = DBCInspector.GetMostRecentPropertyMove(WarcraftVersion.Wrath, movedProperty);

                var chain = orderer.GetPrecendenceChain(moveAttribute, new List <PropertyInfo>()).Select(p => p.Name);

                Assert.That(MultiVersionDependencyChainFieldE, Is.EquivalentTo(chain));
            }
예제 #28
0
            public void GetsCorrectChainForSimpleMove()
            {
                var orderer = new FieldOrderer
                              (
                    WarcraftVersion.BurningCrusade,
                    DBCInspector.GetVersionRelevantProperties(WarcraftVersion.BurningCrusade, typeof(TestDBCRecordWithSingleMovedField))
                    .ToList()
                              );

                var movedProperty = DBCInspector.GetRecordProperties(typeof(TestDBCRecordWithSingleMovedField))
                                    .First(p => p.Name == nameof(TestDBCRecordWithSingleMovedField.FieldC));

                var moveAttribute = DBCInspector.GetMostRecentPropertyMove(WarcraftVersion.BurningCrusade, movedProperty);

                var chain = orderer.GetPrecendenceChain(moveAttribute, new List <PropertyInfo>()).Select(p => p.Name);

                Assert.That(SimpleMoveDependencyChainFieldC, Is.EquivalentTo(chain));
            }
예제 #29
0
            public void ReturnsCorrectAttributeForPropertyWithMultipleAttributes()
            {
                var arrayProperty = typeof(TestDBCRecordWithVersionedArray).GetProperties()
                                    .First(p => p.Name == nameof(TestDBCRecordWithVersionedArray.VersionedArray));

                var classicAttribute =
                    DBCInspector.GetVersionRelevantPropertyFieldArrayAttribute(WarcraftVersion.Classic, arrayProperty);

                var wrathAttribute =
                    DBCInspector.GetVersionRelevantPropertyFieldArrayAttribute(WarcraftVersion.Wrath, arrayProperty);

                var cataAttribute =
                    DBCInspector.GetVersionRelevantPropertyFieldArrayAttribute(WarcraftVersion.Cataclysm, arrayProperty);

                Assert.AreEqual(2, classicAttribute.Count);
                Assert.AreEqual(4, wrathAttribute.Count);
                Assert.AreEqual(6, cataAttribute.Count);
            }
예제 #30
0
            public void ReturnsCorrectOrderForMultiVersionMove()
            {
                var ordererBC = new FieldOrderer
                                (
                    WarcraftVersion.BurningCrusade,
                    DBCInspector.GetVersionRelevantProperties(WarcraftVersion.BurningCrusade, typeof(TestDBCRecordWithSingleMovedFieldMultipleVersions))
                    .ToList()
                                );

                var ordererWrath = new FieldOrderer
                                   (
                    WarcraftVersion.Wrath,
                    DBCInspector.GetVersionRelevantProperties(WarcraftVersion.Wrath, typeof(TestDBCRecordWithSingleMovedFieldMultipleVersions))
                    .ToList()
                                   );

                Assert.That(ordererBC.ReorderProperties().Select(p => p.Name), Is.EquivalentTo(SingleMovedFieldBCAfterMove));
                Assert.That(ordererWrath.ReorderProperties().Select(p => p.Name), Is.EquivalentTo(SingleMovedFieldWrathAfterMove));
            }