Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
145 changes: 144 additions & 1 deletion integrationtests/Paket.IntegrationTests/BindingRedirect.fs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ open System
open System.IO
open NUnit.Framework
open FsUnit
open System.Text.RegularExpressions

[<Test>]
let ``install should redirect required assemblies only``() =
Expand Down Expand Up @@ -75,4 +76,146 @@ let ``#1195 should report broken app.config``() =
paket "install --redirects" "i001195-broken-appconfig" |> ignore
failwith "paket should fail"
with
| exn when exn.Message.Contains("Project1") && exn.Message.Contains("app.config") -> ()
| exn when exn.Message.Contains("Project1") && exn.Message.Contains("app.config") -> ()

[<Test>]
let ``#1218 install hard should replace all assembly redirects with required only``() =
paket "install --redirects --createnewbindingfiles --hard" "i001218-binding-redirect-replaces-all-redirects-with-required-only" |> ignore

let path = Path.Combine(scenarioTempPath "i001218-binding-redirect-replaces-all-redirects-with-required-only")
let config1Path = Path.Combine(path, "Project1", "app.config")
let config2Path = Path.Combine(path, "Project2", "app.config")
let config3Path = Path.Combine(path, "Project3", "app.config")
let config4Path = Path.Combine(path, "Project4", "app.config")

let config1 = File.ReadAllText(config1Path)
let config2 = File.ReadAllText(config2Path)
let config3 = File.ReadAllText(config3Path)
let config4 = File.ReadAllText(config4Path)

let Albedo = """<assemblyIdentity name="Ploeh.Albedo" publicKeyToken="179ef6dd03497bbd" culture="neutral" />"""
let AutoFixture = """<assemblyIdentity name="Ploeh.AutoFixture" publicKeyToken="b24654c590009d4f" culture="neutral" />"""
let ``AutoFixture.Idioms`` = """<assemblyIdentity name="Ploeh.AutoFixture.Idioms" publicKeyToken="b24654c590009d4f" culture="neutral" />"""
let ``AutoFixture.Xunit`` = """<assemblyIdentity name="Ploeh.AutoFixture.Xunit" publicKeyToken="b24654c590009d4f" culture="neutral" />"""
let log4net = """<assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral" />"""
let ``Newtonsoft.Json`` = """<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />"""
let ``Newtonsoft.Json.Schema`` = """<assemblyIdentity name="Newtonsoft.Json.Schema" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />"""
let xunit = """<assemblyIdentity name="xunit" publicKeyToken="8d05b1bb7a6fdb6c" culture="neutral" />"""
let ``xunit.extensions`` = """<assemblyIdentity name="xunit.extensions" publicKeyToken="8d05b1bb7a6fdb6c" culture="neutral" />"""
let ``Castle.Core`` = """<assemblyIdentity name="Castle.Core" publicKeyToken="407dd0808d44fbdc" culture="neutral" />"""
let ``Castle.Windsor`` = """<assemblyIdentity name="Castle.Windsor" publicKeyToken="407dd0808d44fbdc" culture="neutral" />"""

config1 |> shouldContainText Albedo
config1 |> shouldContainText AutoFixture
config1.Contains ``AutoFixture.Idioms`` |> shouldEqual false
config1.Contains ``AutoFixture.Xunit`` |> shouldEqual false
config1.Contains log4net |> shouldEqual false
config1 |> shouldContainText ``Newtonsoft.Json``
config1.Contains ``Newtonsoft.Json.Schema`` |> shouldEqual false
config1.Contains xunit |> shouldEqual false
config1 |> shouldContainText ``xunit.extensions``
config1 |> shouldContainText ``Castle.Core``
config1.Contains ``Castle.Windsor`` |> shouldEqual false

config2.Contains "<assemblyIdentity " |> shouldEqual false

config3.Contains Albedo |> shouldEqual false
config3.Contains AutoFixture |> shouldEqual false
config3.Contains ``AutoFixture.Idioms`` |> shouldEqual false
config3.Contains ``AutoFixture.Xunit`` |> shouldEqual false
config3.Contains log4net |> shouldEqual false
config3 |> shouldContainText ``Newtonsoft.Json``
config3.Contains ``Newtonsoft.Json.Schema`` |> shouldEqual false
config3.Contains xunit |> shouldEqual false
config3.Contains ``xunit.extensions`` |> shouldEqual false
config3 |> shouldContainText ``Castle.Core``
config3.Contains ``Castle.Windsor`` |> shouldEqual false

config4.Contains Albedo |> shouldEqual false
config4.Contains AutoFixture |> shouldEqual false
config4.Contains ``AutoFixture.Idioms`` |> shouldEqual false
config4.Contains ``AutoFixture.Xunit`` |> shouldEqual false
config4.Contains log4net |> shouldEqual false
config4.Contains ``Newtonsoft.Json`` |> shouldEqual false
config4.Contains ``Newtonsoft.Json.Schema`` |> shouldEqual false
config4.Contains xunit |> shouldEqual false
config4.Contains ``xunit.extensions`` |> shouldEqual false
config4 |> shouldContainText ``Castle.Core``
config4.Contains ``Castle.Windsor`` |> shouldEqual false

