Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[.NET] Adopt c# 10 file scoped namespaces #271

Merged
merged 2 commits into from
Aug 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ This document is formatted according to the principles of [Keep A CHANGELOG](htt
### Changed
- [Ruby] Upgraded messages support to permit up to v26
- [.NET] Drop unsupported frameworks. Now supported target frameworks are .NET 8, .NET Framework 4.6.2, .NET Standard 2.0
- [.NET] Adopt File Scoped Namespaces c# feature

## [29.0.0] - 2024-08-12
### Added
Expand Down
45 changes: 22 additions & 23 deletions dotnet/Gherkin.Specs/AstBuildingTests.cs
Original file line number Diff line number Diff line change
@@ -1,39 +1,38 @@
using System.Linq;
using System.Linq;
using FluentAssertions;
using Gherkin.CucumberMessages.Types;
using Gherkin.Specs.Helper;
using Xunit;

namespace Gherkin.Specs
namespace Gherkin.Specs;

public class AstBuildingTests : EventTestBase
{
public class AstBuildingTests : EventTestBase
[Theory, MemberData(nameof(TestFileProvider.GetValidTestFiles), MemberType = typeof(TestFileProvider))]
public void TestSuccessfulAstBuilding(string testFeatureFile)
{
[Theory, MemberData(nameof(TestFileProvider.GetValidTestFiles), MemberType = typeof(TestFileProvider))]
public void TestSuccessfulAstBuilding(string testFeatureFile)
{
var testFile = GetFullPathToTestFeatureFile(testFeatureFile, "good", ".ast.ndjson");
var expectedAstContent = GetExpectedContent(testFile.ExpectedFileFullPath);
var testFile = GetFullPathToTestFeatureFile(testFeatureFile, "good", ".ast.ndjson");
var expectedAstContent = GetExpectedContent(testFile.ExpectedFileFullPath);

var expectedGherkinDocumentEvent = NDJsonParser.Deserialize<Envelope>(expectedAstContent);
var expectedGherkinDocumentEvent = NDJsonParser.Deserialize<Envelope>(expectedAstContent);

var raisedEvents = ProcessGherkinEvents(testFile.FullPath, false, true, false);
var raisedEvents = ProcessGherkinEvents(testFile.FullPath, false, true, false);

raisedEvents.Should().Match(list => list.All(e => e.GherkinDocument != null));
AssertEvents(testFeatureFile, raisedEvents, expectedGherkinDocumentEvent, testFile);
}
raisedEvents.Should().Match(list => list.All(e => e.GherkinDocument != null));
AssertEvents(testFeatureFile, raisedEvents, expectedGherkinDocumentEvent, testFile);
}

[Theory, MemberData(nameof(TestFileProvider.GetInvalidTestFiles), MemberType = typeof(TestFileProvider))]
public void TestFailedAstBuilding(string testFeatureFile)
{
var testFile = GetFullPathToTestFeatureFile(testFeatureFile, "bad", ".errors.ndjson");
var expectedAstContent = GetExpectedContent(testFile.ExpectedFileFullPath);
[Theory, MemberData(nameof(TestFileProvider.GetInvalidTestFiles), MemberType = typeof(TestFileProvider))]
public void TestFailedAstBuilding(string testFeatureFile)
{
var testFile = GetFullPathToTestFeatureFile(testFeatureFile, "bad", ".errors.ndjson");
var expectedAstContent = GetExpectedContent(testFile.ExpectedFileFullPath);

var expectedGherkinDocumentEvent = NDJsonParser.Deserialize<Envelope>(expectedAstContent);
var expectedGherkinDocumentEvent = NDJsonParser.Deserialize<Envelope>(expectedAstContent);

var raisedEvents = ProcessGherkinEvents(testFile.FullPath, false, true, false);
var raisedEvents = ProcessGherkinEvents(testFile.FullPath, false, true, false);

raisedEvents.Should().Match(list => list.All(e => e.ParseError != null));
AssertEvents(testFeatureFile, raisedEvents, expectedGherkinDocumentEvent, testFile);
}
raisedEvents.Should().Match(list => list.All(e => e.ParseError != null));
AssertEvents(testFeatureFile, raisedEvents, expectedGherkinDocumentEvent, testFile);
}
}
153 changes: 76 additions & 77 deletions dotnet/Gherkin.Specs/CLI/Program.cs
Original file line number Diff line number Diff line change
@@ -1,112 +1,111 @@
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using Gherkin.CucumberMessages;
using Gherkin.Specs.EventStubs;
using Gherkin.Specs.Tokens;
using Utf8Json.Resolvers;

namespace Gherkin.Specs.CLI
namespace Gherkin.Specs.CLI;

class Program
{
class Program
static int Main(string[] argv)
{
static int Main(string[] argv)
if (argv.Length == 0)
{
if (argv.Length == 0)
{
ShowUsage();
return 100;
}

switch (argv[0].ToLowerInvariant())
{
case "tokens":
return PrintTokens(argv.Skip(1));
case "events":
var printEventArgs = GetPrintEventsArgs(argv.Skip(1));
return PrintEvents(printEventArgs);
default:
ShowUsage();
return 110;
}
ShowUsage();
return 100;
}

private static void ShowUsage()
switch (argv[0].ToLowerInvariant())
{
Console.WriteLine(@"Usage:
case "tokens":
return PrintTokens(argv.Skip(1));
case "events":
var printEventArgs = GetPrintEventsArgs(argv.Skip(1));
return PrintEvents(printEventArgs);
default:
ShowUsage();
return 110;
}
}

private static void ShowUsage()
{
Console.WriteLine(@"Usage:
dotnet Gherkin.Specs events [--no-source] [--no-ast] [--no-pickles] feature-file.feature
- or -
dotnet Gherkin.Specs tokens feature-file.feature
");
}
}

class PrintEventsArgs
{
public bool PrintSource { get; set; } = true;
public bool PrintAst { get; set; } = true;
public bool PrintPickles { get; set; } = true;
public List<string> Paths { get; } = new();
}
class PrintEventsArgs
{
public bool PrintSource { get; set; } = true;
public bool PrintAst { get; set; } = true;
public bool PrintPickles { get; set; } = true;
public List<string> Paths { get; } = new();
}

private static PrintEventsArgs GetPrintEventsArgs(IEnumerable<string> args)
{
var result = new PrintEventsArgs();
private static PrintEventsArgs GetPrintEventsArgs(IEnumerable<string> args)
{
var result = new PrintEventsArgs();

foreach (string arg in args)
foreach (string arg in args)
{
switch (arg)
{
switch (arg)
{
case "--no-source":
result.PrintSource = false;
break;
case "--no-ast":
result.PrintAst = false;
break;
case "--no-pickles":
result.PrintPickles = false;
break;
default:
result.Paths.Add(arg);
break;
}
case "--no-source":
result.PrintSource = false;
break;
case "--no-ast":
result.PrintAst = false;
break;
case "--no-pickles":
result.PrintPickles = false;
break;
default:
result.Paths.Add(arg);
break;
}

return result;
}

private static int PrintTokens(IEnumerable<string> paths)
return result;
}

private static int PrintTokens(IEnumerable<string> paths)
{
foreach (var featureFilePath in paths)
{
foreach (var featureFilePath in paths)
try
{
try
{
var tokensText = TokensGenerator.GenerateTokens(featureFilePath);
Console.WriteLine(tokensText);
}
catch (Exception ex)
{
Console.Error.WriteLine(ex.Message);
return 1;
}
var tokensText = TokensGenerator.GenerateTokens(featureFilePath);
Console.WriteLine(tokensText);
}
catch (Exception ex)
{
Console.Error.WriteLine(ex.Message);
return 1;
}

return 0;
}

private static int PrintEvents(PrintEventsArgs args)
return 0;
}

private static int PrintEvents(PrintEventsArgs args)
{
var sourceProvider = new SourceProvider();
var sources = sourceProvider.GetSources(args.Paths);
var gherkinEventsProvider = new GherkinEventsProvider(args.PrintSource, args.PrintAst, args.PrintPickles, new IncrementingIdGenerator());
foreach (var sourceEventEvent in sources)
{
var sourceProvider = new SourceProvider();
var sources = sourceProvider.GetSources(args.Paths);
var gherkinEventsProvider = new GherkinEventsProvider(args.PrintSource, args.PrintAst, args.PrintPickles, new IncrementingIdGenerator());
foreach (var sourceEventEvent in sources)
foreach (var evt in gherkinEventsProvider.GetEvents(sourceEventEvent))
{
foreach (var evt in gherkinEventsProvider.GetEvents(sourceEventEvent))
{
var jsonString = Utf8Json.JsonSerializer.ToJsonString((object)evt, StandardResolver.ExcludeNullCamelCase);
Console.WriteLine(jsonString);
}
var jsonString = Utf8Json.JsonSerializer.ToJsonString((object)evt, StandardResolver.ExcludeNullCamelCase);
Console.WriteLine(jsonString);
}
return 0;
}
return 0;
}
}
Loading