mirror of
https://github.com/github/codeql.git
synced 2026-04-28 18:25:24 +02:00
C#: Add a couple of unit tests.
This commit is contained in:
@@ -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" />
|
||||
|
||||
74
csharp/extractor/Semmle.Extraction.Tests/StubGenerator.cs
Normal file
74
csharp/extractor/Semmle.Extraction.Tests/StubGenerator.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user