[<Test>]
let ``#1218 install should replace paket's binding redirects with required only``() =
paket "install --redirects --createnewbindingfiles" "i001218-binding-redirect-replaces-all-redirects-with-required-only" |> ignore

let path = Path.Combine(scenarioTempPath "i001218-binding-redirect-replaces-all-redirects-with-required-only")
let config1Path = Path.Combine(path, "Project1", "app.config")
let config2Path = Path.Combine(path, "Project2", "app.config")
let config3Path = Path.Combine(path, "Project3", "app.config")
let config4Path = Path.Combine(path, "Project4", "app.config")

let config1 = File.ReadAllText(config1Path)
let config2 = File.ReadAllText(config2Path)
let config3 = File.ReadAllText(config3Path)
let config4 = File.ReadAllText(config4Path)

let paketMark = "<Paket>True</Paket>\s*"

let Albedo = """<assemblyIdentity name="Ploeh.Albedo" publicKeyToken="179ef6dd03497bbd" culture="neutral" />"""
let AutoFixture = """<assemblyIdentity name="Ploeh.AutoFixture" publicKeyToken="b24654c590009d4f" culture="neutral" />"""
let ``AutoFixture.Idioms`` = """<assemblyIdentity name="Ploeh.AutoFixture.Idioms" publicKeyToken="b24654c590009d4f" culture="neutral" />"""
let ``AutoFixture.Xunit`` = """<assemblyIdentity name="Ploeh.AutoFixture.Xunit" publicKeyToken="b24654c590009d4f" culture="neutral" />"""
let log4net = """<assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral" />"""
let ``Newtonsoft.Json`` = """<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />"""
let ``Newtonsoft.Json.Schema`` = """<assemblyIdentity name="Newtonsoft.Json.Schema" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />"""
let xunit = """<assemblyIdentity name="xunit" publicKeyToken="8d05b1bb7a6fdb6c" culture="neutral" />"""
let ``xunit.extensions`` = """<assemblyIdentity name="xunit.extensions" publicKeyToken="8d05b1bb7a6fdb6c" culture="neutral" />"""
let ``Castle.Core`` = """<assemblyIdentity name="Castle.Core" publicKeyToken="407dd0808d44fbdc" culture="neutral" />"""
let ``Castle.Windsor`` = """<assemblyIdentity name="Castle.Windsor" publicKeyToken="407dd0808d44fbdc" culture="neutral" />"""

Regex.IsMatch(config1, paketMark + Albedo) |> shouldEqual true
Regex.IsMatch(config1, paketMark + AutoFixture) |> shouldEqual true
config1.Contains ``AutoFixture.Idioms`` |> shouldEqual false
config1.Contains ``AutoFixture.Xunit`` |> shouldEqual false
config1.Contains log4net |> shouldEqual false
Regex.IsMatch(config1, paketMark + ``Newtonsoft.Json``) |> shouldEqual true
config1.Contains ``Newtonsoft.Json.Schema`` |> shouldEqual false
config1.Contains xunit |> shouldEqual false
Regex.IsMatch(config1, paketMark + ``xunit.extensions``) |> shouldEqual true
Regex.IsMatch(config1, paketMark + ``Castle.Core``) |> shouldEqual true
config1.Contains ``Castle.Windsor`` |> shouldEqual false

config2.Contains Albedo |> shouldEqual false
config2.Contains AutoFixture |> shouldEqual false
config2.Contains ``AutoFixture.Idioms`` |> shouldEqual false
config2.Contains ``AutoFixture.Xunit`` |> shouldEqual false
config2.Contains log4net |> shouldEqual false
config2 |> shouldContainText ``Newtonsoft.Json``
config2.Contains ``Newtonsoft.Json.Schema`` |> shouldEqual false
config2.Contains xunit |> shouldEqual false
config2.Contains ``xunit.extensions`` |> shouldEqual false
config2.Contains ``Castle.Core`` |> shouldEqual false
config2.Contains ``Castle.Windsor`` |> shouldEqual false

config3.Contains Albedo |> shouldEqual false
config3 |> shouldContainText AutoFixture
config3.Contains ``AutoFixture.Idioms`` |> shouldEqual false
config3.Contains ``AutoFixture.Xunit`` |> shouldEqual false
config3.Contains log4net |> shouldEqual false
Regex.IsMatch(config3, paketMark + ``Newtonsoft.Json``) |> shouldEqual true
config3.Contains ``Newtonsoft.Json.Schema`` |> shouldEqual false
config3.Contains xunit |> shouldEqual false
config3.Contains ``xunit.extensions`` |> shouldEqual false
Regex.IsMatch(config3, paketMark + ``Castle.Core``) |> shouldEqual true
config3.Contains ``Castle.Windsor`` |> shouldEqual false

