@@ -9,6 +9,7 @@ namespace NSubstitute.Documentation.Tests.Generator;
99public sealed class DocumentationTestsGenerator : IIncrementalGenerator
1010{
1111 private static readonly Regex markdownCodeRegex = new ( "```(?<tag>\\ w+)(?<contents>(?s:.*?))```?" ) ;
12+ private static readonly Regex requiresPragmaRegex = new ( "// !!! Requires .NET(?<version>\\ d) or greater" ) ;
1213 private static readonly Regex typeOrTestDeclarationRegex = new ( @"(\[Test\]|(public |private |protected )?(class |interface )\w+\s*\{)" ) ;
1314
1415 public void Initialize ( IncrementalGeneratorInitializationContext context )
@@ -74,12 +75,18 @@ public sealed class {{testsClassName}}
7475
7576 for ( int testCaseNumber = 0 ; testCaseNumber < snippets . Count ; testCaseNumber ++ )
7677 {
78+ var snippet = snippets [ testCaseNumber ] ;
79+ var requiredVersion = RequiresVersion ( snippet ) ;
80+ var requiredVersionPragma = requiredVersion != null ? $ "#if NET{{requiredVersion}}_0_OR_GREATER" : null ;
81+ var closeRequiredVersionPragma = requiredVersion != null ? "#endif" : null ;
7782 testClassContent . AppendLine (
7883 $$ """
7984 [Test]
8085 public void Test{{ testCaseNumber }} ()
8186 {
82- {{ snippets [ testCaseNumber ] }}
87+ {{ requiredVersionPragma }}
88+ {{ snippet }}
89+ {{ closeRequiredVersionPragma }}
8390 }
8491 """ ) ;
8592 }
@@ -89,6 +96,16 @@ public sealed class {{testsClassName}}
8996 return testClassContent . ToString ( ) ;
9097 }
9198
99+ private static int ? RequiresVersion ( string snippet )
100+ {
101+ var version = requiresPragmaRegex . Match ( snippet ) . Groups [ "version" ] ? . Value ;
102+ if ( version == null )
103+ {
104+ return null ;
105+ }
106+ return int . Parse ( version ) ;
107+ }
108+
92109 private static void ParseMarkdownCodeBlocks ( AdditionalText markdownFile , out List < string > declarations , out List < string > snippets )
93110 {
94111 var markdownContent = markdownFile . GetText ( ) . ToString ( ) ;
0 commit comments