Widen generated harness smoke test coverage#165
Merged
cwinland merged 3 commits intofeature/136-scenario-scaffold-implementationfrom May 6, 2026
Merged
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
This PR expands the generated-harness source generator to emit xUnit-gated “smoke tests” inside explicit MockerTestBase<TComponent> harness partials, covering parameterless and optional-default public instance methods (including Task/ValueTask return shapes). It also adds analyzer tests for these new behaviors and updates roadmap documentation to reflect the current narrowed #123 implementation slice.
Changes:
- Emit xUnit
Factsmoke tests (and skipped placeholders with reasons) within generated harness output when xUnit is available in the compilation. - Generate invocations for public instance methods that are safe to call with no parameters or compile-time optional defaults, including
ValueTask/ValueTask<T>execution support. - Add analyzer tests for smoke test emission, overload binding via typed defaults, and “no xUnit reference” gating; update roadmap docs accordingly.
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| FastMoq.Generators/GeneratedHarnessSourceGenerator.cs | Adds method discovery + optional-default argument formatting, xUnit availability gating, and smoke-test/placeholder emission into generated harness partials. |
| FastMoq.Analyzers.Tests/GeneratedHarnessSourceGeneratorTests.cs | Adds tests validating generated smoke tests for parameterless/optional-default methods, overload binding, deferred placeholders, and xUnit-unavailable behavior. |
| FastMoq.Analyzers.Tests/AnalyzerTestHelpers.cs | Adds an includeXunit toggle to allow generator tests to simulate compilations without xUnit references. |
| docs/roadmap/README.md | Updates roadmap summary language to reflect the current explicit-harness xUnit smoke-test slice. |
| docs/roadmap/generator-roadmap.md | Documents the current narrow generated-test slice and its supported/deferred boundaries. |
| docs/roadmap/generated-test-settings.md | Updates baseline/design notes to account for the new xUnit-gated smoke-test slice as current generator-owned defaults. |
When component methods are named with C# keywords (e.g., @Class, @return), the unescaped IMethodSymbol.Name resulted in invalid emitted code like 'component.class()' instead of 'component.@Class()'. - Add EscapeIdentifierIfKeyword helper using SyntaxFacts.GetKeywordKind - Apply escaping in CreateGeneratedTestMethodModel to all method references - Add [Fact] test covering keyword methods (@Class, @interface, @return) Addresses code review comment on GeneratedHarnessSourceGenerator.cs
… into generator pipeline (#123 slice 2) (#166) Wire FastMoqGeneratedTestFramework MSBuild property into generator pipeline - Add CompilerVisibleProperty for FastMoqGeneratedTestFramework to generator csproj - Read build_property.FastMoqGeneratedTestFramework in incremental pipeline via AnalyzerConfigOptionsProvider - Combine frameworkSetting with targets pipeline; pass to EmitSource - When value is 'none' (case-insensitive), suppress xUnit smoke-test emission regardless of metadata - Add TestAnalyzerConfigOptionsProvider / TestAnalyzerConfigOptions nested helpers for test isolation - Add 3 new [Fact] tests covering none suppression, explicit xunit enable, and case-insensitive none Part of #123
a69f67c
into
feature/136-scenario-scaffold-implementation
4 checks passed
cwinland
added a commit
that referenced
this pull request
May 6, 2026
* Expand generated scenario scaffold executors * Add generated shared setup scaffold hooks * Strengthen generated shared setup hook ordering test * Document generated scenario scaffold members * docs: align generator roadmap with current scope * Widen generated harness smoke test coverage (#165) * Widen generated harness smoke test coverage * Fix: Escape C# keywords in generated method invocations When component methods are named with C# keywords (e.g., @Class, @return), the unescaped IMethodSymbol.Name resulted in invalid emitted code like 'component.class()' instead of 'component.@Class()'. - Add EscapeIdentifierIfKeyword helper using SyntaxFacts.GetKeywordKind - Apply escaping in CreateGeneratedTestMethodModel to all method references - Add [Fact] test covering keyword methods (@Class, @interface, @return) Addresses code review comment on GeneratedHarnessSourceGenerator.cs * feat(generators): wire FastMoqGeneratedTestFramework MSBuild property into generator pipeline (#123 slice 2) (#166) Wire FastMoqGeneratedTestFramework MSBuild property into generator pipeline - Add CompilerVisibleProperty for FastMoqGeneratedTestFramework to generator csproj - Read build_property.FastMoqGeneratedTestFramework in incremental pipeline via AnalyzerConfigOptionsProvider - Combine frameworkSetting with targets pipeline; pass to EmitSource - When value is 'none' (case-insensitive), suppress xUnit smoke-test emission regardless of metadata - Add TestAnalyzerConfigOptionsProvider / TestAnalyzerConfigOptions nested helpers for test isolation - Add 3 new [Fact] tests covering none suppression, explicit xunit enable, and case-insensitive none Part of #123
cwinland
added a commit
that referenced
this pull request
May 6, 2026
* Document generated-test settings design for #162 * Fix generated harness parameterless constructor selection * Define #126 scenario scaffolding contract * Document #134 helper-family narrowing matrix * Align generator project GUID across solutions * Add generated shared setup scenario scaffold hooks (#164) * Expand generated scenario scaffold executors * Add generated shared setup scaffold hooks * Strengthen generated shared setup hook ordering test * Document generated scenario scaffold members * docs: align generator roadmap with current scope * Widen generated harness smoke test coverage (#165) * Widen generated harness smoke test coverage * Fix: Escape C# keywords in generated method invocations When component methods are named with C# keywords (e.g., @Class, @return), the unescaped IMethodSymbol.Name resulted in invalid emitted code like 'component.class()' instead of 'component.@Class()'. - Add EscapeIdentifierIfKeyword helper using SyntaxFacts.GetKeywordKind - Apply escaping in CreateGeneratedTestMethodModel to all method references - Add [Fact] test covering keyword methods (@Class, @interface, @return) Addresses code review comment on GeneratedHarnessSourceGenerator.cs * feat(generators): wire FastMoqGeneratedTestFramework MSBuild property into generator pipeline (#123 slice 2) (#166) Wire FastMoqGeneratedTestFramework MSBuild property into generator pipeline - Add CompilerVisibleProperty for FastMoqGeneratedTestFramework to generator csproj - Read build_property.FastMoqGeneratedTestFramework in incremental pipeline via AnalyzerConfigOptionsProvider - Combine frameworkSetting with targets pipeline; pass to EmitSource - When value is 'none' (case-insensitive), suppress xUnit smoke-test emission regardless of metadata - Add TestAnalyzerConfigOptionsProvider / TestAnalyzerConfigOptions nested helpers for test isolation - Add 3 new [Fact] tests covering none suppression, explicit xunit enable, and case-insensitive none Part of #123
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
ValueTaskandValueTask<T>smoke-test execution, plus xUnit-availability gating and overload-binding coverage in analyzer tests#123slice and the remaining deferred generated-test scopeValidation
dotnet test c:\Users\chriswin\source\repos\FastMoq\FastMoq.slndotnet test c:\Users\chriswin\source\repos\FastMoq\FastMoq.Analyzers.Tests\FastMoq.Analyzers.Tests.csproj --filter GeneratedHarnessSourceGeneratordotnet test c:\Users\chriswin\source\repos\FastMoq\FastMoq.Analyzers.Tests\FastMoq.Analyzers.Tests.csprojdotnet build c:\Users\chriswin\source\repos\FastMoq\FastMoq.Generators\FastMoq.Generators.csproj& 'c:\Users\chriswin\source\repos\FastMoq\scripts\Generate-ApiDocs.ps1'Notes
InvalidCrefwarning inFastMoq.AzureFunctions/Extensions/TaskOrchestrationContextTestExtensions.cs.