예제 #1
0
        private void Check(bool shuffle)
        {
            var otherModel = TypeModel.Create();

            using (var ms = new MemoryStream())
            {
                _model.Serialize(ms, _model.ExportTypeRelations());
                ms.Position = 0;
                var rel = _model.Deserialize <ModelTypeRelationsData>(ms);
                if (shuffle) // types order should not matter (only subtypes)
                {
                    rel.Types = rel.Types.OrderBy(x => _rnd.Next(0, rel.Types.Length + 1)).ToArray();
                }
                otherModel.ImportTypeRelations(rel, true);
            }
            var newTypes     = otherModel.Types.Except(_model.Types).ToArray();
            var removedTypes = _model.Types.Except(otherModel.Types).ToArray();

            Assert.AreEqual(0, newTypes.Length);
            Assert.AreEqual(0, removedTypes.Length);
            if (!shuffle)
            {
                var inequal = otherModel.Types.Where((t, i) => t != _model.Types[i]).ToArray();
                Assert.AreEqual(0, inequal.Length);
            }

            MetaType[] modelMetaTypes = _model.MetaTypes;
            for (int i = 0; i < modelMetaTypes.Length; i++)
            {
                Type      type          = modelMetaTypes[i].Type;
                SubType[] otherSubTypes = otherModel.FindWithoutAdd(type).GetSubtypes();
                SubType[] modelSubTypes = modelMetaTypes[i].GetSubtypes();

                Assert.AreEqual(modelSubTypes.Length, otherSubTypes.Length, "Subtypes of " + type.FullName);

                for (int j = 0; j < otherSubTypes.Length; j++)
                {
                    Assert.AreEqual(otherSubTypes[j].DerivedType.Type, modelSubTypes[j].DerivedType.Type);
                    Assert.AreEqual(otherSubTypes[j].FieldNumber, modelSubTypes[j].FieldNumber);
                }
            }
        }