2018-11-08 12:11:30 -08:00
using System ;
using System.Collections.Generic ;
using System.IO ;
using System.Runtime.CompilerServices ;
using System.Xml.Linq ;
using Microsoft.DotNet.TestFramework ;
using Microsoft.DotNet.Tools.Test.Utilities ;
namespace EndToEnd
{
class TestProjectCreator
{
public const string NETCorePackageName = "Microsoft.NETCore.App" ;
public const string AspNetCoreAppPackageName = "Microsoft.AspNetCore.App" ;
public const string AspNetCoreAllPackageName = "Microsoft.AspNetCore.All" ;
public string TestName { get ; set ; }
public string Identifier { get ; set ; }
public string PackageName { get ; set ; } = NETCorePackageName ;
public string MinorVersion { get ; set ; }
public string RuntimeIdentifier { get ; set ; }
2020-08-20 06:32:19 -07:00
public Dictionary < string , string > AdditionalProperties { get ; } = new Dictionary < string , string > ( ) ;
2018-11-08 12:11:30 -08:00
public TestProjectCreator ( [ CallerMemberName ] string testName = null , string identifier = "" )
{
TestName = testName ;
Identifier = identifier ;
}
public TestAssetInstance Create ( )
{
var testInstance = TestBase . TestAssets . Get ( "TestAppSimple" )
. CreateInstance ( callingMethod : TestName , identifier : Identifier + PackageName + "_" + MinorVersion )
. WithSourceFiles ( ) ;
string projectDirectory = testInstance . Root . FullName ;
string projectPath = Path . Combine ( projectDirectory , "TestAppSimple.csproj" ) ;
var project = XDocument . Load ( projectPath ) ;
var ns = project . Root . Name . Namespace ;
// Update TargetFramework to the right version of .NET Core
project . Root . Element ( ns + "PropertyGroup" )
. Element ( ns + "TargetFramework" )
. Value = "netcoreapp" + MinorVersion ;
if ( ! string . IsNullOrEmpty ( RuntimeIdentifier ) )
{
project . Root . Element ( ns + "PropertyGroup" )
. Add ( new XElement ( ns + "RuntimeIdentifier" , RuntimeIdentifier ) ) ;
}
2020-08-20 06:32:19 -07:00
foreach ( var additionalProperty in AdditionalProperties )
{
project . Root . Element ( ns + "PropertyGroup" ) . Add ( new XElement ( ns + additionalProperty . Key , additionalProperty . Value ) ) ;
}
2018-11-08 12:11:30 -08:00
if ( PackageName ! = NETCorePackageName )
{
if ( new Version ( MinorVersion ) . Major < 3 )
{
// Add ASP.NET PackageReference with implicit version for target framework versions prior to 3.0
project . Root . Add ( new XElement ( ns + "ItemGroup" ,
new XElement ( ns + "PackageReference" , new XAttribute ( "Include" , PackageName ) ) ) ) ;
}
else
{
project . Root . Add ( new XElement ( ns + "ItemGroup" ,
new XElement ( ns + "FrameworkReference" , new XAttribute ( "Include" , PackageName ) ) ) ) ;
}
}
project . Save ( projectPath ) ;
return testInstance ;
}
}
}