public virtual void DeserializeAllMetadataAndCacheIt(Stream byteStream)
        {
            long initialStreamPostion = byteStream.Position;
            uint metadataByteCount = byteStream.DeserializeUint32();
            long metadataLastBytePosition = metadataByteCount + sizeof (uint) + initialStreamPostion;
            while (byteStream.Position < metadataLastBytePosition)
            {
                MetadataTypes metadataType = byteStream.DeserializeMetadataType();
                MetadataBase result = null;
                switch (metadataType)
                {
                    case MetadataTypes.AssemblyMetadata:
                        var assemblyMetadata = new AssemblyMetadata(byteStream);
                        _assemblyCache.Add(assemblyMetadata);
                        result = assemblyMetadata;
                        break;
                    case MetadataTypes.ModuleMedatada:
                        var moduleMetadata = new ModuleMetadata(byteStream, _assemblyCache);
                        _moduleCache.Add(moduleMetadata);
                        result = moduleMetadata;
                        break;
                    case MetadataTypes.ClassMedatada:
                        var classMetadata = new ClassMetadata(byteStream, _moduleCache);
                        _classCache.Add(classMetadata);
                        result = classMetadata;
                        break;
                    case MetadataTypes.MethodMedatada:
                        var methodMetadata = new MethodMetadata(byteStream, _classCache, _sourceLocatorFactory);
                        _methodCache.Add(methodMetadata);
                        result = methodMetadata;
                        break;
                    default:
                        throw new ArgumentOutOfRangeException();
                }

                Contract.Assume(result != null);
                Contract.Assume(result.Id != 0);
                Contract.Assume(result.MdToken != 0);
                Contract.Assume(metadataType == result.MetadataType);
            }
        }
Exemplo n.º 2
0
        public void SetUp()
        {
            var mockAssemblyCache = new Mock<MetadataCache<AssemblyMetadata>>(MockBehavior.Strict);
            mockAssemblyCache.Setup(cache => cache[It.IsAny<uint>()]).Returns(() => null);
            _moduleMetadata = new ModuleMetadata(_moduleBytes.ConvertToMemoryStream(), mockAssemblyCache.Object);

            _mockModuleCache = new Mock<MetadataCache<ModuleMetadata>>(MockBehavior.Strict);
            _mockModuleCache.Setup(cache => cache[It.IsAny<uint>()]).Returns(() => _moduleMetadata).Verifiable();

            _classMetadata = new ClassMetadata(_classBytes.ConvertToMemoryStream(), _mockModuleCache.Object);

            _mockModuleCache.Verify();
        }