85 lines
3.3 KiB
C#
85 lines
3.3 KiB
C#
// Copyright (c) .NET Foundation and contributors. All rights reserved.
|
|
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
|
|
using System;
|
|
using System.IO;
|
|
using Xunit;
|
|
using Microsoft.Extensions.Testing.Abstractions;
|
|
using System.Reflection;
|
|
using FluentAssertions;
|
|
using TestAppWithPortablePdbs;
|
|
|
|
namespace Microsoft.Extensions.Testing.Abstractions.Tests
|
|
{
|
|
public class GivenThatIWantToUsePortablePdbsToFindMethodInformation
|
|
{
|
|
private PortablePdbReader _pdbReader;
|
|
|
|
public GivenThatIWantToUsePortablePdbsToFindMethodInformation()
|
|
{
|
|
var stream = new FileStream(
|
|
Path.Combine(AppContext.BaseDirectory, "TestAppWithPortablePdbs.pdb"),
|
|
FileMode.Open,
|
|
FileAccess.Read);
|
|
_pdbReader = new PortablePdbReader(stream);
|
|
}
|
|
|
|
[Fact]
|
|
public void It_returns_the_right_file_and_the_right_file_number_when_the_method_exists_in_the_pdb()
|
|
{
|
|
var type = typeof (ClassForPortablePdbs);
|
|
var methodInfo = type.GetMethod("TestMethodForPortablePdbs");
|
|
|
|
var sourceInformation = _pdbReader.GetSourceInformation(methodInfo);
|
|
|
|
sourceInformation.Should().NotBeNull();
|
|
sourceInformation.Filename.Should().Contain("ClassForPortablePdbs.cs");
|
|
sourceInformation.LineNumber.Should().Be(6);
|
|
}
|
|
|
|
[Fact]
|
|
public void It_returns_null_when_MethodInfo_is_null()
|
|
{
|
|
var type = typeof(ClassForPortablePdbs);
|
|
var methodInfo = type.GetMethod("Name_of_a_test_that_does_not_exist");
|
|
|
|
var sourceInformation = _pdbReader.GetSourceInformation(methodInfo);
|
|
|
|
sourceInformation.Should().BeNull();
|
|
}
|
|
|
|
[Fact]
|
|
public void It_returns_null_when_the_method_does_not_exist_in_the_pdb()
|
|
{
|
|
var type = typeof(PortablePdbReader);
|
|
var methodInfo = type.GetMethod("GetSourceInformation");
|
|
|
|
var sourceInformation = _pdbReader.GetSourceInformation(methodInfo);
|
|
|
|
sourceInformation.Should().BeNull();
|
|
}
|
|
|
|
[Fact]
|
|
public void It_allows_us_to_invoke_GetSourceInformation_multiple_times()
|
|
{
|
|
var type = typeof(ClassForPortablePdbs);
|
|
var firstMethodInfo = type.GetMethod("TestMethodForPortablePdbs");
|
|
var secondMethodInfo = type.GetMethod("AnotherTestMethodForPortablePdbs");
|
|
|
|
var sourceInformation = _pdbReader.GetSourceInformation(secondMethodInfo);
|
|
sourceInformation.Should().NotBeNull();
|
|
sourceInformation.Filename.Should().Contain("ClassForPortablePdbs.cs");
|
|
sourceInformation.LineNumber.Should().Be(10);
|
|
|
|
sourceInformation = _pdbReader.GetSourceInformation(firstMethodInfo);
|
|
sourceInformation.Should().NotBeNull();
|
|
sourceInformation.Filename.Should().Contain("ClassForPortablePdbs.cs");
|
|
sourceInformation.LineNumber.Should().Be(6);
|
|
|
|
sourceInformation = _pdbReader.GetSourceInformation(secondMethodInfo);
|
|
sourceInformation.Should().NotBeNull();
|
|
sourceInformation.Filename.Should().Contain("ClassForPortablePdbs.cs");
|
|
sourceInformation.LineNumber.Should().Be(10);
|
|
}
|
|
}
|
|
}
|