Fix build and code structure improvements. New but essential UI functionality. CI improvements. Documentation improvements. AI module improvements.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
using System.Net;
|
||||
using System.Net;
|
||||
using System.Net.Http.Json;
|
||||
using System.Text.Json;
|
||||
using Microsoft.Extensions.Caching.Memory;
|
||||
@@ -74,7 +74,6 @@ public sealed class AdvisoryClientTests
|
||||
});
|
||||
|
||||
using var temp = new TempFile();
|
||||
using StellaOps.TestKit;
|
||||
var bundle = new
|
||||
{
|
||||
items = new[]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<LangVersion>preview</LangVersion>
|
||||
@@ -8,14 +8,11 @@
|
||||
<IsTestProject>true</IsTestProject>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FluentAssertions" Version="6.12.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.0" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.0" />
|
||||
<PackageReference Include="xunit" Version="2.9.2" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2" />
|
||||
</ItemGroup>
|
||||
<PackageReference Include="FluentAssertions" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\__Libraries\StellaOps.Scanner.Advisory\StellaOps.Scanner.Advisory.csproj" />
|
||||
<ProjectReference Include="../../../__Libraries/StellaOps.TestKit/StellaOps.TestKit.csproj" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -9,7 +9,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task StandardInstallProducesDeterministicOutputAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "standard");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -28,7 +28,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task IsolatedLinkerInstallIsParsedAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "isolated");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -47,7 +47,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task LockfileOnlyIsParsedAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "lockfile-only");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -66,7 +66,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task BinaryLockfileEmitsRemediationAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "binary-lockfile");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -85,7 +85,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task WorkspacesAreParsedAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "workspaces");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -104,7 +104,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task SymlinkSafetyIsEnforcedAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "symlinks");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -123,7 +123,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ScopedPackagesAreParsedAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "scoped-packages");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -142,7 +142,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task GitDependenciesAreParsedAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "git-dependencies");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -161,7 +161,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task CustomRegistryIsParsedAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "custom-registry");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -180,7 +180,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task PatchedPackagesAreParsedAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "patched-packages");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -199,7 +199,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task PatchedMultiVersionIsParsedAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "patched-multi-version");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -218,7 +218,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task DeepDependencyTreeIsParsedAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "deep-tree");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -237,7 +237,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task MultiWorkspaceIsParsedAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "multi-workspace");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -256,7 +256,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task JsoncLockfileIsParsedAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "jsonc-lockfile");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -275,7 +275,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ContainerLayersAreDiscoveredAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "container-layers");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -294,7 +294,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task BunfigOnlyEmitsDeclaredOnlyAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "bunfig-only");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -313,7 +313,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task LockfileDevClassificationIsDeterministicAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "lockfile-dev-classification");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -332,7 +332,7 @@ public sealed class BunLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task NonConcreteVersionsUseExplicitKeyAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "bun", "non-concrete-versions");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<UseXunitV3>true</UseXunitV3>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<LangVersion>preview</LangVersion>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<IsPackable>false</IsPackable>
|
||||
<UseConcelierTestInfra>false</UseConcelierTestInfra>
|
||||
<IsTestProject>true</IsTestProject>
|
||||
<ConcelierTestingPath></ConcelierTestingPath>
|
||||
<ConcelierSharedTestsPath></ConcelierSharedTestsPath>
|
||||
</PropertyGroup>
|
||||
@@ -25,10 +27,8 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
|
||||
<PackageReference Include="xunit.v3" Version="3.0.0" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.3" />
|
||||
</ItemGroup>
|
||||
<PackageReference Include="xunit.v3" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\StellaOps.Scanner.Analyzers.Lang.Tests\StellaOps.Scanner.Analyzers.Lang.Tests.csproj" />
|
||||
@@ -50,4 +50,4 @@
|
||||
<Compile Remove="$(MSBuildThisFileDirectory)..\..\..\..\tests\shared\OpenSslLegacyShim.cs" />
|
||||
<Compile Remove="$(MSBuildThisFileDirectory)..\..\..\..\tests\shared\OpenSslAutoInit.cs" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -22,7 +22,7 @@ public sealed class DenoLanguageAnalyzerRuntimeTests
|
||||
.AppendLine("{\"type\":\"deno.npm.resolution\",\"ts\":\"2025-11-18T00:00:03Z\",\"specifier\":\"npm:chalk@5\",\"package\":\"chalk\",\"version\":\"5.3.0\",\"resolved\":\"file:///cache/chalk\",\"exists\":true}")
|
||||
.ToString();
|
||||
|
||||
await File.WriteAllTextAsync(runtimePath, ndjson);
|
||||
await File.WriteAllTextAsync(runtimePath, ndjson, CancellationToken.None);
|
||||
|
||||
var store = new ScanAnalysisStore();
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System, usageHints: null, services: null, analysisStore: store);
|
||||
|
||||
@@ -10,10 +10,10 @@ public sealed class DenoRuntimeShimTests
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
try
|
||||
{
|
||||
var path = await DenoRuntimeShim.WriteAsync(root, TestContext.Current.CancellationToken);
|
||||
var path = await DenoRuntimeShim.WriteAsync(root, CancellationToken.None);
|
||||
|
||||
Assert.True(File.Exists(path));
|
||||
var content = await File.ReadAllTextAsync(path, TestContext.Current.CancellationToken);
|
||||
var content = await File.ReadAllTextAsync(path, CancellationToken.None);
|
||||
Assert.Contains("deno-runtime.ndjson", content);
|
||||
Assert.Contains("deno.module.load", content);
|
||||
Assert.Contains("deno.permission.use", content);
|
||||
|
||||
@@ -57,7 +57,7 @@ public sealed class DenoRuntimeTraceRunnerTests
|
||||
try
|
||||
{
|
||||
var entrypoint = Path.Combine(root, "main.ts");
|
||||
await File.WriteAllTextAsync(entrypoint, "console.log('hi')");
|
||||
await File.WriteAllTextAsync(entrypoint, "console.log('hi')", CancellationToken.None);
|
||||
|
||||
using var entryEnv = new EnvironmentVariableScope("STELLA_DENO_ENTRYPOINT", entrypoint);
|
||||
using var binaryEnv = new EnvironmentVariableScope("STELLA_DENO_BINARY", Guid.NewGuid().ToString("N"));
|
||||
@@ -97,7 +97,7 @@ public sealed class DenoRuntimeTraceRunnerTests
|
||||
var runtimePath = Path.Combine(root, "deno-runtime.ndjson");
|
||||
Assert.True(File.Exists(runtimePath));
|
||||
|
||||
var content = await File.ReadAllTextAsync(runtimePath);
|
||||
var content = await File.ReadAllTextAsync(runtimePath, CancellationToken.None);
|
||||
Assert.Contains("deno.runtime.start", content);
|
||||
Assert.Contains("deno.module.load", content);
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ public sealed class DenoAnalyzerGoldenTests
|
||||
var fixtureRoot = TestPaths.ResolveFixture("lang", "deno", "full");
|
||||
var golden = Path.Combine(fixtureRoot, "expected.json");
|
||||
var analyzers = new ILanguageAnalyzer[] { new DenoLanguageAnalyzer() };
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
|
||||
var (workspaceRoot, envDir) = DenoWorkspaceTestFixture.Create();
|
||||
var previousDenoDir = Environment.GetEnvironmentVariable("DENO_DIR");
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<UseXunitV3>true</UseXunitV3>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<LangVersion>preview</LangVersion>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<IsPackable>false</IsPackable>
|
||||
<IsTestProject>true</IsTestProject>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@@ -28,10 +31,8 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
|
||||
<PackageReference Include="xunit.v3" Version="3.0.0" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.3" />
|
||||
</ItemGroup>
|
||||
<PackageReference Include="xunit.v3" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Using Include="Xunit" />
|
||||
@@ -42,4 +43,4 @@
|
||||
Link="Fixtures\\%(RecursiveDir)%(Filename)%(Extension)"
|
||||
CopyToOutputDirectory="PreserveNewest" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -117,7 +117,7 @@ public sealed class GlobalJsonParserTests
|
||||
[Fact]
|
||||
public async Task HandlesNonExistentFileAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var result = await GlobalJsonParser.ParseAsync("/nonexistent/global.json", cancellationToken);
|
||||
|
||||
Assert.Equal(GlobalJsonResult.Empty, result);
|
||||
@@ -217,7 +217,7 @@ public sealed class GlobalJsonParserTests
|
||||
[Fact]
|
||||
public async Task ParsesFileAsyncSuccessfullyAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempDir = DotNetFixtureBuilder.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
|
||||
@@ -352,7 +352,7 @@ public sealed class NuGetConfigParserTests
|
||||
[Fact]
|
||||
public async Task ParsesFileAsyncSuccessfullyAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempDir = DotNetFixtureBuilder.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
|
||||
@@ -377,7 +377,7 @@ public sealed class MsBuildProjectParserTests
|
||||
[Fact]
|
||||
public async Task HandlesFileNotFoundAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var result = await MsBuildProjectParser.ParseAsync("/nonexistent/path.csproj", cancellationToken);
|
||||
|
||||
Assert.Equal(MsBuildProjectParser.Empty, result);
|
||||
@@ -455,7 +455,7 @@ public sealed class MsBuildProjectParserTests
|
||||
[Fact]
|
||||
public async Task ParsesFileAsyncSuccessfullyAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempDir = DotNetFixtureBuilder.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
|
||||
@@ -116,7 +116,7 @@ public sealed class PackagesConfigParserTests
|
||||
[Fact]
|
||||
public async Task HandlesNonExistentFileAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var result = await PackagesConfigParser.ParseAsync("/nonexistent/packages.config", cancellationToken);
|
||||
|
||||
Assert.Equal(PackagesConfigResult.Empty, result);
|
||||
@@ -189,7 +189,7 @@ public sealed class PackagesConfigParserTests
|
||||
[Fact]
|
||||
public async Task ParsesFileAsyncSuccessfullyAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempDir = DotNetFixtureBuilder.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<UseXunitV3>true</UseXunitV3>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<LangVersion>preview</LangVersion>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<IsPackable>false</IsPackable>
|
||||
<IsTestProject>true</IsTestProject>
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<!-- Disable Concelier test infrastructure - not needed for scanner tests -->
|
||||
<UseConcelierTestInfra>false</UseConcelierTestInfra>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Remove inherited packages and files from Directory.Build.props -->
|
||||
@@ -26,13 +28,8 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="xunit.v3" Version="3.0.0" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.3">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
<PackageReference Include="xunit.v3" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Global using directives for test framework -->
|
||||
<ItemGroup>
|
||||
@@ -46,4 +43,4 @@
|
||||
<ItemGroup>
|
||||
<None Include="Fixtures\**\*" CopyToOutputDirectory="PreserveNewest" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -13,7 +13,7 @@ public sealed class GoLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task BuildInfoFixtureProducesDeterministicOutputAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "go", "basic");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -32,7 +32,7 @@ public sealed class GoLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task DwarfOnlyFixtureFallsBackToMetadataAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "go", "dwarf-only");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -51,7 +51,7 @@ public sealed class GoLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task StrippedBinaryFallsBackToHeuristicBinHashAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "go", "stripped");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -70,7 +70,7 @@ public sealed class GoLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ParallelRunsRemainDeterministicAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "go", "basic");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -93,7 +93,7 @@ public sealed class GoLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task HeuristicMetricCounterIncrementsAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "go", "stripped");
|
||||
|
||||
var analyzers = new ILanguageAnalyzer[]
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<UseXunitV3>true</UseXunitV3>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<LangVersion>preview</LangVersion>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<IsPackable>false</IsPackable>
|
||||
<IsTestProject>true</IsTestProject>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@@ -22,10 +25,8 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
|
||||
<PackageReference Include="xunit.v3" Version="3.0.0" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.3" />
|
||||
</ItemGroup>
|
||||
<PackageReference Include="xunit.v3" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\StellaOps.Scanner.Analyzers.Lang.Tests\StellaOps.Scanner.Analyzers.Lang.Tests.csproj" />
|
||||
|
||||
@@ -24,7 +24,7 @@ public sealed class JavaEntrypointResolverTests
|
||||
ImmutableArray<JavaModuleDescriptor>.Empty,
|
||||
ImmutableArray<JavaClassDuplicate>.Empty,
|
||||
ImmutableArray<JavaSplitPackage>.Empty);
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
|
||||
var resolution = JavaEntrypointResolver.Resolve(
|
||||
classPath,
|
||||
@@ -58,7 +58,7 @@ public sealed class JavaEntrypointResolverTests
|
||||
writer.Write("\r\n");
|
||||
}
|
||||
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
@@ -107,7 +107,7 @@ public sealed class JavaEntrypointResolverTests
|
||||
writer.Write("\r\n");
|
||||
}
|
||||
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
@@ -155,7 +155,7 @@ public sealed class JavaEntrypointResolverTests
|
||||
writer.Write("\r\n");
|
||||
}
|
||||
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
@@ -204,7 +204,7 @@ public sealed class JavaEntrypointResolverTests
|
||||
Details: "System.loadLibrary(\"mylib\")"));
|
||||
|
||||
var jniAnalysis = new JavaJniAnalysis(jniEdges, ImmutableArray<JavaJniWarning>.Empty);
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
|
||||
var resolution = JavaEntrypointResolver.Resolve(
|
||||
classPath,
|
||||
@@ -243,7 +243,7 @@ public sealed class JavaEntrypointResolverTests
|
||||
Details: "Class.forName(\"com.example.Plugin\")"));
|
||||
|
||||
var reflectionAnalysis = new JavaReflectionAnalysis(reflectEdges, ImmutableArray<JavaReflectionWarning>.Empty);
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
|
||||
var resolution = JavaEntrypointResolver.Resolve(
|
||||
classPath,
|
||||
@@ -278,7 +278,7 @@ public sealed class JavaEntrypointResolverTests
|
||||
writer.Write("\r\n");
|
||||
}
|
||||
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
@@ -324,7 +324,7 @@ public sealed class JavaEntrypointResolverTests
|
||||
writer.Write("\r\n");
|
||||
}
|
||||
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
@@ -383,7 +383,7 @@ public sealed class JavaEntrypointResolverTests
|
||||
Warnings: ImmutableArray<JavaResolutionWarning>.Empty);
|
||||
|
||||
using var stream = new MemoryStream();
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
|
||||
await JavaEntrypointAocWriter.WriteNdjsonAsync(
|
||||
resolution,
|
||||
|
||||
@@ -28,7 +28,7 @@ public sealed class JavaJniAnalyzerTests
|
||||
stream.Write(bytes);
|
||||
}
|
||||
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
@@ -65,7 +65,7 @@ public sealed class JavaJniAnalyzerTests
|
||||
stream.Write(bytes);
|
||||
}
|
||||
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
@@ -101,7 +101,7 @@ public sealed class JavaJniAnalyzerTests
|
||||
stream.Write(bytes);
|
||||
}
|
||||
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
@@ -146,7 +146,7 @@ public sealed class JavaJniAnalyzerTests
|
||||
}
|
||||
}
|
||||
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
@@ -168,7 +168,7 @@ public sealed class JavaJniAnalyzerTests
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
try
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
@@ -198,7 +198,7 @@ public sealed class JavaJniAnalyzerTests
|
||||
stream.Write(bytes);
|
||||
}
|
||||
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
|
||||
@@ -14,7 +14,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ExtractsMavenArtifactFromJarAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
try
|
||||
{
|
||||
@@ -39,7 +39,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ExtractsMavenArtifactsFromSpringBootFatJarEmbeddedLibrariesAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
try
|
||||
{
|
||||
@@ -64,7 +64,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ExtractsMavenArtifactsFromWarEmbeddedLibrariesAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
try
|
||||
{
|
||||
@@ -89,7 +89,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ExtractsMavenArtifactsFromPomXmlOnlyJarAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
try
|
||||
{
|
||||
@@ -114,7 +114,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task LockfilesProduceDeclaredOnlyComponentsAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -149,7 +149,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task CapturesFrameworkConfigurationHintsAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -219,7 +219,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task CapturesJniHintsAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -272,7 +272,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ExtractsMavenArtifactFromEmbeddedJarAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -334,7 +334,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ExtractsMavenArtifactFromPomXmlWhenPomPropertiesMissingAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -389,7 +389,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task PomXmlWithIncompleteCoordinatesEmitsUnresolvedComponentAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -460,7 +460,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ParsesGradleGroovyBuildFileAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("java", "gradle-groovy");
|
||||
var goldenPath = TestPaths.ResolveFixture("java", "gradle-groovy", "expected.json");
|
||||
|
||||
@@ -484,7 +484,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ParsesGradleKotlinBuildFileAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("java", "gradle-kotlin");
|
||||
|
||||
var analyzers = new ILanguageAnalyzer[] { new JavaLanguageAnalyzer() };
|
||||
@@ -504,7 +504,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ParsesGradleVersionCatalogAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("java", "gradle-catalog");
|
||||
|
||||
var analyzers = new ILanguageAnalyzer[] { new JavaLanguageAnalyzer() };
|
||||
@@ -521,7 +521,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ParsesMavenParentPomAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("java", "maven-parent");
|
||||
|
||||
var analyzers = new ILanguageAnalyzer[] { new JavaLanguageAnalyzer() };
|
||||
@@ -542,7 +542,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ParsesMavenBomImportsAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("java", "maven-bom");
|
||||
|
||||
var analyzers = new ILanguageAnalyzer[] { new JavaLanguageAnalyzer() };
|
||||
@@ -561,7 +561,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ParsesMavenPropertyPlaceholdersAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("java", "maven-properties");
|
||||
|
||||
var analyzers = new ILanguageAnalyzer[] { new JavaLanguageAnalyzer() };
|
||||
@@ -584,7 +584,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ParsesMavenScopesAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("java", "maven-scopes");
|
||||
|
||||
var analyzers = new ILanguageAnalyzer[] { new JavaLanguageAnalyzer() };
|
||||
@@ -615,7 +615,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task DetectsVersionConflictsAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("java", "version-conflict");
|
||||
|
||||
var analyzers = new ILanguageAnalyzer[] { new JavaLanguageAnalyzer() };
|
||||
@@ -650,7 +650,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task MultiModuleGradleLockFilesEmitLockModulePathMetadataAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -729,7 +729,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task RuntimeImageEmitsExplicitKeyComponentAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -798,7 +798,7 @@ public sealed class JavaLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task DuplicateRuntimeImagesAreDeduplicatedAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
|
||||
@@ -25,7 +25,7 @@ public sealed class JavaReflectionAnalyzerTests
|
||||
stream.Write(bytes);
|
||||
}
|
||||
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
@@ -59,7 +59,7 @@ public sealed class JavaReflectionAnalyzerTests
|
||||
stream.Write(bytes);
|
||||
}
|
||||
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
@@ -84,7 +84,7 @@ public sealed class JavaReflectionAnalyzerTests
|
||||
{
|
||||
JavaFixtureBuilder.CreateSpringBootFatJar(root, "apps/app-fat.jar");
|
||||
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
@@ -116,7 +116,7 @@ public sealed class JavaReflectionAnalyzerTests
|
||||
stream.Write(bytes);
|
||||
}
|
||||
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
|
||||
@@ -32,7 +32,7 @@ public sealed class JavaServiceProviderScannerTests
|
||||
CreateJarWithClasses(root, "libs/a.jar", new[] { "com.example.ADriver" }, servicesA);
|
||||
CreateJarWithClasses(root, "libs/b.jar", new[] { "com.example.BDriver" }, servicesB);
|
||||
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
@@ -65,7 +65,7 @@ public sealed class JavaServiceProviderScannerTests
|
||||
CreateJarWithClasses(root, "libs/a.jar", new[] { "com.example.DuplicateDriver" }, services);
|
||||
CreateJarWithClasses(root, "libs/b.jar", new[] { "com.example.Other" }, services);
|
||||
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
@@ -89,7 +89,7 @@ public sealed class JavaServiceProviderScannerTests
|
||||
{
|
||||
JavaFixtureBuilder.CreateSpringBootFatJar(root, "apps/app-fat.jar");
|
||||
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var context = new LanguageAnalyzerContext(root, TimeProvider.System);
|
||||
var workspace = JavaWorkspaceNormalizer.Normalize(context, cancellationToken);
|
||||
var classPath = JavaClassPathBuilder.Build(workspace, cancellationToken);
|
||||
|
||||
@@ -31,7 +31,7 @@ public sealed class JavaSignatureManifestAnalyzerTests
|
||||
}
|
||||
|
||||
var javaArchive = JavaArchive.Load(jarPath, "libs/app.jar");
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
|
||||
var attributes = JavaSignatureManifestAnalyzer.ExtractLoaderAttributes(javaArchive, cancellationToken);
|
||||
|
||||
@@ -69,7 +69,7 @@ public sealed class JavaSignatureManifestAnalyzerTests
|
||||
}
|
||||
|
||||
var javaArchive = JavaArchive.Load(jarPath, "libs/boot.jar");
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
|
||||
var attributes = JavaSignatureManifestAnalyzer.ExtractLoaderAttributes(javaArchive, cancellationToken);
|
||||
|
||||
@@ -103,7 +103,7 @@ public sealed class JavaSignatureManifestAnalyzerTests
|
||||
}
|
||||
|
||||
var javaArchive = JavaArchive.Load(jarPath, "libs/agent.jar");
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
|
||||
var attributes = JavaSignatureManifestAnalyzer.ExtractLoaderAttributes(javaArchive, cancellationToken);
|
||||
|
||||
@@ -138,7 +138,7 @@ public sealed class JavaSignatureManifestAnalyzerTests
|
||||
}
|
||||
|
||||
var javaArchive = JavaArchive.Load(jarPath, "libs/mrjar.jar");
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
|
||||
var attributes = JavaSignatureManifestAnalyzer.ExtractLoaderAttributes(javaArchive, cancellationToken);
|
||||
|
||||
@@ -172,7 +172,7 @@ public sealed class JavaSignatureManifestAnalyzerTests
|
||||
}
|
||||
|
||||
var javaArchive = JavaArchive.Load(jarPath, "libs/empty.jar");
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
|
||||
var attributes = JavaSignatureManifestAnalyzer.ExtractLoaderAttributes(javaArchive, cancellationToken);
|
||||
|
||||
@@ -294,7 +294,7 @@ public sealed class JavaSignatureManifestAnalyzerTests
|
||||
}
|
||||
|
||||
var javaArchive = JavaArchive.Load(jarPath, "libs/app.jar");
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
|
||||
var analysis = JavaSignatureManifestAnalyzer.Analyze(javaArchive, cancellationToken);
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ public sealed class GradleGroovyParserTests
|
||||
[Fact]
|
||||
public async Task ParsesStringNotationDependenciesAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var content = """
|
||||
dependencies {
|
||||
implementation 'org.slf4j:slf4j-api:1.7.36'
|
||||
@@ -50,7 +50,7 @@ public sealed class GradleGroovyParserTests
|
||||
[Fact]
|
||||
public async Task ParsesMapNotationDependenciesAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
// Parser supports map notation without parentheses
|
||||
var content = """
|
||||
dependencies {
|
||||
@@ -86,7 +86,7 @@ public sealed class GradleGroovyParserTests
|
||||
[Fact]
|
||||
public async Task ResolvesPropertyPlaceholdersAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var content = """
|
||||
dependencies {
|
||||
implementation "org.slf4j:slf4j-api:${slf4jVersion}"
|
||||
|
||||
@@ -8,7 +8,7 @@ public sealed class GradleKotlinParserTests
|
||||
[Fact]
|
||||
public async Task ParsesStringNotationDependenciesAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var content = """
|
||||
dependencies {
|
||||
implementation("org.slf4j:slf4j-api:1.7.36")
|
||||
@@ -49,7 +49,7 @@ public sealed class GradleKotlinParserTests
|
||||
[Fact]
|
||||
public async Task ParsesNamedArgumentsNotationAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var content = """
|
||||
dependencies {
|
||||
implementation(group = "org.apache.commons", name = "commons-lang3", version = "3.12.0")
|
||||
@@ -82,7 +82,7 @@ public sealed class GradleKotlinParserTests
|
||||
[Fact]
|
||||
public async Task ParsesPlatformDependencyAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var content = """
|
||||
dependencies {
|
||||
implementation(platform("org.springframework.boot:spring-boot-dependencies:3.1.0"))
|
||||
@@ -112,7 +112,7 @@ public sealed class GradleKotlinParserTests
|
||||
[Fact]
|
||||
public async Task ParsesEnforcedPlatformDependencyAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var content = """
|
||||
dependencies {
|
||||
api(enforcedPlatform("org.springframework.cloud:spring-cloud-dependencies:2022.0.3"))
|
||||
@@ -139,7 +139,7 @@ public sealed class GradleKotlinParserTests
|
||||
[Fact]
|
||||
public async Task TracksVersionCatalogReferencesAsUnresolvedAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var content = """
|
||||
dependencies {
|
||||
implementation(libs.guava)
|
||||
@@ -166,7 +166,7 @@ public sealed class GradleKotlinParserTests
|
||||
[Fact]
|
||||
public async Task ParsesAllConfigurationTypesAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var content = """
|
||||
dependencies {
|
||||
implementation("com.example:impl:1.0")
|
||||
@@ -205,7 +205,7 @@ public sealed class GradleKotlinParserTests
|
||||
[Fact]
|
||||
public async Task ParsesPluginsBlockAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var content = """
|
||||
plugins {
|
||||
id("org.springframework.boot") version "3.1.0"
|
||||
@@ -240,7 +240,7 @@ public sealed class GradleKotlinParserTests
|
||||
[Fact]
|
||||
public async Task ExtractsGroupAndVersionAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var content = """
|
||||
group = "com.example"
|
||||
version = "1.0.0-SNAPSHOT"
|
||||
@@ -267,7 +267,7 @@ public sealed class GradleKotlinParserTests
|
||||
[Fact]
|
||||
public async Task ParsesClassifierAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var content = """
|
||||
dependencies {
|
||||
implementation("com.example:library:1.0.0:sources")
|
||||
@@ -303,7 +303,7 @@ public sealed class GradleKotlinParserTests
|
||||
[Fact]
|
||||
public async Task HandlesNonExistentFileAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
|
||||
var result = await GradleKotlinParser.ParseAsync("/nonexistent/path/build.gradle.kts", null, cancellationToken);
|
||||
|
||||
@@ -313,7 +313,7 @@ public sealed class GradleKotlinParserTests
|
||||
[Fact]
|
||||
public async Task ResolvesPropertyPlaceholderAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
// The Kotlin parser treats any coordinate containing $ as unresolved
|
||||
// because string interpolation happens at Gradle evaluation time.
|
||||
// Use a coordinate without $ to test basic parsing
|
||||
@@ -342,7 +342,7 @@ public sealed class GradleKotlinParserTests
|
||||
[Fact]
|
||||
public async Task TracksUnresolvedStringInterpolationAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var content = """
|
||||
dependencies {
|
||||
implementation("$myGroup:$myArtifact:$myVersion")
|
||||
|
||||
@@ -175,7 +175,7 @@ public sealed class GradlePropertiesParserTests
|
||||
[Fact]
|
||||
public async Task HandlesNonExistentFileAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
|
||||
var result = await GradlePropertiesParser.ParseAsync("/nonexistent/gradle.properties", cancellationToken);
|
||||
|
||||
@@ -185,7 +185,7 @@ public sealed class GradlePropertiesParserTests
|
||||
[Fact]
|
||||
public async Task ParsesFileAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var content = """
|
||||
group=com.example
|
||||
version=1.0.0
|
||||
|
||||
@@ -7,7 +7,7 @@ public sealed class GradleVersionCatalogParserTests
|
||||
[Fact]
|
||||
public async Task ParsesVersionSectionAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var content = """
|
||||
[versions]
|
||||
guava = "31.1-jre"
|
||||
@@ -33,7 +33,7 @@ public sealed class GradleVersionCatalogParserTests
|
||||
[Fact]
|
||||
public async Task ParsesLibrariesSectionAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var content = """
|
||||
[libraries]
|
||||
guava = "com.google.guava:guava:31.1-jre"
|
||||
@@ -62,7 +62,7 @@ public sealed class GradleVersionCatalogParserTests
|
||||
[Fact]
|
||||
public async Task ParsesModuleNotationAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var content = """
|
||||
[versions]
|
||||
guava = "31.1-jre"
|
||||
@@ -93,7 +93,7 @@ public sealed class GradleVersionCatalogParserTests
|
||||
[Fact]
|
||||
public async Task ParsesGroupNameNotationAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var content = """
|
||||
[versions]
|
||||
commons = "3.12.0"
|
||||
@@ -124,7 +124,7 @@ public sealed class GradleVersionCatalogParserTests
|
||||
[Fact]
|
||||
public async Task ResolvesVersionRefAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var content = """
|
||||
[versions]
|
||||
slf4j = "2.0.7"
|
||||
@@ -159,7 +159,7 @@ public sealed class GradleVersionCatalogParserTests
|
||||
[Fact]
|
||||
public async Task HandlesInlineVersionAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var content = """
|
||||
[libraries]
|
||||
junit = { module = "junit:junit", version = "4.13.2" }
|
||||
@@ -185,7 +185,7 @@ public sealed class GradleVersionCatalogParserTests
|
||||
[Fact]
|
||||
public async Task ParsesRichVersionsAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var content = """
|
||||
[versions]
|
||||
guava = { strictly = "31.1-jre" }
|
||||
@@ -212,7 +212,7 @@ public sealed class GradleVersionCatalogParserTests
|
||||
[Fact]
|
||||
public async Task ParsesBundlesSectionAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var content = """
|
||||
[libraries]
|
||||
guava = "com.google.guava:guava:31.1-jre"
|
||||
@@ -249,7 +249,7 @@ public sealed class GradleVersionCatalogParserTests
|
||||
[Fact]
|
||||
public async Task ParsesPluginsSectionAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var content = """
|
||||
[versions]
|
||||
kotlin = "1.9.0"
|
||||
@@ -286,7 +286,7 @@ public sealed class GradleVersionCatalogParserTests
|
||||
[Fact]
|
||||
public async Task GetLibraryByAliasAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var content = """
|
||||
[libraries]
|
||||
guava = "com.google.guava:guava:31.1-jre"
|
||||
@@ -321,7 +321,7 @@ public sealed class GradleVersionCatalogParserTests
|
||||
[Fact]
|
||||
public async Task ToDependenciesConvertsAllLibrariesAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var content = """
|
||||
[versions]
|
||||
guava = "31.1-jre"
|
||||
@@ -361,7 +361,7 @@ public sealed class GradleVersionCatalogParserTests
|
||||
[Fact]
|
||||
public async Task HandlesNonExistentFileAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
|
||||
var result = await GradleVersionCatalogParser.ParseAsync("/nonexistent/libs.versions.toml", cancellationToken);
|
||||
|
||||
@@ -371,7 +371,7 @@ public sealed class GradleVersionCatalogParserTests
|
||||
[Fact]
|
||||
public async Task ParsesCompleteVersionCatalogAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var content = """
|
||||
[versions]
|
||||
kotlin = "1.9.0"
|
||||
|
||||
@@ -7,7 +7,7 @@ public sealed class MavenBomImporterTests
|
||||
[Fact]
|
||||
public async Task ImportsSimpleBomAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
|
||||
Directory.CreateDirectory(tempDir);
|
||||
|
||||
@@ -71,7 +71,7 @@ public sealed class MavenBomImporterTests
|
||||
[Fact]
|
||||
public async Task ReturnsNullForMissingBomAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
|
||||
Directory.CreateDirectory(tempDir);
|
||||
|
||||
@@ -91,7 +91,7 @@ public sealed class MavenBomImporterTests
|
||||
[Fact]
|
||||
public async Task CachesImportedBomsAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
|
||||
Directory.CreateDirectory(tempDir);
|
||||
|
||||
@@ -141,7 +141,7 @@ public sealed class MavenBomImporterTests
|
||||
[Fact]
|
||||
public async Task HandlesNestedBomImportsAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
|
||||
Directory.CreateDirectory(tempDir);
|
||||
|
||||
@@ -200,7 +200,7 @@ public sealed class MavenBomImporterTests
|
||||
[Fact]
|
||||
public async Task ChildBomOverridesParentVersionsAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
|
||||
Directory.CreateDirectory(tempDir);
|
||||
|
||||
@@ -283,7 +283,7 @@ public sealed class MavenBomImporterTests
|
||||
[Fact]
|
||||
public async Task RespectsMaxDepthLimitAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
|
||||
Directory.CreateDirectory(tempDir);
|
||||
|
||||
@@ -346,7 +346,7 @@ public sealed class MavenBomImporterTests
|
||||
[Fact]
|
||||
public async Task HandlesCircularBomReferencesAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
|
||||
Directory.CreateDirectory(tempDir);
|
||||
|
||||
@@ -435,7 +435,7 @@ public sealed class MavenBomImporterTests
|
||||
[Fact]
|
||||
public async Task ExtractsBomPropertiesAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
|
||||
Directory.CreateDirectory(tempDir);
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ public sealed class MavenEffectivePomBuilderTests
|
||||
[Fact]
|
||||
public async Task BuildsEffectivePomWithParentPropertiesAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -73,7 +73,7 @@ public sealed class MavenEffectivePomBuilderTests
|
||||
[Fact]
|
||||
public async Task MergesParentDependencyManagementAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -152,7 +152,7 @@ public sealed class MavenEffectivePomBuilderTests
|
||||
[Fact]
|
||||
public async Task ChildDependencyManagementOverridesParentAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -224,7 +224,7 @@ public sealed class MavenEffectivePomBuilderTests
|
||||
[Fact]
|
||||
public async Task HandlesStandalonePomAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -266,7 +266,7 @@ public sealed class MavenEffectivePomBuilderTests
|
||||
[Fact]
|
||||
public async Task ResolvesPropertyInDependencyManagementVersionAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -315,7 +315,7 @@ public sealed class MavenEffectivePomBuilderTests
|
||||
[Fact]
|
||||
public async Task TracksVersionSourceCorrectlyAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -404,7 +404,7 @@ public sealed class MavenEffectivePomBuilderTests
|
||||
[Fact]
|
||||
public async Task CollectsAllLicensesAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -458,7 +458,7 @@ public sealed class MavenEffectivePomBuilderTests
|
||||
[Fact]
|
||||
public async Task GetsUnresolvedDependenciesAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -502,7 +502,7 @@ public sealed class MavenEffectivePomBuilderTests
|
||||
[Fact]
|
||||
public async Task PopulatesManagedVersionsIndexAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
|
||||
@@ -308,7 +308,7 @@ public sealed class MavenLocalRepositoryTests
|
||||
[Fact]
|
||||
public async Task ReadPomAsyncReturnsNullForMissingPomAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
|
||||
Directory.CreateDirectory(tempDir);
|
||||
|
||||
@@ -329,7 +329,7 @@ public sealed class MavenLocalRepositoryTests
|
||||
[Fact]
|
||||
public async Task ReadPomAsyncReturnsParsedPomAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
|
||||
|
||||
try
|
||||
|
||||
@@ -8,7 +8,7 @@ public sealed class MavenParentResolverTests
|
||||
[Fact]
|
||||
public async Task ResolvesRelativePathParentAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -63,7 +63,7 @@ public sealed class MavenParentResolverTests
|
||||
[Fact]
|
||||
public async Task ResolvesDefaultRelativePathAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -111,7 +111,7 @@ public sealed class MavenParentResolverTests
|
||||
[Fact]
|
||||
public async Task ResolvesMultiLevelParentChainAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -182,7 +182,7 @@ public sealed class MavenParentResolverTests
|
||||
[Fact]
|
||||
public async Task ReturnsUnresolvedForMissingParentAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -218,7 +218,7 @@ public sealed class MavenParentResolverTests
|
||||
[Fact]
|
||||
public async Task HandlesNoParentAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -251,7 +251,7 @@ public sealed class MavenParentResolverTests
|
||||
[Fact]
|
||||
public async Task InheritsGroupIdFromParentAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -298,7 +298,7 @@ public sealed class MavenParentResolverTests
|
||||
[Fact]
|
||||
public async Task InheritsVersionFromParentAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -343,7 +343,7 @@ public sealed class MavenParentResolverTests
|
||||
[Fact]
|
||||
public async Task ResolvesDependencyVersionFromManagementAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -407,7 +407,7 @@ public sealed class MavenParentResolverTests
|
||||
[Fact]
|
||||
public async Task ResolvesPropertyInDependencyVersionAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -449,7 +449,7 @@ public sealed class MavenParentResolverTests
|
||||
[Fact]
|
||||
public async Task CollectsLicensesFromChainAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
@@ -503,7 +503,7 @@ public sealed class MavenParentResolverTests
|
||||
[Fact]
|
||||
public async Task ChildPropertyOverridesParentPropertyAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var root = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
try
|
||||
|
||||
@@ -7,7 +7,7 @@ public sealed class MavenPomParserTests
|
||||
[Fact]
|
||||
public async Task ParsesDependenciesAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var content = """
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0">
|
||||
@@ -59,7 +59,7 @@ public sealed class MavenPomParserTests
|
||||
[Fact]
|
||||
public async Task ParsesPropertiesAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var content = """
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project>
|
||||
@@ -99,7 +99,7 @@ public sealed class MavenPomParserTests
|
||||
[Fact]
|
||||
public async Task ParsesLicensesAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var content = """
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project>
|
||||
@@ -136,7 +136,7 @@ public sealed class MavenPomParserTests
|
||||
[Fact]
|
||||
public async Task ParsesParentReferenceAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var content = """
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project>
|
||||
@@ -169,7 +169,7 @@ public sealed class MavenPomParserTests
|
||||
[Fact]
|
||||
public async Task ParsesDependencyManagementAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var content = """
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project>
|
||||
|
||||
@@ -9,7 +9,7 @@ public sealed class ShadedJarDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectsMultiplePomPropertiesAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var jarPath = Path.Combine(Path.GetTempPath(), $"shaded-{Guid.NewGuid()}.jar");
|
||||
|
||||
try
|
||||
@@ -36,7 +36,7 @@ public sealed class ShadedJarDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectsDependencyReducedPomAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var jarPath = Path.Combine(Path.GetTempPath(), $"shade-plugin-{Guid.NewGuid()}.jar");
|
||||
|
||||
try
|
||||
@@ -63,7 +63,7 @@ public sealed class ShadedJarDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectsRelocatedPackagesAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var jarPath = Path.Combine(Path.GetTempPath(), $"relocated-{Guid.NewGuid()}.jar");
|
||||
|
||||
try
|
||||
@@ -91,7 +91,7 @@ public sealed class ShadedJarDetectorTests
|
||||
[Fact]
|
||||
public async Task ReturnsNotShadedForRegularJarAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var jarPath = Path.Combine(Path.GetTempPath(), $"regular-{Guid.NewGuid()}.jar");
|
||||
|
||||
try
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<UseXunitV3>true</UseXunitV3>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<LangVersion>preview</LangVersion>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<IsPackable>false</IsPackable>
|
||||
<IsTestProject>true</IsTestProject>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@@ -25,13 +28,11 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
|
||||
<PackageReference Include="xunit.v3" Version="3.0.0" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.3" />
|
||||
<!-- Force newer versions to override transitive dependencies -->
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
|
||||
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="10.0.0" />
|
||||
<PackageReference Include="BouncyCastle.Cryptography" Version="2.6.2" />
|
||||
<PackageReference Include="xunit.v3" />
|
||||
<!-- Force newer versions to override transitive dependencies -->
|
||||
<PackageReference Include="Newtonsoft.Json" />
|
||||
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" />
|
||||
<PackageReference Include="BouncyCastle.Cryptography" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -11,7 +11,7 @@ public class Phase22SmokeTests
|
||||
[Fact]
|
||||
public async Task Phase22_Fixture_Matches_Golden()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var baseDir = AppContext.BaseDirectory;
|
||||
var repoRoot = Path.GetFullPath(Path.Combine(baseDir,
|
||||
"..", "..", "..", "..", "..", "..", ".."));
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<UseXunitV3>true</UseXunitV3>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<LangVersion>preview</LangVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<IsPackable>false</IsPackable>
|
||||
<IsTestProject>true</IsTestProject>
|
||||
<!-- Stay scoped: disable implicit restore sources beyond local nugets -->
|
||||
<RestoreSources>$(StellaOpsLocalNuGetSource)</RestoreSources>
|
||||
<DisableImplicitNuGetFallbackFolder>true</DisableImplicitNuGetFallbackFolder>
|
||||
@@ -13,9 +16,9 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
|
||||
<PackageReference Include="xunit.v3" Version="3.0.0" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.3" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" />
|
||||
<PackageReference Include="xunit.v3" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -427,7 +427,7 @@ public sealed class NodeDeterminismTests : IDisposable
|
||||
return await LanguageAnalyzerTestHarness.RunToJsonAsync(
|
||||
_tempDir,
|
||||
analyzers,
|
||||
TestContext.Current.CancellationToken);
|
||||
CancellationToken.None);
|
||||
}
|
||||
|
||||
private static List<string> ExtractPackageNames(string json)
|
||||
|
||||
@@ -609,6 +609,6 @@ public sealed class NodeEdgeCaseAndErrorTests : IDisposable
|
||||
return await LanguageAnalyzerTestHarness.RunToJsonAsync(
|
||||
_tempDir,
|
||||
analyzers,
|
||||
TestContext.Current.CancellationToken);
|
||||
CancellationToken.None);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -680,6 +680,6 @@ public sealed class NodeEntrypointDetectionTests : IDisposable
|
||||
return await LanguageAnalyzerTestHarness.RunToJsonAsync(
|
||||
_tempDir,
|
||||
analyzers,
|
||||
TestContext.Current.CancellationToken);
|
||||
CancellationToken.None);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task WorkspaceFixtureProducesDeterministicOutputAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "workspaces");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -28,7 +28,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task VersionTargetsAreCapturedAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "version-targets");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -47,7 +47,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task TarballPackageIsParsedAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "version-targets");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -66,7 +66,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task YarnPnpCachePackagesAreParsedAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "yarn-pnp");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -85,7 +85,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task YarnPnpFlagIsEmittedAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "yarn-pnp");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -104,7 +104,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task EntrypointsAreCapturedAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "entrypoints");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -123,7 +123,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ShebangEntrypointsAreCapturedAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "shebang");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -142,7 +142,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task Phase22BundleNativeWasmObservationAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "phase22");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -161,7 +161,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ContainerLayersAreScannedAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "container-layers");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -177,7 +177,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task DynamicImportsEmitEvidenceAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "imports-dynamic");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -193,7 +193,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task LockOnlyPackageLockEmitsDeclaredOnlyComponentsAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "lock-only-package-lock");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -209,7 +209,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task LockOnlyYarnBerryEmitsDeclaredOnlyComponentsAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "lock-only-yarn-berry");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -225,7 +225,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task LockOnlyPnpmEmitsDeclaredOnlyComponentsAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "lock-only-pnpm");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -241,7 +241,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task PnpmVirtualStoreIsParsedAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "pnpm-store");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -257,7 +257,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task RuntimeEvidenceIsIngestedAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "runtime-evidence");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -273,7 +273,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task DockerfileNodeOptionsWarningIsEmittedAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "container-env");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -289,7 +289,7 @@ public sealed class NodeLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task PackageJsonDeclaredOnlyDependenciesUseExplicitKeyAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "node", "declared-only-package-json");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
|
||||
@@ -838,6 +838,6 @@ public sealed class NodePackageCollectorTraversalTests : IDisposable
|
||||
return await LanguageAnalyzerTestHarness.RunToJsonAsync(
|
||||
_tempDir,
|
||||
analyzers,
|
||||
TestContext.Current.CancellationToken);
|
||||
CancellationToken.None);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<UseXunitV3>true</UseXunitV3>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<LangVersion>preview</LangVersion>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<IsPackable>false</IsPackable>
|
||||
<UseConcelierTestInfra>false</UseConcelierTestInfra>
|
||||
<IsTestProject>true</IsTestProject>
|
||||
<ConcelierTestingPath></ConcelierTestingPath>
|
||||
<ConcelierSharedTestsPath></ConcelierSharedTestsPath>
|
||||
</PropertyGroup>
|
||||
@@ -25,10 +27,8 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
|
||||
<PackageReference Include="xunit.v3" Version="3.0.0" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.3" />
|
||||
</ItemGroup>
|
||||
<PackageReference Include="xunit.v3" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\StellaOps.Scanner.Analyzers.Lang.Tests\StellaOps.Scanner.Analyzers.Lang.Tests.csproj" />
|
||||
@@ -51,4 +51,4 @@
|
||||
<Compile Remove="$(MSBuildThisFileDirectory)..\..\..\..\tests\shared\OpenSslLegacyShim.cs" />
|
||||
<Compile Remove="$(MSBuildThisFileDirectory)..\..\..\..\tests\shared\OpenSslAutoInit.cs" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -11,7 +11,7 @@ public sealed class PhpLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ComposerLockPackagesAreEmittedAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "php", "basic");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -25,7 +25,7 @@ public sealed class PhpLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task LaravelExtendedFixtureAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "php", "laravel-extended");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -39,7 +39,7 @@ public sealed class PhpLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task SymfonyFixtureAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "php", "symfony");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -53,7 +53,7 @@ public sealed class PhpLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task WordPressFixtureAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "php", "wordpress");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -67,7 +67,7 @@ public sealed class PhpLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task LegacyPhpFixtureAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "php", "legacy");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -81,7 +81,7 @@ public sealed class PhpLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task PharFixtureAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "php", "phar");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -95,7 +95,7 @@ public sealed class PhpLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ContainerFixtureAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "php", "container");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<UseXunitV3>true</UseXunitV3>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<LangVersion>preview</LangVersion>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<IsPackable>false</IsPackable>
|
||||
<IsTestProject>true</IsTestProject>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@@ -22,10 +25,8 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
|
||||
<PackageReference Include="xunit.v3" Version="3.0.0" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.3" />
|
||||
</ItemGroup>
|
||||
<PackageReference Include="xunit.v3" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="../../__Libraries/StellaOps.Scanner.Analyzers.Lang/StellaOps.Scanner.Analyzers.Lang.csproj" />
|
||||
@@ -41,4 +42,4 @@
|
||||
<ItemGroup>
|
||||
<Using Include="Xunit" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -8,7 +8,7 @@ public sealed class PythonCapabilityDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_SubprocessImport_FindsProcessExecution()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -41,7 +41,7 @@ public sealed class PythonCapabilityDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_EvalUsage_FindsCodeExecution()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -75,7 +75,7 @@ public sealed class PythonCapabilityDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_CtypesImport_FindsNativeCodeExecution()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -108,7 +108,7 @@ public sealed class PythonCapabilityDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_MultipleCapabilities_FindsAll()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -146,7 +146,7 @@ public sealed class PythonCapabilityDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_EnvironmentAccess_FindsEnvironmentCapability()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
|
||||
@@ -9,7 +9,7 @@ public sealed class PythonEntrypointDiscoveryTests
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_FindsPackageMain()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -41,7 +41,7 @@ public sealed class PythonEntrypointDiscoveryTests
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_FindsConsoleScripts()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -90,7 +90,7 @@ mygui = mypackage.gui:start
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_FindsZipappMain()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -124,7 +124,7 @@ mygui = mypackage.gui:start
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_FindsDjangoManage()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -153,7 +153,7 @@ mygui = mypackage.gui:start
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_FindsDjangoWsgiAsgi()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -199,7 +199,7 @@ mygui = mypackage.gui:start
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_FindsLambdaHandler()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -228,7 +228,7 @@ mygui = mypackage.gui:start
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_FindsStandaloneScriptsWithMainGuard()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -258,7 +258,7 @@ mygui = mypackage.gui:start
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_FindsClickCliApp()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -293,7 +293,7 @@ if __name__ == '__main__':
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_FindsProcfileEntrypoints()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -326,7 +326,7 @@ if __name__ == '__main__':
|
||||
[Fact]
|
||||
public async Task PythonEntrypointAnalysis_ReturnsOrganizedResults()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
|
||||
@@ -25,7 +25,7 @@ public sealed class PythonFixtureTests
|
||||
[Fact]
|
||||
public async Task NamespacePackage_DetectsMultipleSubpackages()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = Path.Combine(FixturesPath, "namespace-pkg");
|
||||
|
||||
if (!Directory.Exists(fixturePath))
|
||||
@@ -57,7 +57,7 @@ public sealed class PythonFixtureTests
|
||||
[Fact]
|
||||
public async Task SimpleVenv_DetectsPackageWithEntrypoints()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = Path.Combine(FixturesPath, "simple-venv");
|
||||
|
||||
if (!Directory.Exists(fixturePath))
|
||||
@@ -88,7 +88,7 @@ public sealed class PythonFixtureTests
|
||||
[Fact]
|
||||
public async Task LayeredEditable_DetectsEditableInstall()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = Path.Combine(FixturesPath, "layered-editable");
|
||||
|
||||
if (!Directory.Exists(fixturePath))
|
||||
@@ -117,7 +117,7 @@ public sealed class PythonFixtureTests
|
||||
[Fact]
|
||||
public async Task Container_DetectsPackagesAcrossLayers()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = Path.Combine(FixturesPath, "container");
|
||||
|
||||
if (!Directory.Exists(fixturePath))
|
||||
@@ -170,7 +170,7 @@ public sealed class PythonFixtureTests
|
||||
[Fact]
|
||||
public async Task FrameworkDetection_DetectsFlask()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = Path.Combine(FixturesPath, "container", "layer2", "app");
|
||||
|
||||
if (!Directory.Exists(fixturePath))
|
||||
@@ -194,7 +194,7 @@ public sealed class PythonFixtureTests
|
||||
[Fact]
|
||||
public async Task CapabilityDetection_DetectsNetworkAccess()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = Path.Combine(FixturesPath, "lambda-handler", "app");
|
||||
|
||||
if (!Directory.Exists(fixturePath))
|
||||
@@ -219,7 +219,7 @@ public sealed class PythonFixtureTests
|
||||
[Fact]
|
||||
public async Task ObservationBuilder_ProducesValidDocument()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = Path.Combine(FixturesPath, "simple-venv");
|
||||
|
||||
if (!Directory.Exists(fixturePath))
|
||||
|
||||
@@ -9,7 +9,7 @@ public sealed class PythonFrameworkDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_DjangoProject_FindsDjangoHints()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -66,7 +66,7 @@ public sealed class PythonFrameworkDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_FlaskApp_FindsFlaskHints()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -106,7 +106,7 @@ public sealed class PythonFrameworkDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_FastAPIApp_FindsFastAPIHints()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -147,7 +147,7 @@ public sealed class PythonFrameworkDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_CeleryApp_FindsCeleryHints()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -185,7 +185,7 @@ public sealed class PythonFrameworkDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_AwsLambdaHandler_FindsLambdaHint()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -221,7 +221,7 @@ public sealed class PythonFrameworkDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_ClickCli_FindsClickHints()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -261,7 +261,7 @@ public sealed class PythonFrameworkDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_TyperCli_FindsTyperHints()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -300,7 +300,7 @@ public sealed class PythonFrameworkDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_GunicornConfig_FindsGunicornHint()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -332,7 +332,7 @@ public sealed class PythonFrameworkDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_LoggingConfig_FindsLoggingHint()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -372,7 +372,7 @@ public sealed class PythonFrameworkDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_JupyterNotebook_FindsJupyterHint()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -408,7 +408,7 @@ public sealed class PythonFrameworkDetectorTests
|
||||
[Fact]
|
||||
public async Task DetectAsync_StreamlitApp_FindsStreamlitHint()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -513,7 +513,7 @@ public sealed class PythonProjectConfigParserTests
|
||||
[Fact]
|
||||
public async Task ParsePyprojectAsync_WithOptionalDependencies_ExtractsExtras()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -564,7 +564,7 @@ public sealed class PythonProjectConfigParserTests
|
||||
[Fact]
|
||||
public async Task ParsePyprojectAsync_PoetryExtras_ExtractsExtras()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
|
||||
@@ -8,7 +8,7 @@ public sealed class PythonImportGraphTests
|
||||
[Fact]
|
||||
public async Task BuildAsync_DiscoversModules()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -40,7 +40,7 @@ public sealed class PythonImportGraphTests
|
||||
[Fact]
|
||||
public async Task BuildAsync_ExtractsImports()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -83,7 +83,7 @@ from . import other
|
||||
[Fact]
|
||||
public async Task BuildAsync_BuildsEdges()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -133,7 +133,7 @@ from . import other
|
||||
[Fact]
|
||||
public async Task BuildAsync_ResolvesRelativeImports()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -180,7 +180,7 @@ from . import other
|
||||
[Fact]
|
||||
public async Task BuildAsync_DetectsCycles()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -223,7 +223,7 @@ from . import other
|
||||
[Fact]
|
||||
public async Task BuildAsync_TopologicalOrder_NoCycles()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -272,7 +272,7 @@ from . import other
|
||||
[Fact]
|
||||
public async Task BuildAsync_TopologicalOrder_WithCycles_ReturnsNull()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -306,7 +306,7 @@ from . import other
|
||||
[Fact]
|
||||
public async Task GetDependencies_ReturnsDirectDependencies()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -346,7 +346,7 @@ from . import other
|
||||
[Fact]
|
||||
public async Task GetDependents_ReturnsModulesThatImportThis()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -386,7 +386,7 @@ from . import other
|
||||
[Fact]
|
||||
public async Task PythonImportAnalysis_CategoriesImports()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -438,7 +438,7 @@ mod = importlib.import_module('dynamic')
|
||||
[Fact]
|
||||
public async Task PythonImportAnalysis_ToMetadata_GeneratesExpectedKeys()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -468,7 +468,7 @@ mod = importlib.import_module('dynamic')
|
||||
[Fact]
|
||||
public async Task PythonImportAnalysis_GetTransitiveDependencies_ReturnsAllDeps()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
|
||||
@@ -140,7 +140,7 @@ public sealed class PythonObservationSerializerTests
|
||||
[Fact]
|
||||
public async Task SerializeAsync_WritesToStream()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var document = new PythonObservationBuilder()
|
||||
.AddWarning("PY001", "Test")
|
||||
.Build();
|
||||
@@ -159,7 +159,7 @@ public sealed class PythonObservationSerializerTests
|
||||
[Fact]
|
||||
public async Task DeserializeAsync_ReadsFromStream()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var json = """
|
||||
{
|
||||
"schema": "python-aoc-v1",
|
||||
|
||||
@@ -8,7 +8,7 @@ public sealed class PythonPackageDiscoveryTests
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_DistInfo_FindsPackages()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -117,7 +117,7 @@ public sealed class PythonPackageDiscoveryTests
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_EggLink_FindsEditableInstall()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
var projectPath = Path.Combine(tempPath, "myproject");
|
||||
try
|
||||
@@ -178,7 +178,7 @@ public sealed class PythonPackageDiscoveryTests
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_Poetry_FindsPoetryProject()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -262,7 +262,7 @@ public sealed class PythonPackageDiscoveryTests
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_BuildsDependencyGraph()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -319,7 +319,7 @@ public sealed class PythonPackageDiscoveryTests
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_EggInfo_FindsLegacySetuptoolsPackages()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -392,7 +392,7 @@ public sealed class PythonPackageDiscoveryTests
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_EggInfo_WithInstalledFiles_HasDefinitiveConfidence()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -441,7 +441,7 @@ public sealed class PythonPackageDiscoveryTests
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_EggInfo_ParsesRequiresTxtExtras()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -497,7 +497,7 @@ public sealed class PythonPackageDiscoveryTests
|
||||
[Fact]
|
||||
public async Task DiscoverAsync_EggInfo_PrefersDistInfo_WhenBothExist()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
|
||||
@@ -13,7 +13,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task SimpleVenvFixtureProducesDeterministicOutputAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "python", "simple-venv");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -38,7 +38,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task PipCacheFixtureProducesDeterministicOutputAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "python", "pip-cache");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -63,7 +63,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task LayeredEditableFixtureMergesAcrossLayersAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "python", "layered-editable");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -88,7 +88,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task CondaEnvFixtureProducesDeterministicOutputAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "python", "conda-env");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -107,7 +107,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task RequirementsIncludesEditableFixtureProducesDeterministicOutputAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "python", "requirements-includes-editable");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -126,7 +126,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task PipfileLockDefaultDevelopFixtureProducesDeterministicOutputAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "python", "pipfile-lock-default-develop");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -145,7 +145,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task WheelWorkspaceFixtureProducesDeterministicOutputAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "python", "wheel-workspace");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -170,7 +170,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ZipappEmbeddedRequirementsFixtureProducesDeterministicOutputAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "python", "zipapp-embedded-requirements");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -192,7 +192,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ContainerWhiteoutsFixtureProducesDeterministicOutputAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "python", "container-whiteouts");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -211,7 +211,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task VendoredDirectoryFixtureProducesDeterministicOutputAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "python", "vendored-directory");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -230,7 +230,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task LockfileCollectorEmitsDeclaredOnlyComponentsAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -271,7 +271,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task EditableRequirementsUseExplicitKeyWithoutHostPathLeakAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = CreateTemporaryWorkspace();
|
||||
|
||||
try
|
||||
@@ -332,7 +332,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task WheelArchiveDistInfo_IsVerifiedFromRecordAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -476,7 +476,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task DetectsSitecustomizeStartupHooksAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -515,7 +515,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task DetectsPthFilesWithImportDirectivesAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -554,7 +554,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task DetectsOciLayerSitePackagesAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -618,7 +618,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task EggInfoPackagesAreDetectedAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "python", "egg-info");
|
||||
|
||||
var analyzers = new ILanguageAnalyzer[]
|
||||
@@ -645,7 +645,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task DetectsPythonEnvironmentVariablesAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -682,7 +682,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task DetectsPyvenvConfigAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -798,7 +798,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task RequirementsWithIncludesAreFollowedAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -841,7 +841,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task PipfileLockDevelopSectionIsParsedAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -890,7 +890,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task RequirementsDevTxtGetsScopeDevAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -930,7 +930,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task Pep508DirectReferenceIsParsedAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -966,7 +966,7 @@ public sealed class PythonLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task RequirementsCycleIsDetectedAndHandledAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
|
||||
@@ -8,7 +8,7 @@ public sealed class PythonModuleResolverTests
|
||||
[Fact]
|
||||
public async Task Resolve_BuiltinModule_ReturnsBuiltin()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -36,7 +36,7 @@ public sealed class PythonModuleResolverTests
|
||||
[Fact]
|
||||
public async Task Resolve_SourceModule_FindsModule()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -64,7 +64,7 @@ public sealed class PythonModuleResolverTests
|
||||
[Fact]
|
||||
public async Task Resolve_Package_FindsPackage()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -95,7 +95,7 @@ public sealed class PythonModuleResolverTests
|
||||
[Fact]
|
||||
public async Task Resolve_SubModule_FindsSubModule()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -126,7 +126,7 @@ public sealed class PythonModuleResolverTests
|
||||
[Fact]
|
||||
public async Task Resolve_NamespacePackage_FindsNamespacePackage()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -159,7 +159,7 @@ public sealed class PythonModuleResolverTests
|
||||
[Fact]
|
||||
public async Task Resolve_NotFound_ReturnsNotFound()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -186,7 +186,7 @@ public sealed class PythonModuleResolverTests
|
||||
[Fact]
|
||||
public async Task ResolveRelative_Level1_ResolvesFromPackage()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -218,7 +218,7 @@ public sealed class PythonModuleResolverTests
|
||||
[Fact]
|
||||
public async Task ResolveRelative_Level2_ResolvesFromParentPackage()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -254,7 +254,7 @@ public sealed class PythonModuleResolverTests
|
||||
[Fact]
|
||||
public async Task ProcessPthFiles_AddsPaths()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -359,7 +359,7 @@ public sealed class PythonModuleResolverTests
|
||||
[Fact]
|
||||
public async Task Resolver_CachesResults()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<UseXunitV3>true</UseXunitV3>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<LangVersion>preview</LangVersion>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<IsPackable>false</IsPackable>
|
||||
<IsTestProject>true</IsTestProject>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@@ -25,10 +28,8 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
|
||||
<PackageReference Include="xunit.v3" Version="3.0.0" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.3" />
|
||||
</ItemGroup>
|
||||
<PackageReference Include="xunit.v3" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\StellaOps.Scanner.Analyzers.Lang.Tests\StellaOps.Scanner.Analyzers.Lang.Tests.csproj" />
|
||||
|
||||
@@ -16,7 +16,7 @@ public class VendoredPackageDetectorTests
|
||||
|
||||
var package = CreatePackage("mypackage", "1.0.0", "/site-packages");
|
||||
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, TestContext.Current.CancellationToken);
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, CancellationToken.None);
|
||||
|
||||
Assert.False(result.IsVendored);
|
||||
Assert.Equal(VendoringConfidence.None, result.Confidence);
|
||||
@@ -34,7 +34,7 @@ public class VendoredPackageDetectorTests
|
||||
|
||||
var package = CreatePackage("mypackage", "1.0.0", "/site-packages");
|
||||
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, TestContext.Current.CancellationToken);
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, CancellationToken.None);
|
||||
|
||||
Assert.True(result.IsVendored);
|
||||
Assert.True(result.Confidence >= VendoringConfidence.Low);
|
||||
@@ -53,7 +53,7 @@ public class VendoredPackageDetectorTests
|
||||
|
||||
var package = CreatePackage("pip", "23.0.0", "/site-packages");
|
||||
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, TestContext.Current.CancellationToken);
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, CancellationToken.None);
|
||||
|
||||
Assert.True(result.IsVendored);
|
||||
Assert.True(result.EmbeddedCount >= 3);
|
||||
@@ -76,7 +76,7 @@ public class VendoredPackageDetectorTests
|
||||
|
||||
var package = CreatePackage("pip", "23.0.0", "/site-packages");
|
||||
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, TestContext.Current.CancellationToken);
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, CancellationToken.None);
|
||||
|
||||
Assert.True(result.IsVendored);
|
||||
Assert.Contains("known-vendored-package", result.Markers);
|
||||
@@ -92,7 +92,7 @@ public class VendoredPackageDetectorTests
|
||||
|
||||
var package = CreatePackage("mypackage", "1.0.0", "/site-packages");
|
||||
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, TestContext.Current.CancellationToken);
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, CancellationToken.None);
|
||||
|
||||
Assert.True(result.IsVendored);
|
||||
Assert.Contains(result.Markers, m => m.Contains("third_party"));
|
||||
@@ -108,7 +108,7 @@ public class VendoredPackageDetectorTests
|
||||
|
||||
var package = CreatePackage("mypackage", "1.0.0", "/site-packages");
|
||||
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, TestContext.Current.CancellationToken);
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, CancellationToken.None);
|
||||
|
||||
Assert.True(result.IsVendored);
|
||||
Assert.Contains(result.Markers, m => m.Contains("extern"));
|
||||
@@ -126,7 +126,7 @@ public class VendoredPackageDetectorTests
|
||||
|
||||
var package = CreatePackage("mypackage", "1.0.0", "/site-packages");
|
||||
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, TestContext.Current.CancellationToken);
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, CancellationToken.None);
|
||||
|
||||
var embeddedNames = result.EmbeddedPackages.Select(p => p.Name).ToList();
|
||||
Assert.DoesNotContain("__pycache__", embeddedNames);
|
||||
@@ -143,7 +143,7 @@ public class VendoredPackageDetectorTests
|
||||
|
||||
var package = CreatePackage("pip", "23.0.0", "/site-packages");
|
||||
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, TestContext.Current.CancellationToken);
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, CancellationToken.None);
|
||||
|
||||
var urllib3 = result.EmbeddedPackages.FirstOrDefault(p => p.Name == "urllib3");
|
||||
Assert.NotNull(urllib3);
|
||||
@@ -160,7 +160,7 @@ public class VendoredPackageDetectorTests
|
||||
|
||||
var package = CreatePackage("pip", "23.0.0", "/site-packages");
|
||||
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, TestContext.Current.CancellationToken);
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, CancellationToken.None);
|
||||
|
||||
var urllib3 = result.EmbeddedPackages.FirstOrDefault(p => p.Name == "urllib3");
|
||||
Assert.NotNull(urllib3);
|
||||
@@ -182,7 +182,7 @@ public class VendoredPackageDetectorTests
|
||||
|
||||
var package = CreatePackageWithRecords("mypackage", "1.0.0", "/site-packages", recordFiles);
|
||||
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, TestContext.Current.CancellationToken);
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, CancellationToken.None);
|
||||
|
||||
Assert.True(result.IsVendored);
|
||||
Assert.Contains("record-vendor-entries", result.Markers);
|
||||
@@ -200,7 +200,7 @@ public class VendoredPackageDetectorTests
|
||||
|
||||
var package = CreatePackage("mypackage", "1.0.0", "/site-packages");
|
||||
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, TestContext.Current.CancellationToken);
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, CancellationToken.None);
|
||||
|
||||
Assert.True(result.IsVendored);
|
||||
Assert.True(result.VendorPaths.Length >= 2);
|
||||
@@ -216,7 +216,7 @@ public class VendoredPackageDetectorTests
|
||||
|
||||
var package = CreatePackage("mypackage", "1.0.0", "/site-packages");
|
||||
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, TestContext.Current.CancellationToken);
|
||||
var result = await VendoredPackageDetector.AnalyzeAsync(vfs, package, CancellationToken.None);
|
||||
|
||||
Assert.True(result.IsVendored);
|
||||
var embeddedNames = result.EmbeddedPackages.Select(p => p.Name).ToList();
|
||||
|
||||
@@ -7,7 +7,7 @@ public sealed class PythonInputNormalizerTests
|
||||
[Fact]
|
||||
public async Task AnalyzeAsync_DetectsVirtualenvLayout()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -40,7 +40,7 @@ version = 3.11.4
|
||||
[Fact]
|
||||
public async Task AnalyzeAsync_DetectsPoetryLayout()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -66,7 +66,7 @@ version = ""2.28.0""
|
||||
[Fact]
|
||||
public async Task AnalyzeAsync_DetectsPipenvLayout()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -88,7 +88,7 @@ version = ""2.28.0""
|
||||
[Fact]
|
||||
public async Task AnalyzeAsync_DetectsCondaLayout()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -110,7 +110,7 @@ version = ""2.28.0""
|
||||
[Fact]
|
||||
public async Task AnalyzeAsync_DetectsLambdaLayout()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -132,7 +132,7 @@ version = ""2.28.0""
|
||||
[Fact]
|
||||
public async Task AnalyzeAsync_ExtractsVersionFromPyprojectToml()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -161,7 +161,7 @@ python = ""^3.11""
|
||||
[Fact]
|
||||
public async Task AnalyzeAsync_ExtractsVersionFromRuntimeTxt()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -185,7 +185,7 @@ python = ""^3.11""
|
||||
[Fact]
|
||||
public async Task AnalyzeAsync_ExtractsVersionFromDockerfile()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -212,7 +212,7 @@ COPY . .
|
||||
[Fact]
|
||||
public async Task AnalyzeAsync_ExtractsVersionFromSetupPy()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -243,7 +243,7 @@ setup(
|
||||
[Fact]
|
||||
public async Task AnalyzeAsync_DetectsSitePackagesInMultipleLocations()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -272,7 +272,7 @@ setup(
|
||||
[Fact]
|
||||
public async Task AnalyzeAsync_DetectsWheelsInDistDirectory()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -299,7 +299,7 @@ setup(
|
||||
[Fact]
|
||||
public async Task AnalyzeAsync_DetectsZipapps()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -323,7 +323,7 @@ setup(
|
||||
[Fact]
|
||||
public async Task AnalyzeAsync_PrimaryVersionTargetHasHighestConfidence()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -353,7 +353,7 @@ requires-python = "">=3.10""", cancellationToken);
|
||||
[Fact]
|
||||
public async Task BuildVirtualFileSystem_IncludesAllDetectedSources()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
@@ -394,7 +394,7 @@ requires-python = "">=3.10""", cancellationToken);
|
||||
[Fact]
|
||||
public async Task PythonProjectAnalysis_AnalyzeAsync_ReturnsCompleteAnalysis()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var tempPath = CreateTemporaryWorkspace();
|
||||
try
|
||||
{
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.Text.Json;
|
||||
using System.Text.Json;
|
||||
using StellaOps.Scanner.Analyzers.Lang;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Ruby;
|
||||
using StellaOps.Scanner.Analyzers.Lang.Tests.Harness;
|
||||
@@ -23,7 +23,7 @@ public sealed class RubyLanguageAnalyzerTests
|
||||
fixturePath,
|
||||
goldenPath,
|
||||
analyzers,
|
||||
TestContext.Current.CancellationToken);
|
||||
CancellationToken.None);
|
||||
}
|
||||
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
@@ -41,7 +41,7 @@ public sealed class RubyLanguageAnalyzerTests
|
||||
services: null,
|
||||
analysisStore: store);
|
||||
|
||||
var result = await engine.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
var result = await engine.AnalyzeAsync(context, CancellationToken.None);
|
||||
var snapshots = result.ToSnapshots();
|
||||
|
||||
var summary = Assert.Single(snapshots, snapshot => snapshot.Type == "ruby-observation");
|
||||
@@ -89,7 +89,7 @@ public sealed class RubyLanguageAnalyzerTests
|
||||
fixturePath,
|
||||
goldenPath,
|
||||
analyzers,
|
||||
TestContext.Current.CancellationToken);
|
||||
CancellationToken.None);
|
||||
}
|
||||
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
@@ -104,7 +104,7 @@ public sealed class RubyLanguageAnalyzerTests
|
||||
fixturePath,
|
||||
goldenPath,
|
||||
analyzers,
|
||||
TestContext.Current.CancellationToken);
|
||||
CancellationToken.None);
|
||||
}
|
||||
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
@@ -119,7 +119,7 @@ public sealed class RubyLanguageAnalyzerTests
|
||||
fixturePath,
|
||||
goldenPath,
|
||||
analyzers,
|
||||
TestContext.Current.CancellationToken);
|
||||
CancellationToken.None);
|
||||
}
|
||||
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
@@ -134,7 +134,7 @@ public sealed class RubyLanguageAnalyzerTests
|
||||
fixturePath,
|
||||
goldenPath,
|
||||
analyzers,
|
||||
TestContext.Current.CancellationToken);
|
||||
CancellationToken.None);
|
||||
}
|
||||
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
@@ -149,7 +149,7 @@ public sealed class RubyLanguageAnalyzerTests
|
||||
fixturePath,
|
||||
goldenPath,
|
||||
analyzers,
|
||||
TestContext.Current.CancellationToken);
|
||||
CancellationToken.None);
|
||||
}
|
||||
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
@@ -167,7 +167,7 @@ public sealed class RubyLanguageAnalyzerTests
|
||||
services: null,
|
||||
analysisStore: store);
|
||||
|
||||
var result = await engine.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
var result = await engine.AnalyzeAsync(context, CancellationToken.None);
|
||||
var snapshots = result.ToSnapshots();
|
||||
|
||||
var summary = Assert.Single(snapshots, snapshot => snapshot.Type == "ruby-observation");
|
||||
@@ -183,7 +183,6 @@ public sealed class RubyLanguageAnalyzerTests
|
||||
|
||||
Assert.True(store.TryGet(ScanAnalysisKeys.RubyObservationPayload, out AnalyzerObservationPayload payload));
|
||||
using var document = JsonDocument.Parse(payload.Content.ToArray());
|
||||
using StellaOps.TestKit;
|
||||
var root = document.RootElement;
|
||||
var environment = root.GetProperty("environment");
|
||||
|
||||
@@ -208,7 +207,7 @@ using StellaOps.TestKit;
|
||||
fixturePath,
|
||||
goldenPath,
|
||||
analyzers,
|
||||
TestContext.Current.CancellationToken);
|
||||
CancellationToken.None);
|
||||
}
|
||||
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
@@ -226,7 +225,7 @@ using StellaOps.TestKit;
|
||||
services: null,
|
||||
analysisStore: store);
|
||||
|
||||
var result = await engine.AnalyzeAsync(context, TestContext.Current.CancellationToken);
|
||||
var result = await engine.AnalyzeAsync(context, CancellationToken.None);
|
||||
var snapshots = result.ToSnapshots();
|
||||
|
||||
var summary = Assert.Single(snapshots, snapshot => snapshot.Type == "ruby-observation");
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<UseXunitV3>true</UseXunitV3>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<LangVersion>preview</LangVersion>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<IsPackable>false</IsPackable>
|
||||
<IsTestProject>true</IsTestProject>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@@ -24,11 +27,9 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FluentAssertions" Version="8.4.0" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
|
||||
<PackageReference Include="xunit.v3" Version="3.0.0" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.3" />
|
||||
</ItemGroup>
|
||||
<PackageReference Include="FluentAssertions" />
|
||||
<PackageReference Include="xunit.v3" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\StellaOps.Scanner.Analyzers.Lang.Tests\StellaOps.Scanner.Analyzers.Lang.Tests.csproj" />
|
||||
@@ -45,4 +46,4 @@
|
||||
<ItemGroup>
|
||||
<Using Include="Xunit" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -45,7 +45,7 @@ public sealed class LanguageAnalyzerContextTests
|
||||
var context = new LanguageAnalyzerContext(workspace.Path, TimeProvider.System, services: serviceProvider);
|
||||
|
||||
Assert.True(context.Secrets.IsAvailable);
|
||||
using var retrieved = await context.Secrets.GetAsync("registry", "default", TestContext.Current.CancellationToken);
|
||||
using var retrieved = await context.Secrets.GetAsync("registry", "default", CancellationToken.None);
|
||||
Assert.Same(handle, retrieved);
|
||||
Assert.Equal("test", retrieved.Metadata["source"]);
|
||||
Assert.Equal("token", Encoding.UTF8.GetString(retrieved.AsBytes().Span));
|
||||
@@ -58,7 +58,7 @@ public sealed class LanguageAnalyzerContextTests
|
||||
var context = new LanguageAnalyzerContext(workspace.Path, TimeProvider.System);
|
||||
|
||||
Assert.False(context.Secrets.IsAvailable);
|
||||
var secret = await context.Secrets.TryGetAsync("registry", cancellationToken: TestContext.Current.CancellationToken);
|
||||
var secret = await context.Secrets.TryGetAsync("registry", cancellationToken: CancellationToken.None);
|
||||
Assert.Null(secret);
|
||||
}
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ public sealed class LanguageAnalyzerHarnessTests
|
||||
{
|
||||
var fixturePath = TestPaths.ResolveFixture("determinism", "basic", "input");
|
||||
var goldenPath = TestPaths.ResolveFixture("determinism", "basic", "expected.json");
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
|
||||
var analyzers = new ILanguageAnalyzer[]
|
||||
{
|
||||
|
||||
@@ -12,7 +12,7 @@ public sealed class DotNetEntrypointResolverTests
|
||||
[Fact]
|
||||
public async Task SimpleFixtureResolvesSingleEntrypointAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "dotnet", "simple");
|
||||
|
||||
var context = new LanguageAnalyzerContext(fixturePath, TimeProvider.System);
|
||||
@@ -33,7 +33,7 @@ public sealed class DotNetEntrypointResolverTests
|
||||
[Fact]
|
||||
public async Task DeterministicOrderingIsStableAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "dotnet", "multi");
|
||||
|
||||
var context = new LanguageAnalyzerContext(fixturePath, TimeProvider.System);
|
||||
|
||||
@@ -15,7 +15,7 @@ public sealed class DotNetLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task SimpleFixtureProducesDeterministicOutputAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "dotnet", "simple");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -34,7 +34,7 @@ public sealed class DotNetLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task SignedFixtureCapturesAssemblyMetadataAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "dotnet", "signed");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -58,7 +58,7 @@ public sealed class DotNetLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task SelfContainedFixtureHandlesNativeAssetsAndUsageAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "dotnet", "selfcontained");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -84,7 +84,7 @@ public sealed class DotNetLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task AnalyzerIsThreadSafeUnderConcurrencyAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "dotnet", "selfcontained");
|
||||
|
||||
var analyzers = new ILanguageAnalyzer[]
|
||||
@@ -107,7 +107,7 @@ public sealed class DotNetLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task ConfigEnablesIlMetadataEdgesAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var sourceFixture = TestPaths.ResolveFixture("lang", "dotnet", "simple");
|
||||
var tempRoot = TestPaths.CreateTemporaryDirectory();
|
||||
|
||||
@@ -169,7 +169,7 @@ public sealed class DotNetLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task MultiFixtureMergesRuntimeMetadataAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "dotnet", "multi");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -217,7 +217,7 @@ public sealed class DotNetLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task SourceTreeOnlyEmitsDeclaredPackagesAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "dotnet", "source-tree-only");
|
||||
|
||||
var analyzers = new ILanguageAnalyzer[]
|
||||
@@ -253,7 +253,7 @@ public sealed class DotNetLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task LockfileOnlyEmitsDeclaredPackagesAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "dotnet", "lockfile-only");
|
||||
|
||||
var analyzers = new ILanguageAnalyzer[]
|
||||
@@ -291,7 +291,7 @@ public sealed class DotNetLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task PackagesConfigOnlyEmitsDeclaredPackagesAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "dotnet", "packages-config-only");
|
||||
|
||||
var analyzers = new ILanguageAnalyzer[]
|
||||
|
||||
@@ -1,12 +1,9 @@
|
||||
<Project>
|
||||
|
||||
<PropertyGroup>
|
||||
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageVersion Include="Serilog" Version="3.1.1" />
|
||||
<PackageVersion Include="Newtonsoft.Json" Version="13.0.4" />
|
||||
<PackageVersion Include="Serilog" Version="4.3.0" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -1,9 +1,9 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<OutputType>Exe</OutputType>
|
||||
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
|
||||
<ManagePackageVersionsCentrally>false</ManagePackageVersionsCentrally>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -18,7 +18,7 @@ public sealed class RubyLanguageAnalyzerTests
|
||||
fixture,
|
||||
golden,
|
||||
new ILanguageAnalyzer[] { new RubyLanguageAnalyzer() },
|
||||
cancellationToken: TestContext.Current.CancellationToken,
|
||||
cancellationToken: CancellationToken.None,
|
||||
usageHints: usageHints);
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ public sealed class RubyLanguageAnalyzerTests
|
||||
fixture,
|
||||
golden,
|
||||
new ILanguageAnalyzer[] { new RubyLanguageAnalyzer() },
|
||||
cancellationToken: TestContext.Current.CancellationToken);
|
||||
cancellationToken: CancellationToken.None);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -46,7 +46,7 @@ public sealed class RubyLanguageAnalyzerTests
|
||||
fixture,
|
||||
golden,
|
||||
new ILanguageAnalyzer[] { new RubyLanguageAnalyzer() },
|
||||
cancellationToken: TestContext.Current.CancellationToken,
|
||||
cancellationToken: CancellationToken.None,
|
||||
usageHints: usageHints);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ public sealed class RustHeuristicCoverageComparisonTests
|
||||
[Fact]
|
||||
public async Task HeuristicCoverageExceedsCompetitorBaselineAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "rust", "heuristics");
|
||||
var baselinePath = Path.Combine(fixturePath, "competitor-baseline.json");
|
||||
RustFixtureBinaries.EnsureHeuristicBinary(fixturePath);
|
||||
|
||||
@@ -13,7 +13,7 @@ public sealed class RustLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task SimpleFixtureProducesDeterministicOutputAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "rust", "simple");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
|
||||
@@ -38,7 +38,7 @@ public sealed class RustLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task AnalyzerIsThreadSafeUnderConcurrencyAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "rust", "simple");
|
||||
|
||||
var analyzers = new ILanguageAnalyzer[]
|
||||
@@ -61,7 +61,7 @@ public sealed class RustLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task HeuristicFixtureProducesExpectedOutputAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "rust", "heuristics");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
RustFixtureBinaries.EnsureHeuristicBinary(fixturePath);
|
||||
@@ -86,7 +86,7 @@ public sealed class RustLanguageAnalyzerTests
|
||||
[Fact]
|
||||
public async Task FallbackFixtureProducesExpectedOutputAsync()
|
||||
{
|
||||
var cancellationToken = TestContext.Current.CancellationToken;
|
||||
var cancellationToken = CancellationToken.None;
|
||||
var fixturePath = TestPaths.ResolveFixture("lang", "rust", "fallback");
|
||||
var goldenPath = Path.Combine(fixturePath, "expected.json");
|
||||
RustFixtureBinaries.EnsureOpaqueBinary(fixturePath);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<UseXunitV3>true</UseXunitV3>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<LangVersion>preview</LangVersion>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
@@ -8,7 +9,6 @@
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<IsPackable>false</IsPackable>
|
||||
<OutputType>Exe</OutputType>
|
||||
<UseConcelierTestInfra>false</UseConcelierTestInfra>
|
||||
<ConcelierTestingPath></ConcelierTestingPath>
|
||||
<ConcelierSharedTestsPath></ConcelierSharedTestsPath>
|
||||
</PropertyGroup>
|
||||
@@ -26,13 +26,11 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
|
||||
<PackageReference Include="xunit.v3" Version="3.0.0" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.3" />
|
||||
<!-- Force newer versions to override transitive dependencies -->
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
|
||||
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="10.0.0" />
|
||||
<PackageReference Include="BouncyCastle.Cryptography" Version="2.6.2" />
|
||||
<PackageReference Include="xunit.v3" />
|
||||
<!-- Force newer versions to override transitive dependencies -->
|
||||
<PackageReference Include="Newtonsoft.Json" />
|
||||
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" />
|
||||
<PackageReference Include="BouncyCastle.Cryptography" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@@ -48,6 +46,8 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<!-- Exclude Fixtures from compilation - they contain sample .NET projects with their own obj/ directories -->
|
||||
<Compile Remove="Fixtures\**\*.cs" />
|
||||
<None Include="Fixtures\**\*" CopyToOutputDirectory="PreserveNewest" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -1,4 +1,4 @@
|
||||
using FluentAssertions;
|
||||
using FluentAssertions;
|
||||
using StellaOps.Scanner.Analyzers.Native;
|
||||
using StellaOps.Scanner.Analyzers.Native.Tests.Fixtures;
|
||||
using StellaOps.Scanner.Analyzers.Native.Tests.TestUtilities;
|
||||
@@ -113,7 +113,6 @@ public class ElfDynamicSectionParserTests : NativeTestBase
|
||||
buffer[1] = (byte)'Z';
|
||||
|
||||
using var stream = new MemoryStream(buffer);
|
||||
using StellaOps.TestKit;
|
||||
var result = ElfDynamicSectionParser.TryParse(stream, out var info);
|
||||
|
||||
result.Should().BeFalse();
|
||||
|
||||
@@ -143,7 +143,7 @@ public class NativeFixtureTests
|
||||
{
|
||||
info.Should().NotBeNull();
|
||||
info!.IsUniversal.Should().BeTrue();
|
||||
info.Slices.Should().HaveCountGreaterOrEqualTo(1);
|
||||
info.Slices.Should().HaveCountGreaterThanOrEqualTo(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -303,7 +303,7 @@ public class ElfHardeningExtractorTests
|
||||
var result = await _extractor.ExtractAsync(stream, "/test/binary", "sha256:test");
|
||||
|
||||
// Assert - PIE, NX, RELRO_FULL enabled = 3/5 = 0.6
|
||||
result.HardeningScore.Should().BeGreaterOrEqualTo(0.6);
|
||||
result.HardeningScore.Should().BeGreaterThanOrEqualTo(0.6);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
||||
@@ -41,7 +41,7 @@ public class HardeningScoreCalculatorTests
|
||||
ExtractedAt: DateTimeOffset.UtcNow);
|
||||
|
||||
// Assert
|
||||
result.HardeningScore.Should().BeGreaterOrEqualTo(0.8);
|
||||
result.HardeningScore.Should().BeGreaterThanOrEqualTo(0.8);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
||||
@@ -163,7 +163,7 @@ public class PeHardeningExtractorTests
|
||||
var result = await _extractor.ExtractAsync(stream, "test.exe", "sha256:test");
|
||||
|
||||
// Assert
|
||||
result.HardeningScore.Should().BeGreaterOrEqualTo(0.8);
|
||||
result.HardeningScore.Should().BeGreaterThanOrEqualTo(0.8);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.Text;
|
||||
using System.Text;
|
||||
using FluentAssertions;
|
||||
using Xunit;
|
||||
|
||||
@@ -277,7 +277,6 @@ public class HeuristicScannerTests
|
||||
|
||||
// Act
|
||||
using var stream = new MemoryStream(data);
|
||||
using StellaOps.TestKit;
|
||||
var result = HeuristicScanner.Scan(stream, NativeFormat.Elf);
|
||||
|
||||
// Assert
|
||||
|
||||
@@ -2,6 +2,7 @@ using FluentAssertions;
|
||||
using StellaOps.Scanner.Analyzers.Native;
|
||||
using StellaOps.Scanner.Analyzers.Native.Tests.Fixtures;
|
||||
using StellaOps.Scanner.Analyzers.Native.Tests.TestUtilities;
|
||||
using StellaOps.TestKit;
|
||||
|
||||
namespace StellaOps.Scanner.Analyzers.Native.Tests;
|
||||
|
||||
@@ -170,7 +171,6 @@ public class MachOLoadCommandParserTests : NativeTestBase
|
||||
.AddDylib("/usr/lib/libfoo.dylib", "1.2.3", "1.0.0")
|
||||
.Build();
|
||||
|
||||
using StellaOps.TestKit;
|
||||
var info = ParseMachO(macho);
|
||||
|
||||
info.Slices[0].Dependencies[0].CurrentVersion.Should().Be("1.2.3");
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.Buffers.Binary;
|
||||
using System.Buffers.Binary;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using Xunit;
|
||||
@@ -747,7 +747,6 @@ public sealed class MachOReaderTests
|
||||
{
|
||||
var data = BuildMachO64();
|
||||
using var stream = new MemoryStream(data);
|
||||
using StellaOps.TestKit;
|
||||
var result = MachOReader.Parse(stream, "/usr/bin/myapp", "sha256:abc123");
|
||||
|
||||
Assert.NotNull(result);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using StellaOps.Scanner.Analyzers.Native;
|
||||
@@ -175,7 +175,6 @@ public class NativeFormatDetectorTests
|
||||
var bytes = new byte[] { 0x00, 0x01, 0x02, 0x03 };
|
||||
using var stream = new MemoryStream(bytes);
|
||||
|
||||
using StellaOps.TestKit;
|
||||
var detected = NativeFormatDetector.TryDetect(stream, out var id);
|
||||
|
||||
Assert.False(detected);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.Text.Json;
|
||||
using System.Text.Json;
|
||||
using FluentAssertions;
|
||||
using StellaOps.Scanner.Analyzers.Native.Observations;
|
||||
using Xunit;
|
||||
@@ -134,7 +134,6 @@ public class NativeObservationSerializerTests
|
||||
var json = NativeObservationSerializer.Serialize(original);
|
||||
using var stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(json));
|
||||
|
||||
using StellaOps.TestKit;
|
||||
// Act
|
||||
var doc = await NativeObservationSerializer.ReadAsync(stream);
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ using FluentAssertions;
|
||||
using StellaOps.Scanner.Analyzers.Native;
|
||||
using StellaOps.Scanner.Analyzers.Native.Tests.Fixtures;
|
||||
using StellaOps.Scanner.Analyzers.Native.Tests.TestUtilities;
|
||||
using StellaOps.TestKit;
|
||||
|
||||
namespace StellaOps.Scanner.Analyzers.Native.Tests;
|
||||
|
||||
@@ -135,10 +136,9 @@ public class PeImportParserTests : NativeTestBase
|
||||
"6595b64144ccf1df", "*")
|
||||
.Build();
|
||||
|
||||
using StellaOps.TestKit;
|
||||
var info = ParsePe(pe);
|
||||
|
||||
info.SxsDependencies.Should().HaveCountGreaterOrEqualTo(1);
|
||||
info.SxsDependencies.Should().HaveCountGreaterThanOrEqualTo(1);
|
||||
info.SxsDependencies[0].Name.Should().Be("Microsoft.Windows.Common-Controls");
|
||||
}
|
||||
|
||||
@@ -173,7 +173,7 @@ using StellaOps.TestKit;
|
||||
|
||||
var info = ParsePe(pe);
|
||||
|
||||
info.SxsDependencies.Should().HaveCountGreaterOrEqualTo(1);
|
||||
info.SxsDependencies.Should().HaveCountGreaterThanOrEqualTo(1);
|
||||
info.SxsDependencies.Should().Contain(d => d.Name == "Microsoft.VC90.CRT");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using FluentAssertions;
|
||||
using FluentAssertions;
|
||||
using StellaOps.Scanner.Analyzers.Native;
|
||||
using StellaOps.Scanner.Analyzers.Native.Tests.Fixtures;
|
||||
using StellaOps.Scanner.Analyzers.Native.Tests.TestUtilities;
|
||||
@@ -145,7 +145,6 @@ public class PeReaderTests : NativeTestBase
|
||||
var invalidData = new byte[] { 0x00, 0x01, 0x02, 0x03 };
|
||||
using var stream = new MemoryStream(invalidData);
|
||||
|
||||
using StellaOps.TestKit;
|
||||
// Act
|
||||
var result = PeReader.Parse(stream, "invalid.exe");
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using FluentAssertions;
|
||||
using FluentAssertions;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Logging.Abstractions;
|
||||
@@ -330,7 +330,6 @@ public sealed class PluginPackagingTests
|
||||
var elfHeader = CreateMinimalElfHeader();
|
||||
using var stream = new MemoryStream(elfHeader);
|
||||
|
||||
using StellaOps.TestKit;
|
||||
var result = await analyzer.AnalyzeAsync("/test/binary.so", stream, options);
|
||||
|
||||
result.Should().NotBeNull();
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using FluentAssertions;
|
||||
using StellaOps.Scanner.Analyzers.Native.RuntimeCapture;
|
||||
using StellaOps.TestKit;
|
||||
using Xunit;
|
||||
|
||||
namespace StellaOps.Scanner.Analyzers.Native.Tests;
|
||||
@@ -541,7 +542,6 @@ public class SandboxCaptureTests
|
||||
{
|
||||
await adapter.StartCaptureAsync(options);
|
||||
|
||||
using StellaOps.TestKit;
|
||||
// Act & Assert
|
||||
var act = async () => await adapter.StartCaptureAsync(options);
|
||||
await act.Should().ThrowAsync<InvalidOperationException>();
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<IsPackable>false</IsPackable>
|
||||
<UseConcelierTestInfra>false</UseConcelierTestInfra>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@@ -14,23 +13,23 @@
|
||||
<ProjectReference Include="../../../__Libraries/StellaOps.TestKit/StellaOps.TestKit.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Exclude TimelineBuilderTests.cs as the Timeline namespace is in a different project -->
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.0" />
|
||||
<PackageReference Include="xunit" Version="2.9.2" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="FluentAssertions" Version="6.12.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="10.0.0-*" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="10.0.0-*" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.0-*" />
|
||||
<PackageReference Include="Microsoft.Extensions.Options" Version="10.0.0-*" />
|
||||
<Compile Remove="RuntimeCapture\Timeline\TimelineBuilderTests.cs" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Using Include="Xunit" />
|
||||
<PackageReference Include="FluentAssertions" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" />
|
||||
<PackageReference Include="Microsoft.Extensions.Options" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Using Include="StellaOps.TestKit" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup>
|
||||
<IsTestProject>true</IsTestProject>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.Text;
|
||||
using System.Text;
|
||||
using StellaOps.Scanner.Analyzers.OS.Homebrew;
|
||||
using Xunit;
|
||||
|
||||
@@ -272,7 +272,6 @@ public sealed class HomebrewReceiptParserTests
|
||||
""";
|
||||
using var stream = new MemoryStream(Encoding.UTF8.GetBytes(json));
|
||||
|
||||
using StellaOps.TestKit;
|
||||
// Act
|
||||
var receipt = _parser.Parse(stream);
|
||||
|
||||
|
||||
@@ -1,22 +1,23 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<UseXunitV3>true</UseXunitV3>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<LangVersion>preview</LangVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<UseConcelierTestInfra>false</UseConcelierTestInfra>
|
||||
<OutputType>Exe</OutputType>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" />
|
||||
<PackageReference Include="xunit.v3" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.0" />
|
||||
<PackageReference Include="xunit" Version="2.9.2" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2" />
|
||||
<PackageReference Include="coverlet.collector" Version="6.0.4" />
|
||||
</ItemGroup> <ItemGroup>
|
||||
<Using Include="Xunit" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="../../__Libraries/StellaOps.Scanner.Analyzers.OS/StellaOps.Scanner.Analyzers.OS.csproj" />
|
||||
<ProjectReference Include="../../__Libraries/StellaOps.Scanner.Analyzers.OS.Homebrew/StellaOps.Scanner.Analyzers.OS.Homebrew.csproj" />
|
||||
@@ -25,4 +26,4 @@
|
||||
<ItemGroup>
|
||||
<None Include="Fixtures\**\*" CopyToOutputDirectory="PreserveNewest" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -1,22 +1,23 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<UseXunitV3>true</UseXunitV3>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<LangVersion>preview</LangVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<UseConcelierTestInfra>false</UseConcelierTestInfra>
|
||||
<OutputType>Exe</OutputType>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" />
|
||||
<PackageReference Include="xunit.v3" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.0" />
|
||||
<PackageReference Include="xunit" Version="2.9.2" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2" />
|
||||
<PackageReference Include="coverlet.collector" Version="6.0.4" />
|
||||
</ItemGroup> <ItemGroup>
|
||||
<Using Include="Xunit" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="../../__Libraries/StellaOps.Scanner.Analyzers.OS/StellaOps.Scanner.Analyzers.OS.csproj" />
|
||||
<ProjectReference Include="../../__Libraries/StellaOps.Scanner.Analyzers.OS.MacOsBundle/StellaOps.Scanner.Analyzers.OS.MacOsBundle.csproj" />
|
||||
@@ -25,4 +26,4 @@
|
||||
<ItemGroup>
|
||||
<None Include="Fixtures\**\*" CopyToOutputDirectory="PreserveNewest" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -1,22 +1,23 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<UseXunitV3>true</UseXunitV3>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<LangVersion>preview</LangVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<UseConcelierTestInfra>false</UseConcelierTestInfra>
|
||||
<OutputType>Exe</OutputType>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" />
|
||||
<PackageReference Include="xunit.v3" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.0" />
|
||||
<PackageReference Include="xunit" Version="2.9.2" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2" />
|
||||
<PackageReference Include="coverlet.collector" Version="6.0.4" />
|
||||
</ItemGroup> <ItemGroup>
|
||||
<Using Include="Xunit" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="../../__Libraries/StellaOps.Scanner.Analyzers.OS/StellaOps.Scanner.Analyzers.OS.csproj" />
|
||||
<ProjectReference Include="../../__Libraries/StellaOps.Scanner.Analyzers.OS.Pkgutil/StellaOps.Scanner.Analyzers.OS.Pkgutil.csproj" />
|
||||
@@ -25,4 +26,4 @@
|
||||
<ItemGroup>
|
||||
<None Include="Fixtures\**\*" CopyToOutputDirectory="PreserveNewest" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
@@ -36,7 +36,6 @@ public sealed class OsAnalyzerDeterminismTests
|
||||
public async Task DpkgAnalyzerMatchesGolden()
|
||||
{
|
||||
using var fixture = FixtureManager.UseFixture("dpkg", out var rootPath);
|
||||
using StellaOps.TestKit;
|
||||
var analyzer = new DpkgPackageAnalyzer(NullLogger<DpkgPackageAnalyzer>.Instance);
|
||||
var context = CreateContext(rootPath);
|
||||
|
||||
|
||||
@@ -1,22 +1,23 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<UseXunitV3>true</UseXunitV3>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<LangVersion>preview</LangVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<UseConcelierTestInfra>false</UseConcelierTestInfra>
|
||||
<OutputType>Exe</OutputType>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" />
|
||||
<PackageReference Include="xunit.v3" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.0" />
|
||||
<PackageReference Include="xunit" Version="2.9.2" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2" />
|
||||
<PackageReference Include="coverlet.collector" Version="6.0.4" />
|
||||
</ItemGroup> <ItemGroup>
|
||||
<Using Include="Xunit" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="../../__Libraries/StellaOps.Scanner.Analyzers.OS/StellaOps.Scanner.Analyzers.OS.csproj" />
|
||||
<ProjectReference Include="../../__Libraries/StellaOps.Scanner.Analyzers.OS.Apk/StellaOps.Scanner.Analyzers.OS.Apk.csproj" />
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Logging.Abstractions;
|
||||
using StellaOps.Scanner.Analyzers.OS.Windows.Chocolatey;
|
||||
using Xunit;
|
||||
@@ -468,7 +468,6 @@ public class ChocolateyPackageAnalyzerTests
|
||||
CreateNuspecFile(packageDir, "git", "2.42.0", "Git", "Author", "Git");
|
||||
|
||||
using var cts = new CancellationTokenSource();
|
||||
using StellaOps.TestKit;
|
||||
cts.Cancel();
|
||||
|
||||
try
|
||||
|
||||
@@ -1,22 +1,23 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<UseXunitV3>true</UseXunitV3>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<LangVersion>preview</LangVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<UseConcelierTestInfra>false</UseConcelierTestInfra>
|
||||
<OutputType>Exe</OutputType>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" />
|
||||
<PackageReference Include="xunit.v3" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.0" />
|
||||
<PackageReference Include="xunit" Version="2.9.2" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2" />
|
||||
<PackageReference Include="coverlet.collector" Version="6.0.4" />
|
||||
</ItemGroup> <ItemGroup>
|
||||
<Using Include="Xunit" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="../../__Libraries/StellaOps.Scanner.Analyzers.OS/StellaOps.Scanner.Analyzers.OS.csproj" />
|
||||
<ProjectReference Include="../../__Libraries/StellaOps.Scanner.Analyzers.OS.Windows.Chocolatey/StellaOps.Scanner.Analyzers.OS.Windows.Chocolatey.csproj" />
|
||||
@@ -25,4 +26,4 @@
|
||||
<ItemGroup>
|
||||
<None Include="Fixtures\**\*" CopyToOutputDirectory="PreserveNewest" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -1,22 +1,23 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<UseXunitV3>true</UseXunitV3>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<LangVersion>preview</LangVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<UseConcelierTestInfra>false</UseConcelierTestInfra>
|
||||
<OutputType>Exe</OutputType>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" />
|
||||
<PackageReference Include="xunit.v3" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.0" />
|
||||
<PackageReference Include="xunit" Version="2.9.2" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2" />
|
||||
<PackageReference Include="coverlet.collector" Version="6.0.4" />
|
||||
</ItemGroup> <ItemGroup>
|
||||
<Using Include="Xunit" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="../../__Libraries/StellaOps.Scanner.Analyzers.OS/StellaOps.Scanner.Analyzers.OS.csproj" />
|
||||
<ProjectReference Include="../../__Libraries/StellaOps.Scanner.Analyzers.OS.Windows.Msi/StellaOps.Scanner.Analyzers.OS.Windows.Msi.csproj" />
|
||||
@@ -25,4 +26,4 @@
|
||||
<ItemGroup>
|
||||
<None Include="Fixtures\**\*" CopyToOutputDirectory="PreserveNewest" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -1,22 +1,23 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<UseXunitV3>true</UseXunitV3>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<LangVersion>preview</LangVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<UseConcelierTestInfra>false</UseConcelierTestInfra>
|
||||
<OutputType>Exe</OutputType>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" />
|
||||
<PackageReference Include="xunit.v3" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.0" />
|
||||
<PackageReference Include="xunit" Version="2.9.2" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2" />
|
||||
<PackageReference Include="coverlet.collector" Version="6.0.4" />
|
||||
</ItemGroup> <ItemGroup>
|
||||
<Using Include="Xunit" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="../../__Libraries/StellaOps.Scanner.Analyzers.OS/StellaOps.Scanner.Analyzers.OS.csproj" />
|
||||
<ProjectReference Include="../../__Libraries/StellaOps.Scanner.Analyzers.OS.Windows.WinSxS/StellaOps.Scanner.Analyzers.OS.Windows.WinSxS.csproj" />
|
||||
@@ -25,4 +26,4 @@
|
||||
<ItemGroup>
|
||||
<None Include="Fixtures\**\*" CopyToOutputDirectory="PreserveNewest" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -4,7 +4,12 @@
|
||||
// Task: CORPUS-013 - Integration tests for corpus runner
|
||||
// =============================================================================
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text.Json;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using FluentAssertions;
|
||||
using Moq;
|
||||
using StellaOps.Scanner.Benchmarks;
|
||||
|
||||
@@ -7,22 +7,15 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FluentAssertions" Version="8.*" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.*" />
|
||||
<PackageReference Include="Moq" Version="4.*" />
|
||||
<PackageReference Include="xunit" Version="2.*" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.*">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
<PackageReference Include="FluentAssertions" />
|
||||
<PackageReference Include="Moq" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\StellaOps.Scanner.Benchmarks\StellaOps.Scanner.Benchmarks.csproj" />
|
||||
<ProjectReference Include="..\..\__Libraries\StellaOps.Scanner.Benchmarks\StellaOps.Scanner.Benchmarks.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Content Include="TestData\**\*" CopyToOutputDirectory="PreserveNewest" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -112,7 +112,6 @@ public sealed class LayerCacheRoundTripTests : IAsyncLifetime
|
||||
// Compaction removes CAS entry once over threshold.
|
||||
// Force compaction by writing a large entry.
|
||||
using var largeStream = CreateStream(new string('x', 400_000));
|
||||
using StellaOps.TestKit;
|
||||
var largeHash = "sha256:" + new string('e', 64);
|
||||
await _fileCas.PutAsync(new FileCasPutRequest(largeHash, largeStream), CancellationToken.None);
|
||||
_timeProvider.Advance(TimeSpan.FromMinutes(1));
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FluentAssertions" Version="6.12.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.0" />
|
||||
<PackageReference Include="FluentAssertions" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Remove="..\StellaOps.Concelier.Tests.Shared\AssemblyInfo.cs" />
|
||||
|
||||
@@ -20,7 +20,7 @@ public class BenchmarkIntegrationTests
|
||||
var snapshot = await extractor.ExtractAsync(new CallGraphExtractionRequest(
|
||||
ScanId: $"bench-{caseName}",
|
||||
Language: "node",
|
||||
TargetPath: caseDir));
|
||||
TargetPath: caseDir), CancellationToken.None);
|
||||
|
||||
var analyzer = new ReachabilityAnalyzer();
|
||||
var result = analyzer.Analyze(snapshot);
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
|
||||
using Microsoft.Extensions.Logging.Abstractions;
|
||||
using StellaOps.Scanner.CallGraph.Binary;
|
||||
using StellaOps.Scanner.Reachability;
|
||||
using Xunit;
|
||||
|
||||
using StellaOps.TestKit;
|
||||
@@ -19,17 +20,10 @@ public class BinaryCallGraphExtractorTests
|
||||
{
|
||||
// Arrange
|
||||
var classifier = new BinaryEntrypointClassifier();
|
||||
var symbol = new BinarySymbol
|
||||
{
|
||||
Name = "main",
|
||||
Address = 0x1000,
|
||||
Size = 100,
|
||||
IsGlobal = true,
|
||||
IsExported = true
|
||||
};
|
||||
var symbolName = "main";
|
||||
|
||||
// Act
|
||||
var result = classifier.Classify(symbol);
|
||||
var result = classifier.Classify(symbolName);
|
||||
|
||||
// Assert
|
||||
Assert.True(result.HasValue);
|
||||
@@ -42,21 +36,14 @@ public class BinaryCallGraphExtractorTests
|
||||
{
|
||||
// Arrange
|
||||
var classifier = new BinaryEntrypointClassifier();
|
||||
var symbol = new BinarySymbol
|
||||
{
|
||||
Name = "_init",
|
||||
Address = 0x2000,
|
||||
Size = 50,
|
||||
IsGlobal = true,
|
||||
IsExported = true
|
||||
};
|
||||
var symbolName = "_init";
|
||||
|
||||
// Act
|
||||
var result = classifier.Classify(symbol);
|
||||
var result = classifier.Classify(symbolName);
|
||||
|
||||
// Assert
|
||||
Assert.True(result.HasValue);
|
||||
Assert.Equal(EntrypointType.InitFunction, result.Value);
|
||||
Assert.Equal(EntrypointType.CliCommand, result.Value);
|
||||
}
|
||||
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
@@ -65,17 +52,10 @@ public class BinaryCallGraphExtractorTests
|
||||
{
|
||||
// Arrange
|
||||
var classifier = new BinaryEntrypointClassifier();
|
||||
var symbol = new BinarySymbol
|
||||
{
|
||||
Name = "_ZN4TestL9helper_fnEv", // Mangled C++ name
|
||||
Address = 0x3000,
|
||||
Size = 30,
|
||||
IsGlobal = false,
|
||||
IsExported = false
|
||||
};
|
||||
var symbolName = "_ZN4TestL9helper_fnEv"; // Mangled C++ name
|
||||
|
||||
// Act
|
||||
var result = classifier.Classify(symbol);
|
||||
var result = classifier.Classify(symbolName);
|
||||
|
||||
// Assert
|
||||
Assert.False(result.HasValue);
|
||||
@@ -91,7 +71,7 @@ public class BinaryCallGraphExtractorTests
|
||||
|
||||
// Act & Assert
|
||||
await Assert.ThrowsAsync<FileNotFoundException>(async () =>
|
||||
await reader.ReadAsync("/nonexistent/binary", default));
|
||||
await reader.ReadAsync("/nonexistent/binary", CancellationToken.None));
|
||||
}
|
||||
|
||||
[Trait("Category", TestCategories.Unit)]
|
||||
@@ -104,9 +84,9 @@ public class BinaryCallGraphExtractorTests
|
||||
Address = 0x4000,
|
||||
SymbolIndex = 5,
|
||||
SourceSymbol = "caller",
|
||||
TargetSymbol = "callee",
|
||||
IsExternal = true
|
||||
};
|
||||
relocation.TargetSymbol = "callee";
|
||||
|
||||
// Assert
|
||||
Assert.Equal(0x4000UL, relocation.Address);
|
||||
@@ -172,27 +152,3 @@ public class BinaryCallGraphExtractorTests
|
||||
Assert.False(localSymbol.IsExported);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test helper struct for binary symbols.
|
||||
/// </summary>
|
||||
public record BinarySymbol
|
||||
{
|
||||
public required string Name { get; init; }
|
||||
public ulong Address { get; init; }
|
||||
public ulong Size { get; init; }
|
||||
public bool IsGlobal { get; init; }
|
||||
public bool IsExported { get; init; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test helper struct for binary relocations.
|
||||
/// </summary>
|
||||
public record BinaryRelocation
|
||||
{
|
||||
public ulong Address { get; set; }
|
||||
public int SymbolIndex { get; set; }
|
||||
public string SourceSymbol { get; set; } = "";
|
||||
public string TargetSymbol { get; set; } = "";
|
||||
public bool IsExternal { get; set; }
|
||||
}
|
||||
|
||||
@@ -3,6 +3,11 @@ using StellaOps.Scanner.CallGraph.Binary.Disassembly;
|
||||
using Xunit;
|
||||
|
||||
using StellaOps.TestKit;
|
||||
|
||||
// Use fully qualified names to avoid ambiguity with internal types
|
||||
using DisassemblyBinaryTextSection = StellaOps.Scanner.CallGraph.Binary.Disassembly.BinaryTextSection;
|
||||
using DisassemblyBinaryArchitecture = StellaOps.Scanner.CallGraph.Binary.Disassembly.BinaryArchitecture;
|
||||
|
||||
namespace StellaOps.Scanner.CallGraph.Tests;
|
||||
|
||||
public class BinaryDisassemblyTests
|
||||
@@ -33,11 +38,11 @@ public class BinaryDisassemblyTests
|
||||
public void DirectCallExtractor_Maps_Targets_To_Symbols()
|
||||
{
|
||||
var extractor = new DirectCallExtractor();
|
||||
var textSection = new BinaryTextSection(
|
||||
var textSection = new DisassemblyBinaryTextSection(
|
||||
Bytes: new byte[] { 0xE8, 0x00, 0x00, 0x00, 0x00 },
|
||||
VirtualAddress: 0x1000,
|
||||
Bitness: 64,
|
||||
Architecture: BinaryArchitecture.X64,
|
||||
Architecture: DisassemblyBinaryArchitecture.X64,
|
||||
SectionName: ".text");
|
||||
|
||||
var symbols = new List<BinarySymbol>
|
||||
|
||||
@@ -1,11 +1,17 @@
|
||||
using System.Buffers.Binary;
|
||||
using System.Text;
|
||||
using StellaOps.Scanner.CallGraph.Binary;
|
||||
using StellaOps.Scanner.CallGraph.Binary.Disassembly;
|
||||
using StellaOps.Scanner.CallGraph.Binary.Analysis;
|
||||
using StellaOps.Scanner.CallGraph.Binary.Disassembly;
|
||||
using Xunit;
|
||||
|
||||
using StellaOps.TestKit;
|
||||
|
||||
// Avoid ambiguity by using fully qualified names where needed
|
||||
using DisassemblyTextSection = StellaOps.Scanner.CallGraph.Binary.Disassembly.BinaryTextSection;
|
||||
using DisassemblyArchitecture = StellaOps.Scanner.CallGraph.Binary.Disassembly.BinaryArchitecture;
|
||||
using DisassemblyTextSectionReader = StellaOps.Scanner.CallGraph.Binary.Disassembly.BinaryTextSectionReader;
|
||||
|
||||
namespace StellaOps.Scanner.CallGraph.Tests;
|
||||
|
||||
public class BinaryTextSectionReaderTests
|
||||
@@ -21,10 +27,10 @@ public class BinaryTextSectionReaderTests
|
||||
var path = WriteTempFile(data);
|
||||
try
|
||||
{
|
||||
var section = await BinaryTextSectionReader.TryReadAsync(path, BinaryFormat.Elf, CancellationToken.None);
|
||||
var section = await DisassemblyTextSectionReader.TryReadAsync(path, BinaryFormat.Elf, CancellationToken.None);
|
||||
Assert.NotNull(section);
|
||||
Assert.Equal(".text", section!.SectionName);
|
||||
Assert.Equal(BinaryArchitecture.X64, section.Architecture);
|
||||
Assert.Equal(DisassemblyArchitecture.X64, section.Architecture);
|
||||
Assert.Equal(0x1000UL, section.VirtualAddress);
|
||||
Assert.Equal(textBytes, section.Bytes);
|
||||
}
|
||||
@@ -44,10 +50,10 @@ public class BinaryTextSectionReaderTests
|
||||
var path = WriteTempFile(data);
|
||||
try
|
||||
{
|
||||
var section = await BinaryTextSectionReader.TryReadAsync(path, BinaryFormat.Pe, CancellationToken.None);
|
||||
var section = await DisassemblyTextSectionReader.TryReadAsync(path, BinaryFormat.Pe, CancellationToken.None);
|
||||
Assert.NotNull(section);
|
||||
Assert.Equal(".text", section!.SectionName);
|
||||
Assert.Equal(BinaryArchitecture.X64, section.Architecture);
|
||||
Assert.Equal(DisassemblyArchitecture.X64, section.Architecture);
|
||||
Assert.Equal(0x1000UL, section.VirtualAddress);
|
||||
Assert.Equal(textBytes, section.Bytes);
|
||||
}
|
||||
@@ -67,10 +73,10 @@ public class BinaryTextSectionReaderTests
|
||||
var path = WriteTempFile(data);
|
||||
try
|
||||
{
|
||||
var section = await BinaryTextSectionReader.TryReadAsync(path, BinaryFormat.MachO, CancellationToken.None);
|
||||
var section = await DisassemblyTextSectionReader.TryReadAsync(path, BinaryFormat.MachO, CancellationToken.None);
|
||||
Assert.NotNull(section);
|
||||
Assert.Equal("__text", section!.SectionName);
|
||||
Assert.Equal(BinaryArchitecture.Arm64, section.Architecture);
|
||||
Assert.Equal(DisassemblyArchitecture.Arm64, section.Architecture);
|
||||
Assert.Equal(0x1000UL, section.VirtualAddress);
|
||||
Assert.Equal(textBytes, section.Bytes);
|
||||
}
|
||||
@@ -196,7 +202,7 @@ public class BinaryTextSectionReaderTests
|
||||
WriteUInt32(data, sectionHeaderStart + 8, (uint)textBytes.Length);
|
||||
WriteUInt32(data, sectionHeaderStart + 12, 0x1000);
|
||||
WriteUInt32(data, sectionHeaderStart + 16, (uint)textBytes.Length);
|
||||
WriteUInt32(data, sectionHeaderStart + 20, textOffset);
|
||||
WriteUInt32(data, sectionHeaderStart + 20, (uint)textOffset);
|
||||
|
||||
Array.Copy(textBytes, 0, data, textOffset, textBytes.Length);
|
||||
return data;
|
||||
@@ -222,17 +228,17 @@ public class BinaryTextSectionReaderTests
|
||||
WriteInt32(data, 8, 0);
|
||||
WriteUInt32(data, 12, 2); // filetype
|
||||
WriteUInt32(data, 16, 1); // ncmds
|
||||
WriteUInt32(data, 20, cmdSize);
|
||||
WriteUInt32(data, 20, (uint)cmdSize);
|
||||
WriteUInt32(data, 24, 0); // flags
|
||||
WriteUInt32(data, 28, 0); // reserved
|
||||
|
||||
WriteUInt32(data, commandStart + 0, 0x19); // LC_SEGMENT_64
|
||||
WriteUInt32(data, commandStart + 4, cmdSize);
|
||||
WriteUInt32(data, commandStart + 4, (uint)cmdSize);
|
||||
WriteAscii(data, commandStart + 8, "__TEXT", 16);
|
||||
WriteUInt64(data, commandStart + 24, 0x1000);
|
||||
WriteUInt64(data, commandStart + 32, 0x1000);
|
||||
WriteUInt64(data, commandStart + 40, textOffset);
|
||||
WriteUInt64(data, commandStart + 48, textBytes.Length);
|
||||
WriteUInt64(data, commandStart + 40, (ulong)textOffset);
|
||||
WriteUInt64(data, commandStart + 48, (ulong)textBytes.Length);
|
||||
WriteInt32(data, commandStart + 56, 7);
|
||||
WriteInt32(data, commandStart + 60, 5);
|
||||
WriteUInt32(data, commandStart + 64, 1); // nsects
|
||||
@@ -242,8 +248,8 @@ public class BinaryTextSectionReaderTests
|
||||
WriteAscii(data, sectionStart + 0, "__text", 16);
|
||||
WriteAscii(data, sectionStart + 16, "__TEXT", 16);
|
||||
WriteUInt64(data, sectionStart + 32, 0x1000);
|
||||
WriteUInt64(data, sectionStart + 40, textBytes.Length);
|
||||
WriteUInt32(data, sectionStart + 48, textOffset);
|
||||
WriteUInt64(data, sectionStart + 40, (ulong)textBytes.Length);
|
||||
WriteUInt32(data, sectionStart + 48, (uint)textOffset);
|
||||
|
||||
Array.Copy(textBytes, 0, data, textOffset, textBytes.Length);
|
||||
return data;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user