2016-08-22 12:24:10 -07:00
using Microsoft.Build.Construction ;
using Microsoft.DotNet.ProjectJsonMigration ;
2016-10-27 18:46:43 -07:00
using Microsoft.DotNet.Internal.ProjectModel ;
2016-08-22 12:24:10 -07:00
using Microsoft.DotNet.Tools.Test.Utilities ;
using NuGet.Frameworks ;
using System ;
using System.Collections.Generic ;
using System.Linq ;
using System.Threading.Tasks ;
using Xunit ;
using FluentAssertions ;
2016-08-23 13:50:05 -07:00
using Microsoft.DotNet.ProjectJsonMigration.Rules ;
2016-08-22 12:24:10 -07:00
namespace Microsoft.DotNet.ProjectJsonMigration.Tests
{
2016-09-22 17:16:37 -07:00
public class GivenThatIWantToMigrateTFMs : TestBase
2016-08-22 12:24:10 -07:00
{
2016-09-19 09:16:36 -07:00
[Fact(Skip="Emitting this until x-targetting full support is in")]
2016-12-18 18:45:35 -08:00
public void MigratingNetcoreappProjectDoesNotPopulateTargetFrameworkIdentifierAndTargetFrameworkVersion ( )
2016-09-15 15:54:10 -07:00
{
var testDirectory = Temp . CreateDirectory ( ) . Path ;
var testPJ = new ProjectJsonBuilder ( TestAssetsManager )
. FromTestAssetBase ( "TestAppWithRuntimeOptions" )
. WithCustomProperty ( "buildOptions" , new Dictionary < string , string >
{
{ "emitEntryPoint" , "false" }
} )
. SaveToDisk ( testDirectory ) ;
var projectContext = ProjectContext . Create ( testDirectory , FrameworkConstants . CommonFrameworks . NetCoreApp10 ) ;
var mockProj = ProjectRootElement . Create ( ) ;
2016-12-07 11:49:15 -10:00
var migrationSettings = MigrationSettings . CreateMigrationSettingsTestHook ( testDirectory , testDirectory , mockProj ) ;
2016-09-16 16:37:48 -07:00
var migrationInputs = new MigrationRuleInputs (
new [ ] { projectContext } ,
mockProj ,
mockProj . AddItemGroup ( ) ,
mockProj . AddPropertyGroup ( ) ) ;
new MigrateTFMRule ( ) . Apply ( migrationSettings , migrationInputs ) ;
2016-09-15 15:54:10 -07:00
mockProj . Properties . Count ( p = > p . Name = = "TargetFrameworkIdentifier" ) . Should ( ) . Be ( 0 ) ;
mockProj . Properties . Count ( p = > p . Name = = "TargetFrameworkVersion" ) . Should ( ) . Be ( 0 ) ;
}
2016-09-22 14:30:56 -07:00
[Fact]
2016-12-18 18:45:35 -08:00
public void MigratingMultiTFMProjectPopulatesTargetFrameworksWithShortTfms ( )
2016-09-15 15:54:10 -07:00
{
var testDirectory = Temp . CreateDirectory ( ) . Path ;
var testPJ = new ProjectJsonBuilder ( TestAssetsManager )
. FromTestAssetBase ( "TestLibraryWithMultipleFrameworks" )
. SaveToDisk ( testDirectory ) ;
2016-09-22 17:16:37 -07:00
var projectContexts = ProjectContext . CreateContextForEachFramework ( testDirectory ) ;
2016-09-15 15:54:10 -07:00
var mockProj = ProjectRootElement . Create ( ) ;
2016-12-07 11:49:15 -10:00
var migrationSettings = MigrationSettings . CreateMigrationSettingsTestHook ( testDirectory , testDirectory , mockProj ) ;
2016-09-16 16:37:48 -07:00
var migrationInputs = new MigrationRuleInputs (
2016-09-22 17:16:37 -07:00
projectContexts ,
2016-09-16 16:37:48 -07:00
mockProj ,
mockProj . AddItemGroup ( ) ,
mockProj . AddPropertyGroup ( ) ) ;
new MigrateTFMRule ( ) . Apply ( migrationSettings , migrationInputs ) ;
2016-09-15 15:54:10 -07:00
mockProj . Properties . Count ( p = > p . Name = = "TargetFrameworks" ) . Should ( ) . Be ( 1 ) ;
2016-09-16 16:37:48 -07:00
mockProj . Properties . First ( p = > p . Name = = "TargetFrameworks" )
. Value . Should ( ) . Be ( "net20;net35;net40;net461;netstandard1.5" ) ;
2016-09-15 15:54:10 -07:00
}
2016-11-15 14:07:35 -08:00
[Fact]
2016-12-18 18:45:35 -08:00
public void MigratingDesktopTFMsAddsAllRuntimeIdentifiersIfTheProjectDoesNothaveAnyAlready ( )
2016-11-15 14:07:35 -08:00
{
var testDirectory = Temp . CreateDirectory ( ) . Path ;
var testPJ = new ProjectJsonBuilder ( TestAssetsManager )
. FromTestAssetBase ( "TestLibraryWithMultipleFrameworks" )
. SaveToDisk ( testDirectory ) ;
var projectContexts = ProjectContext . CreateContextForEachFramework ( testDirectory ) ;
var mockProj = ProjectRootElement . Create ( ) ;
2016-12-07 11:49:15 -10:00
var migrationSettings = MigrationSettings . CreateMigrationSettingsTestHook ( testDirectory , testDirectory , mockProj ) ;
2016-11-15 14:07:35 -08:00
var migrationInputs = new MigrationRuleInputs (
projectContexts ,
mockProj ,
mockProj . AddItemGroup ( ) ,
mockProj . AddPropertyGroup ( ) ) ;
new MigrateTFMRule ( ) . Apply ( migrationSettings , migrationInputs ) ;
mockProj . Properties . Count ( p = > p . Name = = "RuntimeIdentifiers" ) . Should ( ) . Be ( 1 ) ;
mockProj . Properties . First ( p = > p . Name = = "RuntimeIdentifiers" )
. Value . Should ( ) . Be ( "win7-x64;win7-x86;osx.10.10-x64;osx.10.11-x64;ubuntu.14.04-x64;ubuntu.16.04-x64;centos.7-x64;rhel.7.2-x64;debian.8-x64;fedora.23-x64;opensuse.13.2-x64" ) ;
}
2016-09-22 14:30:56 -07:00
[Fact]
2016-12-18 18:45:35 -08:00
public void MigrateTFMRuleDoesNotAddRuntimesWhenMigratingDesktopTFMsWithRuntimesAlready ( )
{
var testDirectory = Temp . CreateDirectory ( ) . Path ;
var testPJ = new ProjectJsonBuilder ( TestAssetsManager )
. FromTestAssetBase ( "TestAppWithMultipleFrameworksAndRuntimes" )
. SaveToDisk ( testDirectory ) ;
var projectContexts = ProjectContext . CreateContextForEachFramework ( testDirectory ) ;
var mockProj = ProjectRootElement . Create ( ) ;
var migrationSettings =
MigrationSettings . CreateMigrationSettingsTestHook ( testDirectory , testDirectory , mockProj ) ;
var migrationInputs = new MigrationRuleInputs (
projectContexts ,
mockProj ,
mockProj . AddItemGroup ( ) ,
mockProj . AddPropertyGroup ( ) ) ;
new MigrateTFMRule ( ) . Apply ( migrationSettings , migrationInputs ) ;
mockProj . Properties . Count ( p = > p . Name = = "RuntimeIdentifiers" ) . Should ( ) . Be ( 0 ) ;
}
[Fact]
public void MigratingSingleTFMProjectPopulatesTargetFramework ( )
2016-08-22 12:24:10 -07:00
{
var testDirectory = Temp . CreateDirectory ( ) . Path ;
var testPJ = new ProjectJsonBuilder ( TestAssetsManager )
2016-08-23 13:50:05 -07:00
. FromTestAssetBase ( "TestAppWithRuntimeOptions" )
2016-08-22 12:24:10 -07:00
. WithCustomProperty ( "buildOptions" , new Dictionary < string , string >
{
{ "emitEntryPoint" , "false" }
} )
. SaveToDisk ( testDirectory ) ;
2016-09-22 17:16:37 -07:00
var projectContexts = ProjectContext . CreateContextForEachFramework ( testDirectory ) ;
2016-08-22 12:24:10 -07:00
var mockProj = ProjectRootElement . Create ( ) ;
// Run BuildOptionsRule
2016-12-07 11:49:15 -10:00
var migrationSettings = MigrationSettings . CreateMigrationSettingsTestHook ( testDirectory , testDirectory , mockProj ) ;
2016-09-16 16:37:48 -07:00
var migrationInputs = new MigrationRuleInputs (
2016-09-22 17:16:37 -07:00
projectContexts ,
2016-09-16 16:37:48 -07:00
mockProj ,
mockProj . AddItemGroup ( ) ,
mockProj . AddPropertyGroup ( ) ) ;
2016-09-19 09:16:36 -07:00
2016-09-16 16:37:48 -07:00
new MigrateTFMRule ( ) . Apply ( migrationSettings , migrationInputs ) ;
2016-09-22 17:16:37 -07:00
Console . WriteLine ( mockProj . RawXml ) ;
2016-08-22 12:24:10 -07:00
2016-10-18 15:00:37 -07:00
mockProj . Properties . Count ( p = > p . Name = = "TargetFramework" ) . Should ( ) . Be ( 1 ) ;
2016-08-22 12:24:10 -07:00
}
}
}