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