Exemplo n.º 1
0
        public void VerifyLocalSignature(
            string qualifiedMethodName,
            string expectedSignature,
            [CallerLineNumber] int callerLine  = 0,
            [CallerFilePath] string callerPath = null)
        {
            var    ilBuilder       = _testData.GetMethodData(qualifiedMethodName).ILBuilder;
            string actualSignature = ILBuilderVisualizer.LocalSignatureToString(ilBuilder);

            AssertEx.AssertEqualToleratingWhitespaceDifferences(expectedSignature, actualSignature, escapeQuotes: true, expectedValueSourcePath: callerPath, expectedValueSourceLine: callerLine);
        }
Exemplo n.º 2
0
            private string VisualizeIL(CompilationTestData.MethodData methodData, bool realIL, bool useRefEmitter)
            {
                if (!realIL)
                {
                    return(ILBuilderVisualizer.ILBuilderToString(methodData.ILBuilder));
                }

                var module = this.GetModuleSymbolForEmittedImage();

                return(module != null?test.VisualizeRealIL(module, methodData) : null);
            }
Exemplo n.º 3
0
        internal string VisualizeIL(CompilationTestData.MethodData methodData, bool realIL, string sequencePoints = null, string source = null)
        {
            Dictionary <int, string> markers = null;

            if (sequencePoints != null)
            {
                if (EmittedAssemblyPdb == null)
                {
                    throw new InvalidOperationException($"{nameof(EmittedAssemblyPdb)} is not set");
                }

                if (EmittedAssemblyData == null)
                {
                    throw new InvalidOperationException($"{nameof(EmittedAssemblyData)} is not set");
                }

                var actualPdbXml = PdbToXmlConverter.ToXml(
                    pdbStream: new MemoryStream(EmittedAssemblyPdb.ToArray()),
                    peStream: new MemoryStream(EmittedAssemblyData.ToArray()),
                    options: PdbToXmlOptions.ResolveTokens |
                    PdbToXmlOptions.ThrowOnError |
                    PdbToXmlOptions.ExcludeDocuments |
                    PdbToXmlOptions.ExcludeCustomDebugInformation |
                    PdbToXmlOptions.ExcludeScopes,
                    methodName: sequencePoints);

                markers = ILValidation.GetSequencePointMarkers(actualPdbXml, source);
            }

            if (!realIL)
            {
                return(ILBuilderVisualizer.ILBuilderToString(methodData.ILBuilder, markers: markers));
            }

            if (_lazyModuleSymbol == null)
            {
                var targetReference = LoadTestEmittedExecutableForSymbolValidation(EmittedAssemblyData, _compilation.Options.OutputKind, display: _compilation.AssemblyName);
                _lazyModuleSymbol = GetSymbolFromMetadata(targetReference, MetadataImportOptions.All);
            }

            if (_lazyModuleSymbol != null)
            {
                if (_visualizeRealIL == null)
                {
                    throw new InvalidOperationException("IL visualization function is not set");
                }


                return(_visualizeRealIL(_lazyModuleSymbol, methodData, markers));
            }

            return(null);
        }
Exemplo n.º 4
0
        internal void VerifyIL(
            string qualifiedMethodName,
            string expectedIL,
            Func <Cci.ILocalDefinition, ILVisualizer.LocalInfo> mapLocal = null,
            MethodDefinitionHandle methodToken = default,
            [CallerFilePath] string callerPath = null,
            [CallerLineNumber] int callerLine  = 0
            )
        {
            var ilBuilder = TestData.GetMethodData(qualifiedMethodName).ILBuilder;

            Dictionary <int, string> sequencePointMarkers = null;

            if (!methodToken.IsNil)
            {
                string actualPdb = PdbToXmlConverter.DeltaPdbToXml(
                    new ImmutableMemoryStream(PdbDelta),
                    new[] { MetadataTokens.GetToken(methodToken) }
                    );
                sequencePointMarkers = ILValidation.GetSequencePointMarkers(actualPdb);

                Assert.True(
                    sequencePointMarkers.Count > 0,
                    $"No sequence points found in:{Environment.NewLine}{actualPdb}"
                    );
            }

            string actualIL = ILBuilderVisualizer.ILBuilderToString(
                ilBuilder,
                mapLocal ?? ToLocalInfo,
                sequencePointMarkers
                );

            AssertEx.AssertEqualToleratingWhitespaceDifferences(
                expectedIL,
                actualIL,
                escapeQuotes: true,
                expectedValueSourcePath: callerPath,
                expectedValueSourceLine: callerLine
                );
        }
Exemplo n.º 5
0
        public void VerifyIL(
            string qualifiedMethodName,
            string expectedIL,
            Func <Cci.ILocalDefinition, ILVisualizer.LocalInfo> mapLocal = null,
            MethodDefinitionHandle methodToken = default(MethodDefinitionHandle),
            [CallerFilePath] string callerPath = null,
            [CallerLineNumber] int callerLine  = 0)
        {
            var ilBuilder = TestData.GetMethodData(qualifiedMethodName).ILBuilder;

            Dictionary <int, string> sequencePointMarkers = null;

            if (!methodToken.IsNil)
            {
                string actualPdb = PdbToXmlConverter.DeltaPdbToXml(PdbDelta, new[] { MetadataTokens.GetToken(methodToken) });
                sequencePointMarkers = TestBase.GetMarkers(actualPdb);
            }

            string actualIL = ILBuilderVisualizer.ILBuilderToString(ilBuilder, mapLocal ?? ToLocalInfo, sequencePointMarkers);

            AssertEx.AssertEqualToleratingWhitespaceDifferences(expectedIL, actualIL, escapeQuotes: true, expectedValueSourcePath: callerPath, expectedValueSourceLine: callerLine);
        }
            private string VisualizeIL(CompilationTestData.MethodData methodData, bool realIL, string sequencePoints, bool useRefEmitter)
            {
                Dictionary <int, string> markers = null;

                if (sequencePoints != null)
                {
                    var actualPdbXml = PdbToXmlConverter.ToXml(
                        pdbStream: new MemoryStream(EmittedAssemblyPdb.ToArray()),
                        peStream: new MemoryStream(EmittedAssemblyData.ToArray()),
                        options: PdbToXmlOptions.ResolveTokens | PdbToXmlOptions.ThrowOnError,
                        methodName: sequencePoints);

                    markers = GetMarkers(actualPdbXml);
                }

                if (!realIL)
                {
                    return(ILBuilderVisualizer.ILBuilderToString(methodData.ILBuilder, markers: markers));
                }

                var module = this.GetModuleSymbolForEmittedImage();

                return(module != null?_test.VisualizeRealIL(module, methodData, markers) : null);
            }
Exemplo n.º 7
0
 internal static string GetMethodIL(this CompilationTestData.MethodData method)
 {
     return(ILBuilderVisualizer.ILBuilderToString(method.ILBuilder));
 }
Exemplo n.º 8
0
 internal string GetMethodIL(string qualifiedMethodName)
 {
     return(ILBuilderVisualizer.ILBuilderToString(this.TestData.GetMethodData(qualifiedMethodName).ILBuilder, ToLocalInfo));
 }
Exemplo n.º 9
0
        internal static string VisualizeIL(CompilationTestData testData, Func <MethodSymbol, bool> predicate)
        {
            var builder = testData.GetIL(m => predicate((MethodSymbol)m));

            return(ILBuilderVisualizer.ILBuilderToString(builder));
        }