config4.Contains Albedo |> shouldEqual false
config4.Contains AutoFixture |> shouldEqual false
config4.Contains ``AutoFixture.Idioms`` |> shouldEqual false
config4.Contains ``AutoFixture.Xunit`` |> shouldEqual false
config4.Contains log4net |> shouldEqual false
config4 |> shouldContainText ``Newtonsoft.Json``
config4.Contains ``Newtonsoft.Json.Schema`` |> shouldEqual false
config4.Contains xunit |> shouldEqual false
config4.Contains ``xunit.extensions`` |> shouldEqual false
Regex.IsMatch(config4, paketMark + ``Castle.Core``) |> shouldEqual true
config4.Contains ``Castle.Windsor`` |> shouldEqual false
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>e789c72a-5cfd-436b-8ef1-61aa2852a89f</ProjectGuid>
<OutputType>Library</OutputType>
<RootNamespace>Project1</RootNamespace>
<AssemblyName>Project1</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<TargetFSharpCoreVersion>4.3.0.0</TargetFSharpCoreVersion>
<Name>Project1</Name>
<TargetFrameworkProfile />
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
<RestorePackages>true</RestorePackages>
<OutputPath>bin\$(Configuration)\</OutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<Tailcalls>false</Tailcalls>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<WarningLevel>3</WarningLevel>
<DocumentationFile>bin\Debug\fsharp_project_scaffold_tests.XML</DocumentationFile>
<StartAction>Project</StartAction>
<StartProgram>
</StartProgram>
<StartArguments>
</StartArguments>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<Tailcalls>true</Tailcalls>
<DefineConstants>TRACE</DefineConstants>
<WarningLevel>3</WarningLevel>
<DocumentationFile>bin\Release\Project1.xml</DocumentationFile>
</PropertyGroup>
<PropertyGroup>
<MinimumVisualStudioVersion Condition="'$(MinimumVisualStudioVersion)' == ''">11</MinimumVisualStudioVersion>
</PropertyGroup>
<Choose>
<When Condition="'$(VisualStudioVersion)' == '11.0'">
<PropertyGroup Condition="Exists('$(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets')">
<FSharpTargetsPath>$(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets</FSharpTargetsPath>
</PropertyGroup>
</When>
<Otherwise>
<PropertyGroup Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets')">
<FSharpTargetsPath>$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets</FSharpTargetsPath>
</PropertyGroup>
</Otherwise>
</Choose>
<Import Project="$(FSharpTargetsPath)" />
<ItemGroup>
<Reference Include="mscorlib" />
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Project3\Project3.fsproj">
<Name>Project3</Name>
<Project>{3241afe4-afee-4465-a482-5abbc0bf6457}</Project>
<Private>True</Private>
</ProjectReference>
</ItemGroup>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
AutoFixture.Xunit
AutoFixture.Idioms
Newtonsoft.Json
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>bdf41042-8cb5-4723-aa90-18c05f9ffe85</ProjectGuid>
<OutputType>Library</OutputType>
<RootNamespace>Project2</RootNamespace>
<AssemblyName>Project2</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<TargetFSharpCoreVersion>4.3.0.0</TargetFSharpCoreVersion>
<Name>Project2</Name>
<TargetFrameworkProfile />
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
<RestorePackages>true</RestorePackages>
<OutputPath>bin\$(Configuration)\</OutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<Tailcalls>false</Tailcalls>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<WarningLevel>3</WarningLevel>
<DocumentationFile>bin\Debug\fsharp_project_scaffold_tests.XML</DocumentationFile>
<StartAction>Project</StartAction>
<StartProgram>
</StartProgram>
<StartArguments>
</StartArguments>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<Tailcalls>true</Tailcalls>
<DefineConstants>TRACE</DefineConstants>
<WarningLevel>3</WarningLevel>
<DocumentationFile>bin\Release\Project2.xml</DocumentationFile>
</PropertyGroup>
<PropertyGroup>
<MinimumVisualStudioVersion Condition="'$(MinimumVisualStudioVersion)' == ''">11</MinimumVisualStudioVersion>
</PropertyGroup>
<Choose>
<When Condition="'$(VisualStudioVersion)' == '11.0'">
<PropertyGroup Condition="Exists('$(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets')">
<FSharpTargetsPath>$(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets</FSharpTargetsPath>
</PropertyGroup>
</When>
<Otherwise>
<PropertyGroup Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets')">
<FSharpTargetsPath>$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets</FSharpTargetsPath>
</PropertyGroup>
</Otherwise>
</Choose>
<Import Project="$(FSharpTargetsPath)" />
<ItemGroup>
<Reference Include="mscorlib" />
<Reference Include="System" />
</ItemGroup>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime><assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-999.999.999.999" newVersion="7.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<Paket>TRUE</Paket>
<assemblyIdentity name="xunit.extensions" publicKeyToken="8d05b1bb7a6fdb6c" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-999.999.999.999" newVersion="1.9.2.1705" />
</dependentAssembly>
</assemblyBinding></runtime></configuration>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Newtonsoft.Json
Loading