1- using System ;
2- using System . IO ;
1+ using System . IO ;
32using FluentAssertions ;
43using Xunit ;
54
@@ -8,25 +7,16 @@ namespace Light.GuardClauses.SourceCodeTransformation.Tests;
87public static class GeneratedFileBuildValidatorTests
98{
109 [ Fact ]
11- public static void ValidateBuildsSingleProjectNextToGeneratedFile ( )
10+ public static void TryFindSourceValidationProjectFindsProjectFromRepositoryRoot ( )
1211 {
13- using var temporaryDirectory = new TemporaryDirectory ( ) ;
14- var targetFile = Path . Combine ( temporaryDirectory . DirectoryPath , "Generated.cs" ) ;
15- File . WriteAllText ( targetFile , "namespace ValidationSample; public static class Generated { }" ) ;
16- File . WriteAllText (
17- Path . Combine ( temporaryDirectory . DirectoryPath , "ValidationSample.csproj" ) ,
18- """
19- <Project Sdk="Microsoft.NET.Sdk">
20- <PropertyGroup>
21- <TargetFramework>net8.0</TargetFramework>
22- <ImplicitUsings>enable</ImplicitUsings>
23- <Nullable>enable</Nullable>
24- </PropertyGroup>
25- </Project>
26- """
12+ var repositoryRoot = TestEnvironment . CodeDirectory . Parent ! . FullName ;
13+ var expectedProjectPath = Path . Combine (
14+ TestEnvironment . CodeDirectory . FullName ,
15+ "Light.GuardClauses.SourceValidation" ,
16+ "Light.GuardClauses.SourceValidation.csproj"
2717 ) ;
2818
29- GeneratedFileBuildValidator . Validate ( targetFile ) . Should ( ) . Be ( 0 ) ;
19+ GeneratedFileBuildValidator . TryFindSourceValidationProject ( [ repositoryRoot ] ) . Should ( ) . Be ( expectedProjectPath ) ;
3020 }
3121
3222 [ Fact ]
@@ -35,55 +25,36 @@ public static void ValidateReturnsNonZeroExitCodeAndLeavesFileOnBuildFailure()
3525 using var temporaryDirectory = new TemporaryDirectory ( ) ;
3626 var targetFile = Path . Combine ( temporaryDirectory . DirectoryPath , "Generated.cs" ) ;
3727 File . WriteAllText ( targetFile , "namespace ValidationSample; public static class Generated { this is invalid }" ) ;
38- File . WriteAllText (
39- Path . Combine ( temporaryDirectory . DirectoryPath , "ValidationSample.csproj" ) ,
40- """
41- <Project Sdk="Microsoft.NET.Sdk">
42- <PropertyGroup>
43- <TargetFramework>net8.0</TargetFramework>
44- </PropertyGroup>
45- </Project>
46- """
47- ) ;
4828
49- GeneratedFileBuildValidator . Validate ( targetFile ) . Should ( ) . NotBe ( 0 ) ;
29+ GeneratedFileBuildValidator . Validate ( SourceTargetFramework . Net8_0 , targetFile ) . Should ( ) . NotBe ( 0 ) ;
5030 File . Exists ( targetFile ) . Should ( ) . BeTrue ( ) ;
5131 }
5232
5333 [ Fact ]
54- public static void ValidateSkipsWhenNoProjectFileExists ( )
34+ public static void ValidateReturnsZeroForCompilingFileOnNet8 ( )
5535 {
5636 using var temporaryDirectory = new TemporaryDirectory ( ) ;
5737 var targetFile = Path . Combine ( temporaryDirectory . DirectoryPath , "Generated.cs" ) ;
5838 File . WriteAllText ( targetFile , "namespace ValidationSample; public static class Generated { }" ) ;
5939
60- GeneratedFileBuildValidator . Validate ( targetFile ) . Should ( ) . Be ( 0 ) ;
40+ GeneratedFileBuildValidator . Validate ( SourceTargetFramework . Net8_0 , targetFile ) . Should ( ) . Be ( 0 ) ;
6141 }
6242
6343 [ Fact ]
64- public static void ValidateSkipsWhenMultipleProjectFilesExist ( )
44+ public static void ValidateReturnsZeroForCompilingFileOnNetStandard ( )
6545 {
6646 using var temporaryDirectory = new TemporaryDirectory ( ) ;
6747 var targetFile = Path . Combine ( temporaryDirectory . DirectoryPath , "Generated.cs" ) ;
6848 File . WriteAllText ( targetFile , "namespace ValidationSample; public static class Generated { }" ) ;
69- File . WriteAllText (
70- Path . Combine ( temporaryDirectory . DirectoryPath , "First.csproj" ) ,
71- "<Project Sdk=\" Microsoft.NET.Sdk\" />"
72- ) ;
73- File . WriteAllText (
74- Path . Combine ( temporaryDirectory . DirectoryPath , "Second.csproj" ) ,
75- "<Project Sdk=\" Microsoft.NET.Sdk\" />"
76- ) ;
7749
78- GeneratedFileBuildValidator . Validate ( targetFile ) . Should ( ) . Be ( 0 ) ;
50+ GeneratedFileBuildValidator . Validate ( SourceTargetFramework . NetStandard2_0 , targetFile ) . Should ( ) . Be ( 0 ) ;
7951 }
8052
8153 [ Fact ]
82- public static void ProgramRunsNonWhitelistTransformationAndSkipsValidationWithoutProject ( )
54+ public static void ProgramRunsNonWhitelistNetStandardTransformationAndValidates ( )
8355 {
8456 using var temporaryDirectory = new TemporaryDirectory ( ) ;
85- var codeDirectory = FindCodeDirectory ( ) ;
86- var sourceFolder = Path . Combine ( codeDirectory . FullName , "Light.GuardClauses" ) ;
57+ var sourceFolder = TestEnvironment . SourceDirectory . FullName ;
8758 var targetFile = Path . Combine ( temporaryDirectory . DirectoryPath , "Generated.cs" ) ;
8859
8960 Program . Main (
@@ -92,46 +63,10 @@ public static void ProgramRunsNonWhitelistTransformationAndSkipsValidationWithou
9263 $ "TargetFile={ targetFile } ",
9364 "IncludeVersionComment=false" ,
9465 "AssertionWhitelist:IsEnabled=false" ,
66+ "TargetFramework=NetStandard2_0" ,
9567 ]
9668 ) . Should ( ) . Be ( 0 ) ;
9769
9870 File . Exists ( targetFile ) . Should ( ) . BeTrue ( ) ;
9971 }
100-
101- private static DirectoryInfo FindCodeDirectory ( )
102- {
103- var currentDirectory = new DirectoryInfo ( "." ) ;
104- do
105- {
106- if ( currentDirectory . Name == "Code" )
107- {
108- return currentDirectory ;
109- }
110-
111- currentDirectory = currentDirectory . Parent ;
112- } while ( currentDirectory != null ) ;
113-
114- throw new InvalidOperationException (
115- "This test project does not reside in a folder called \" Code\" (directly or indirectly)."
116- ) ;
117- }
118-
119- private sealed class TemporaryDirectory : IDisposable
120- {
121- public TemporaryDirectory ( )
122- {
123- DirectoryPath = Path . Combine ( Path . GetTempPath ( ) , Guid . NewGuid ( ) . ToString ( "N" ) ) ;
124- Directory . CreateDirectory ( DirectoryPath ) ;
125- }
126-
127- public string DirectoryPath { get ; }
128-
129- public void Dispose ( )
130- {
131- if ( Directory . Exists ( DirectoryPath ) )
132- {
133- Directory . Delete ( DirectoryPath , true ) ;
134- }
135- }
136- }
13772}
0 commit comments