11using System ;
22using System . Diagnostics ;
33using System . IO ;
4+ using System . Reflection ;
45
56namespace LibGit2Sharp . Tests . TestHelpers
67{
@@ -10,6 +11,14 @@ public static class Constants
1011 public const string UnknownSha = "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef" ;
1112 public static readonly Identity Identity = new Identity ( "A. U. Thor" , "[email protected] " ) ; 1213 public static readonly Signature Signature = new Signature ( Identity , new DateTimeOffset ( 2011 , 06 , 16 , 10 , 58 , 27 , TimeSpan . FromHours ( 2 ) ) ) ;
14+ public static readonly bool IsRunningOnUnix = IsUnixPlatform ( ) ;
15+
16+ private static bool IsUnixPlatform ( )
17+ {
18+ // see http://mono-project.com/FAQ%3a_Technical#Mono_Platforms
19+ var p = ( int ) Environment . OSVersion . Platform ;
20+ return ( p == 4 ) || ( p == 6 ) || ( p == 128 ) ;
21+ }
1322
1423 // Populate these to turn on live credential tests: set the
1524 // PrivateRepoUrl to the URL of a repository that requires
@@ -37,19 +46,15 @@ public static string BuildPath()
3746 {
3847 string tempPath = null ;
3948
40- var unixPath = Type . GetType ( "Mono.Unix.UnixPath, Mono.Posix, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" ) ;
41-
42- if ( unixPath != null )
49+ if ( IsRunningOnUnix )
4350 {
4451 // We're running on Mono/*nix. Let's unwrap the path
45- tempPath = ( string ) unixPath . InvokeMember ( "GetCompleteRealPath" ,
46- System . Reflection . BindingFlags . Static | System . Reflection . BindingFlags . FlattenHierarchy |
47- System . Reflection . BindingFlags . InvokeMethod | System . Reflection . BindingFlags . Public ,
48- null , unixPath , new object [ ] { Path . GetTempPath ( ) } ) ;
52+ tempPath = UnwrapUnixTempPath ( ) ;
4953 }
5054 else
5155 {
5256 const string LibGit2TestPath = "LibGit2TestPath" ;
57+
5358 // We're running on .Net/Windows
5459 if ( Environment . GetEnvironmentVariables ( ) . Contains ( LibGit2TestPath ) )
5560 {
@@ -68,5 +73,16 @@ public static string BuildPath()
6873 Trace . TraceInformation ( "Test working directory set to '{0}'" , testWorkingDirectory ) ;
6974 return testWorkingDirectory ;
7075 }
76+
77+ private static string UnwrapUnixTempPath ( )
78+ {
79+ var assembly = Assembly . Load ( "Mono.Posix" ) ;
80+ var type = assembly . GetType ( "Mono.Unix.UnixPath" ) ;
81+
82+ return ( string ) type . InvokeMember ( "GetCompleteRealPath" ,
83+ BindingFlags . Static | BindingFlags . FlattenHierarchy |
84+ BindingFlags . InvokeMethod | BindingFlags . Public ,
85+ null , type , new object [ ] { Path . GetTempPath ( ) } ) ;
86+ }
7187 }
7288}
0 commit comments