public void GetDeminifiedMethodNameFromSourceMap_HasSingleBindingNoMatchingMapping_ReturnNullMethodName() { // Arrange FunctionMapEntry functionMapEntry = new FunctionMapEntry { Bindings = new List <BindingInformation> { new BindingInformation { SourcePosition = new SourcePosition { ZeroBasedLineNumber = 20, ZeroBasedColumnNumber = 15 } } } }; SourceMap sourceMap = MockRepository.GenerateStub <SourceMap>(); sourceMap.Stub(x => x.GetMappingEntryForGeneratedSourcePosition(Arg <SourcePosition> .Is.Anything)).Return(null); // Act string result = FunctionMapGenerator.GetDeminifiedMethodNameFromSourceMap(functionMapEntry, sourceMap); // Assert Assert.IsNull(result); sourceMap.VerifyAllExpectations(); }
public void GetDeminifiedMethodNameFromSourceMap_HasSingleBindingMatchingMapping_ReturnsMethodName() { // Arrange FunctionMapEntry functionMapEntry = new FunctionMapEntry { Bindings = new List <BindingInformation> { new BindingInformation { SourcePosition = new SourcePosition { ZeroBasedLineNumber = 5, ZeroBasedColumnNumber = 8 } } } }; SourceMap sourceMap = MockRepository.GenerateStub <SourceMap>(); sourceMap.Stub( x => x.GetMappingEntryForGeneratedSourcePosition( Arg <SourcePosition> .Matches(y => y.ZeroBasedLineNumber == 5 && y.ZeroBasedColumnNumber == 8))) .Return(new MappingEntry { OriginalName = "foo", }); // Act string result = FunctionMapGenerator.GetDeminifiedMethodNameFromSourceMap(functionMapEntry, sourceMap); // Assert Assert.AreEqual("foo", result); sourceMap.VerifyAllExpectations(); }
public void StackFrameDeminierDeminifyStackFrame_SourceMapParsingNull_SourceMapFailedToParseError() { // Arrange string filePath = "foo"; FunctionMapEntry wrapingFunctionMapEntry = new FunctionMapEntry { DeminfifiedMethodName = "DeminifiedFoo" }; StackFrame stackFrame = new StackFrame { FilePath = filePath }; IFunctionMapStore functionMapStore = MockRepository.GenerateStub <IFunctionMapStore>(); functionMapStore.Stub(c => c.GetFunctionMapForSourceCode(filePath)) .Return(new List <FunctionMapEntry>()); IFunctionMapConsumer functionMapConsumer = MockRepository.GenerateStub <IFunctionMapConsumer>(); functionMapConsumer.Stub(c => c.GetWrappingFunctionForSourceLocation(Arg <SourcePosition> .Is.Anything, Arg <List <FunctionMapEntry> > .Is.Anything)) .Return(wrapingFunctionMapEntry); ISourceMapStore sourceMapStore = MockRepository.GenerateStub <ISourceMapStore>(); sourceMapStore.Stub(c => c.GetSourceMapForUrl(Arg <string> .Is.Anything)).Return(new SourceMap()); IStackFrameDeminifier stackFrameDeminifier = GetStackFrameDeminifierWithMockDependencies(sourceMapStore: sourceMapStore, functionMapStore: functionMapStore, functionMapConsumer: functionMapConsumer); // Act StackFrameDeminificationResult stackFrameDeminification = stackFrameDeminifier.DeminifyStackFrame(stackFrame, callerSymbolName: null); // Assert Assert.Equal(DeminificationError.SourceMapFailedToParse, stackFrameDeminification.DeminificationError); Assert.Equal(wrapingFunctionMapEntry.DeminfifiedMethodName, stackFrameDeminification.DeminifiedStackFrame.MethodName); Assert.Null(stackFrameDeminification.DeminifiedStackFrame.SourcePosition); Assert.Null(stackFrameDeminification.DeminifiedStackFrame.FilePath); }
public void GetWrappingFunctionForSourceLocation_SingleRelevantFunctionMapEntry_ReturnWrappingFunction() { // Arrange SourcePosition sourcePosition = new SourcePosition { ZeroBasedLineNumber = 41, ZeroBasedColumnNumber = 2 }; FunctionMapEntry functionMapEntry = new FunctionMapEntry { StartSourcePosition = new SourcePosition { ZeroBasedLineNumber = 40, ZeroBasedColumnNumber = 10 }, EndSourcePosition = new SourcePosition { ZeroBasedLineNumber = 50, ZeroBasedColumnNumber = 10 } }; List <FunctionMapEntry> functionMap = new List <FunctionMapEntry> { functionMapEntry }; IFunctionMapConsumer functionMapConsumer = new FunctionMapConsumer(); // Act FunctionMapEntry wrappingFunction = functionMapConsumer.GetWrappingFunctionForSourceLocation(sourcePosition, functionMap); // Assert Assert.AreEqual(functionMapEntry, wrappingFunction); }
public void StackFrameDeminierDeminifyStackFrame_SourceMapProviderReturnsNull_NoSourcemapProvidedError() { // Arrange string filePath = "foo"; FunctionMapEntry wrapingFunctionMapEntry = CreateFunctionMapEntry(deminifiedMethodName: "DeminifiedFoo"); StackFrame stackFrame = new StackFrame { FilePath = filePath }; IFunctionMapStore functionMapStore = MockRepository.GenerateStub <IFunctionMapStore>(); functionMapStore.Stub(c => c.GetFunctionMapForSourceCode(filePath)) .Return(new List <FunctionMapEntry>()); IFunctionMapConsumer functionMapConsumer = MockRepository.GenerateStub <IFunctionMapConsumer>(); functionMapConsumer.Stub(c => c.GetWrappingFunctionForSourceLocation(Arg <SourcePosition> .Is.Anything, Arg <List <FunctionMapEntry> > .Is.Anything)) .Return(wrapingFunctionMapEntry); IStackFrameDeminifier stackFrameDeminifier = GetStackFrameDeminifierWithMockDependencies(functionMapStore: functionMapStore, functionMapConsumer: functionMapConsumer); // Act StackFrameDeminificationResult stackFrameDeminification = stackFrameDeminifier.DeminifyStackFrame(stackFrame, callerSymbolName: null); // Assert Assert.Equal(DeminificationError.NoSourceMap, stackFrameDeminification.DeminificationError); Assert.Equal(wrapingFunctionMapEntry.DeminifiedMethodName, stackFrameDeminification.DeminifiedStackFrame.MethodName); Assert.Equal(SourcePosition.NotFound, stackFrameDeminification.DeminifiedStackFrame.SourcePosition); Assert.Null(stackFrameDeminification.DeminifiedStackFrame.FilePath); }
public void GetWrappingFunctionForSourceLocation_SingleIrrelevantFunctionMapEntry_ReturnNull() { // Arrange SourcePosition sourcePosition = new SourcePosition { ZeroBasedLineNumber = 2, ZeroBasedColumnNumber = 3 }; List <FunctionMapEntry> functionMap = new List <FunctionMapEntry> { new FunctionMapEntry { StartSourcePosition = new SourcePosition { ZeroBasedLineNumber = 40, ZeroBasedColumnNumber = 10 }, EndSourcePosition = new SourcePosition { ZeroBasedLineNumber = 50, ZeroBasedColumnNumber = 10 } } }; IFunctionMapConsumer functionMapConsumer = new FunctionMapConsumer(); // Act FunctionMapEntry wrappingFunction = functionMapConsumer.GetWrappingFunctionForSourceLocation(sourcePosition, functionMap); // Assert Assert.IsNull(wrappingFunction); }
public void SimpleStackFrameDeminierDeminifyStackFrame_WrapingFunctionFound_NoDeminificationError() { // Arrange string filePath = "foo"; FunctionMapEntry wrapingFunctionMapEntry = new FunctionMapEntry { DeminfifiedMethodName = "DeminifiedFoo" }; StackFrame stackFrame = new StackFrame { FilePath = filePath }; IFunctionMapStore functionMapStore = MockRepository.GenerateStub <IFunctionMapStore>(); functionMapStore.Stub(c => c.GetFunctionMapForSourceCode(filePath)) .Return(new List <FunctionMapEntry>()); IFunctionMapConsumer functionMapConsumer = MockRepository.GenerateStub <IFunctionMapConsumer>(); functionMapConsumer.Stub(c => c.GetWrappingFunctionForSourceLocation(Arg <SourcePosition> .Is.Anything, Arg <List <FunctionMapEntry> > .Is.Anything)) .Return(wrapingFunctionMapEntry); IStackFrameDeminifier stackFrameDeminifier = GetStackFrameDeminifierWithMockDependencies(functionMapStore: functionMapStore, functionMapConsumer: functionMapConsumer, useSimpleStackFrameDeminier: true); // Act StackFrameDeminificationResult stackFrameDeminification = stackFrameDeminifier.DeminifyStackFrame(stackFrame); // Assert Assert.Equal(DeminificationError.None, stackFrameDeminification.DeminificationError); Assert.Equal(wrapingFunctionMapEntry.DeminfifiedMethodName, stackFrameDeminification.DeminifiedStackFrame.MethodName); Assert.Null(stackFrameDeminification.DeminifiedStackFrame.SourcePosition); Assert.Null(stackFrameDeminification.DeminifiedStackFrame.FilePath); }
public void GetDeminifiedMethodNameFromSourceMap_NullSourceMap_ThrowsException() { // Arrange FunctionMapEntry functionMapEntry = new FunctionMapEntry(); SourceMap sourceMap = null; // Act FunctionMapGenerator.GetDeminifiedMethodNameFromSourceMap(functionMapEntry, sourceMap); }
public void GetDeminifiedMethodNameFromSourceMap_NullFunctionMapEntry_ThrowsException() { // Arrange FunctionMapEntry functionMapEntry = null; SourceMap sourceMap = MockRepository.GenerateStub <SourceMap>(); // Act FunctionMapGenerator.GetDeminifiedMethodNameFromSourceMap(functionMapEntry, sourceMap); }
public void GetDeminifiedMethodNameFromSourceMap_NullSourceMap_ThrowsException() { // Arrange FunctionMapEntry functionMapEntry = new FunctionMapEntry(); SourceMap sourceMap = null; // Act Assert.Throws <ArgumentNullException>(() => FunctionMapGenerator.GetDeminifiedMethodNameFromSourceMap(functionMapEntry, sourceMap)); }
public void GetDeminifiedMethodNameFromSourceMap_NoBinding_ReturnNullMethodName() { // Arrange FunctionMapEntry functionMapEntry = new FunctionMapEntry(); SourceMap sourceMap = MockRepository.GenerateStub <SourceMap>(); // Act string result = FunctionMapGenerator.GetDeminifiedMethodNameFromSourceMap(functionMapEntry, sourceMap); // Assert Assert.IsNull(result); sourceMap.VerifyAllExpectations(); }
public void GetWrappingFunctionForSourceLocation_EmptyFunctionMap_ReturnNull() { // Arrange SourcePosition sourcePosition = new SourcePosition( zeroBasedLineNumber: 2, zeroBasedColumnNumber: 3); List <FunctionMapEntry> functionMap = new List <FunctionMapEntry>(); IFunctionMapConsumer functionMapConsumer = new FunctionMapConsumer(); // Act FunctionMapEntry wrappingFunction = functionMapConsumer.GetWrappingFunctionForSourceLocation(sourcePosition, functionMap); // Assert Assert.Null(wrappingFunction); }
public override bool Deserialize() { var result = base.Deserialize(); _unknown = Data.ReadInt32(); // Not always zero, looks like flags or mask? ProbeMask = Data.ReadInt32(); IgnoreMask = Data.ReadInt64(); LabelTableOffset = Data.ReadInt16(); // This can't be processed here unless the bytecode is also processed for virtual address space /*if (LabelTableOffset >= 0) * { * LabelTable = new List<LabelTableEntry>(); * var tableReader = new ObjectReader(ByteScript); * tableReader.ReadRawData(LabelTableOffset); * * var NameRef = tableReader.ReadNameRef(); * var Offset = tableReader.ReadUInt32(); * while (Offset != 0x0000FFFF) * { * var entry = new LabelTableEntry(); * entry.NameRef = NameRef; * entry.Name = PCC.GetName(NameRef); * entry.Offset = Offset; * LabelTable.Add(entry); * * NameRef = tableReader.ReadNameRef(); * Offset = tableReader.ReadUInt32(); * } * }*/ StateFlags = (StateFlags)Data.ReadInt32(); FunctionMapCount = Data.ReadInt32(); for (int i = 0; i < FunctionMapCount; i++) { var funcEntry = new FunctionMapEntry(); funcEntry.NameRef.Index = Data.ReadInt32(); funcEntry.NameRef.ModNumber = Data.ReadInt32(); funcEntry.FunctionObjectIndex = Data.ReadInt32(); _FunctionMap.Add(funcEntry); } return(result); }
public override bool Deserialize() { var result = base.Deserialize(); _unknown = Data.ReadInt32(); // Not always zero, looks like flags or mask? ProbeMask = Data.ReadInt32(); IgnoreMask = Data.ReadInt64(); LabelTableOffset = Data.ReadInt16(); // This can't be processed here unless the bytecode is also processed for virtual address space /*if (LabelTableOffset >= 0) { LabelTable = new List<LabelTableEntry>(); var tableReader = new ObjectReader(ByteScript); tableReader.ReadRawData(LabelTableOffset); var NameRef = tableReader.ReadNameRef(); var Offset = tableReader.ReadUInt32(); while (Offset != 0x0000FFFF) { var entry = new LabelTableEntry(); entry.NameRef = NameRef; entry.Name = PCC.GetName(NameRef); entry.Offset = Offset; LabelTable.Add(entry); NameRef = tableReader.ReadNameRef(); Offset = tableReader.ReadUInt32(); } }*/ StateFlags = (StateFlags)Data.ReadInt32(); FunctionMapCount = Data.ReadInt32(); for (int i = 0; i < FunctionMapCount; i++) { var funcEntry = new FunctionMapEntry(); funcEntry.NameRef.Index = Data.ReadInt32(); funcEntry.NameRef.ModNumber = Data.ReadInt32(); funcEntry.FunctionObjectIndex = Data.ReadInt32(); _FunctionMap.Add(funcEntry); } return result; }
public void GetWrappingFunctionForSourceLocation_MultipleFunctionMapEntriesMultipleRelevantFunctionMapEntry_ReturnClosestWrappingFunction() { // Arrange SourcePosition sourcePosition = new SourcePosition { ZeroBasedLineNumber = 10, ZeroBasedColumnNumber = 25 }; FunctionMapEntry functionMapEntry = new FunctionMapEntry { StartSourcePosition = new SourcePosition { ZeroBasedLineNumber = 5, ZeroBasedColumnNumber = 10 }, EndSourcePosition = new SourcePosition { ZeroBasedLineNumber = 20, ZeroBasedColumnNumber = 30 } }; FunctionMapEntry functionMapEntry2 = new FunctionMapEntry { StartSourcePosition = new SourcePosition { ZeroBasedLineNumber = 9, ZeroBasedColumnNumber = 0 }, EndSourcePosition = new SourcePosition { ZeroBasedLineNumber = 15, ZeroBasedColumnNumber = 2 } }; List <FunctionMapEntry> functionMap = new List <FunctionMapEntry> { functionMapEntry2, functionMapEntry }; IFunctionMapConsumer functionMapConsumer = new FunctionMapConsumer(); // Act FunctionMapEntry wrappingFunction = functionMapConsumer.GetWrappingFunctionForSourceLocation(sourcePosition, functionMap); // Assert Assert.AreEqual(functionMapEntry2, wrappingFunction); }