mirror of
https://github.com/github/codeql.git
synced 2025-12-17 09:13:20 +01:00
202 lines
7.6 KiB
C#
202 lines
7.6 KiB
C#
using Xunit;
|
|
using System;
|
|
using System.IO;
|
|
using System.Text.RegularExpressions;
|
|
using Semmle.Util;
|
|
using Semmle.Util.Logging;
|
|
using Semmle.Extraction.CSharp;
|
|
|
|
namespace Semmle.Extraction.Tests
|
|
{
|
|
public class OptionsTests
|
|
{
|
|
private CSharp.Options? options;
|
|
private CSharp.Standalone.Options? standaloneOptions;
|
|
|
|
[Fact]
|
|
public void DefaultOptions()
|
|
{
|
|
options = CSharp.Options.CreateWithEnvironment(Array.Empty<string>());
|
|
Assert.True(options.Cache);
|
|
Assert.Null(options.Framework);
|
|
Assert.Null(options.CompilerName);
|
|
Assert.Empty(options.CompilerArguments);
|
|
Assert.True(options.Threads >= 1);
|
|
Assert.Equal(Verbosity.Info, options.LegacyVerbosity);
|
|
Assert.False(options.Console);
|
|
Assert.Equal(TrapWriter.CompressionMode.Brotli, options.TrapCompression);
|
|
}
|
|
|
|
[Fact]
|
|
public void Threads()
|
|
{
|
|
options = CSharp.Options.CreateWithEnvironment(new string[] { "--threads", "3" });
|
|
Assert.Equal(3, options.Threads);
|
|
}
|
|
|
|
[Fact]
|
|
public void Cache()
|
|
{
|
|
options = CSharp.Options.CreateWithEnvironment(new string[] { "--nocache" });
|
|
Assert.False(options.Cache);
|
|
}
|
|
|
|
[Fact]
|
|
public void CompilerArguments()
|
|
{
|
|
options = CSharp.Options.CreateWithEnvironment(new string[] { "x", "y", "z" });
|
|
Assert.Equal("x", options.CompilerArguments[0]);
|
|
Assert.Equal("y", options.CompilerArguments[1]);
|
|
Assert.Equal("z", options.CompilerArguments[2]);
|
|
}
|
|
|
|
[Fact]
|
|
public void VerbosityTests()
|
|
{
|
|
options = CSharp.Options.CreateWithEnvironment(new string[] { "--verbose" });
|
|
Assert.Equal(Verbosity.Debug, options.LegacyVerbosity);
|
|
|
|
options = CSharp.Options.CreateWithEnvironment(new string[] { "--verbosity", "0" });
|
|
Assert.Equal(Verbosity.Off, options.LegacyVerbosity);
|
|
|
|
options = CSharp.Options.CreateWithEnvironment(new string[] { "--verbosity", "1" });
|
|
Assert.Equal(Verbosity.Error, options.LegacyVerbosity);
|
|
|
|
options = CSharp.Options.CreateWithEnvironment(new string[] { "--verbosity", "2" });
|
|
Assert.Equal(Verbosity.Warning, options.LegacyVerbosity);
|
|
|
|
options = CSharp.Options.CreateWithEnvironment(new string[] { "--verbosity", "3" });
|
|
Assert.Equal(Verbosity.Info, options.LegacyVerbosity);
|
|
|
|
options = CSharp.Options.CreateWithEnvironment(new string[] { "--verbosity", "4" });
|
|
Assert.Equal(Verbosity.Debug, options.LegacyVerbosity);
|
|
|
|
options = CSharp.Options.CreateWithEnvironment(new string[] { "--verbosity", "5" });
|
|
Assert.Equal(Verbosity.Trace, options.LegacyVerbosity);
|
|
|
|
Assert.Throws<FormatException>(() => CSharp.Options.CreateWithEnvironment(new string[] { "--verbosity", "X" }));
|
|
}
|
|
|
|
|
|
private const string extractorVariableName = "CODEQL_EXTRACTOR_CSHARP_OPTION_LOGGING_VERBOSITY";
|
|
private const string cliVariableName = "CODEQL_VERBOSITY";
|
|
|
|
private void CheckVerbosity(string? extractor, string? cli, Verbosity expected)
|
|
{
|
|
var currentExtractorVerbosity = Environment.GetEnvironmentVariable(extractorVariableName);
|
|
var currentCliVerbosity = Environment.GetEnvironmentVariable(cliVariableName);
|
|
try
|
|
{
|
|
Environment.SetEnvironmentVariable(extractorVariableName, extractor);
|
|
Environment.SetEnvironmentVariable(cliVariableName, cli);
|
|
|
|
options = CSharp.Options.CreateWithEnvironment(new string[] { "--verbose" });
|
|
Assert.Equal(expected, options.Verbosity);
|
|
}
|
|
finally
|
|
{
|
|
Environment.SetEnvironmentVariable(extractorVariableName, currentExtractorVerbosity);
|
|
Environment.SetEnvironmentVariable(cliVariableName, currentCliVerbosity);
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
public void VerbosityTests_WithExtractorOption()
|
|
{
|
|
CheckVerbosity("progress+++", "progress++", Verbosity.All);
|
|
CheckVerbosity(null, "progress++", Verbosity.Trace);
|
|
CheckVerbosity(null, null, Verbosity.Debug);
|
|
}
|
|
|
|
[Fact]
|
|
public void Console()
|
|
{
|
|
options = CSharp.Options.CreateWithEnvironment(new string[] { "--console" });
|
|
Assert.True(options.Console);
|
|
}
|
|
|
|
[Fact]
|
|
public void Compiler()
|
|
{
|
|
options = CSharp.Options.CreateWithEnvironment(new string[] { "--compiler", "foo" });
|
|
Assert.Equal("foo", options.CompilerName);
|
|
}
|
|
|
|
[Fact]
|
|
public void Framework()
|
|
{
|
|
options = CSharp.Options.CreateWithEnvironment(new string[] { "--framework", "foo" });
|
|
Assert.Equal("foo", options.Framework);
|
|
}
|
|
|
|
[Fact]
|
|
public void StandaloneDefaults()
|
|
{
|
|
standaloneOptions = CSharp.Standalone.Options.Create(Array.Empty<string>());
|
|
Assert.False(standaloneOptions.Errors);
|
|
}
|
|
|
|
[Fact]
|
|
public void StandaloneOptions()
|
|
{
|
|
standaloneOptions = CSharp.Standalone.Options.Create(new string[] { "--silent" });
|
|
Assert.Equal(Verbosity.Off, standaloneOptions.LegacyVerbosity);
|
|
Assert.False(standaloneOptions.Errors);
|
|
Assert.False(standaloneOptions.Help);
|
|
}
|
|
|
|
[Fact]
|
|
public void InvalidOptions()
|
|
{
|
|
standaloneOptions = CSharp.Standalone.Options.Create(new string[] { "--silent", "--no-such-option" });
|
|
Assert.True(standaloneOptions.Errors);
|
|
}
|
|
|
|
[Fact]
|
|
public void ShowingHelp()
|
|
{
|
|
standaloneOptions = CSharp.Standalone.Options.Create(new string[] { "--help" });
|
|
Assert.False(standaloneOptions.Errors);
|
|
Assert.True(standaloneOptions.Help);
|
|
}
|
|
|
|
[Fact]
|
|
public void ArchiveArguments()
|
|
{
|
|
using var sw = new StringWriter();
|
|
var file = Path.GetTempFileName();
|
|
|
|
try
|
|
{
|
|
File.AppendAllText(file, "Test");
|
|
sw.WriteContentFromArgumentFile(new string[] { "/noconfig", $"@{file}" });
|
|
Assert.Equal("Test", Regex.Replace(sw.ToString(), @"\t|\n|\r", ""));
|
|
}
|
|
finally
|
|
{
|
|
File.Delete(file);
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
public void CompressionTests()
|
|
{
|
|
Environment.SetEnvironmentVariable("CODEQL_EXTRACTOR_CSHARP_OPTION_TRAP_COMPRESSION", "gzip");
|
|
options = CSharp.Options.CreateWithEnvironment(Array.Empty<string>());
|
|
Assert.Equal(TrapWriter.CompressionMode.Gzip, options.TrapCompression);
|
|
|
|
Environment.SetEnvironmentVariable("CODEQL_EXTRACTOR_CSHARP_OPTION_TRAP_COMPRESSION", "brotli");
|
|
options = CSharp.Options.CreateWithEnvironment(Array.Empty<string>());
|
|
Assert.Equal(TrapWriter.CompressionMode.Brotli, options.TrapCompression);
|
|
|
|
Environment.SetEnvironmentVariable("CODEQL_EXTRACTOR_CSHARP_OPTION_TRAP_COMPRESSION", "none");
|
|
options = CSharp.Options.CreateWithEnvironment(Array.Empty<string>());
|
|
Assert.Equal(TrapWriter.CompressionMode.None, options.TrapCompression);
|
|
|
|
Environment.SetEnvironmentVariable("CODEQL_EXTRACTOR_CSHARP_OPTION_TRAP_COMPRESSION", null);
|
|
options = CSharp.Options.CreateWithEnvironment(Array.Empty<string>());
|
|
Assert.Equal(TrapWriter.CompressionMode.Brotli, options.TrapCompression);
|
|
}
|
|
}
|
|
}
|