C#: Add a couple of unit tests.

This commit is contained in:
Michael Nebel
2023-09-27 11:38:33 +02:00
parent 4c3cbad8fe
commit 53c947dd9d
2 changed files with 75 additions and 0 deletions

View File

@@ -16,6 +16,7 @@
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.4.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Semmle.Extraction.CSharp.StubGenerator\Semmle.Extraction.CSharp.StubGenerator.csproj" />
<ProjectReference Include="..\Semmle.Extraction.CSharp.Standalone\Semmle.Extraction.CSharp.Standalone.csproj" />
<ProjectReference Include="..\Semmle.Extraction.CSharp\Semmle.Extraction.CSharp.csproj" />
<ProjectReference Include="..\Semmle.Extraction\Semmle.Extraction.csproj" />

View File

@@ -0,0 +1,74 @@
using Xunit;
using System.IO;
using System.Text;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Semmle.Extraction.CSharp.StubGenerator;
namespace Semmle.Extraction.Tests;
/// <summary>
/// Tests for the stub generator.
///
/// These tests can be used to more easily step debug the stub generator SymbolVisitor.
/// </summary>
public class StubGeneratorTests
{
[Fact]
public void StubGeneratorFieldTest()
{
// Setup
const string source = @"
public class MyTest {
public static readonly int MyField1;
public const string MyField2 = ""hello"";
}
";
// Execute
var stub = GenerateStub(source);
// Verify
const string expected = @"public class MyTest {
public static readonly int MyField1;
public const string MyField2 = default;
}
";
Assert.Equal(expected, stub);
}
[Fact]
public void StubGeneratorMethodTest()
{
// Setup
const string source = @"
public class MyTest {
public int M1(string arg1) { return 0;}
}";
// Execute
var stub = GenerateStub(source);
// Verify
const string expected = @"public class MyTest {
public int M1(string arg1) => throw null;
}
";
Assert.Equal(expected, stub);
}
private static string GenerateStub(string source)
{
var st = CSharpSyntaxTree.ParseText(source);
var compilation = CSharpCompilation.Create(null, new[] { st });
var sb = new StringBuilder();
var visitor = new StubVisitor(new StringWriter(sb), new RelevantSymbolStub());
compilation.GlobalNamespace.Accept(visitor);
return sb.ToString();
}
private class RelevantSymbolStub : IRelevantSymbol
{
public bool IsRelevantNamedType(INamedTypeSymbol symbol) => true;
public bool IsRelevantNamespace(INamespaceSymbol symbol) => true;
}
}