diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index bcd0082c6f..fd40118888 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -38,6 +38,13 @@ jobs:
inputs:
version: '2.1.403'
+ - task: CmdLine@2
+ displayName: 'Install Mono 5.18'
+ inputs:
+ script: |
+ curl -o ./mono.pkg https://download.mono-project.com/archive/5.18.0/macos-10-universal/MonoFramework-MDK-5.18.0.225.macos10.xamarin.universal.pkg
+ sudo installer -verbose -pkg ./mono.pkg -target /
+
- task: Xcode@5
inputs:
actions: 'build'
diff --git a/build/NetFX.props b/build/NetFX.props
index d8b2daf13a..4d2841714b 100644
--- a/build/NetFX.props
+++ b/build/NetFX.props
@@ -3,4 +3,9 @@
/usr/lib/mono/4.6.1-api
/Library/Frameworks/Mono.framework/Versions/Current/lib/mono/4.6.1-api
+
+ /usr/lib/mono/4.7-api/
+ /Library/Frameworks/Mono.framework/Versions/Current/lib/mono/4.7-api
+
+
diff --git a/build/UnitTests.NetFX.props b/build/UnitTests.NetFX.props
new file mode 100644
index 0000000000..e9a29d80fe
--- /dev/null
+++ b/build/UnitTests.NetFX.props
@@ -0,0 +1,8 @@
+
+
+
+
+ PreserveNewest
+
+
+
diff --git a/build/xunit.runner.mono.json b/build/xunit.runner.mono.json
new file mode 100644
index 0000000000..4fb88b54c6
--- /dev/null
+++ b/build/xunit.runner.mono.json
@@ -0,0 +1 @@
+{ "appDomain": "denied" }
diff --git a/nukebuild/Build.cs b/nukebuild/Build.cs
index a14842cfd3..bb31034299 100644
--- a/nukebuild/Build.cs
+++ b/nukebuild/Build.cs
@@ -5,6 +5,7 @@ using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Threading;
+using System.Xml.Linq;
using Nuke.Common;
using Nuke.Common.Git;
using Nuke.Common.ProjectModel;
@@ -56,6 +57,17 @@ partial class Build : NukeBuild
Information("IsReleasable: " + Parameters.IsReleasable);
Information("IsMyGetRelease: " + Parameters.IsMyGetRelease);
Information("IsNuGetRelease: " + Parameters.IsNuGetRelease);
+
+ void ExecWait(string preamble, string command, string args)
+ {
+ Console.WriteLine(preamble);
+ Process.Start(new ProcessStartInfo(command, args) {UseShellExecute = false}).WaitForExit();
+ }
+ ExecWait("dotnet version:", "dotnet", "--version");
+ if (Parameters.IsRunningOnUnix)
+ ExecWait("Mono version:", "mono", "--version");
+
+
}
Target Clean => _ => _.Executes(() =>
@@ -92,16 +104,24 @@ partial class Build : NukeBuild
);
});
- void RunCoreTest(string project, bool coreOnly = false)
+ void RunCoreTest(string project)
{
if(!project.EndsWith(".csproj"))
project = System.IO.Path.Combine(project, System.IO.Path.GetFileName(project)+".csproj");
Information("Running tests from " + project);
- var frameworks = new List(){"netcoreapp2.0"};
+ XDocument xdoc;
+ using (var s = File.OpenRead(project))
+ xdoc = XDocument.Load(s);
+
+ List frameworks = null;
+ var targets = xdoc.Root.Descendants("TargetFrameworks").FirstOrDefault();
+ if (targets != null)
+ frameworks = targets.Value.Split(';').Where(f => !string.IsNullOrWhiteSpace(f)).ToList();
+ else
+ frameworks = new List {xdoc.Root.Descendants("TargetFramework").First().Value};
+
foreach(var fw in frameworks)
{
- if(!fw.StartsWith("netcoreapp") && coreOnly)
- continue;
Information("Running for " + fw);
DotNetTest(c =>
{
@@ -124,18 +144,18 @@ partial class Build : NukeBuild
.DependsOn(Compile)
.Executes(() =>
{
- RunCoreTest("./tests/Avalonia.Animation.UnitTests", false);
- RunCoreTest("./tests/Avalonia.Base.UnitTests", false);
- RunCoreTest("./tests/Avalonia.Controls.UnitTests", false);
- RunCoreTest("./tests/Avalonia.Input.UnitTests", false);
- RunCoreTest("./tests/Avalonia.Interactivity.UnitTests", false);
- RunCoreTest("./tests/Avalonia.Layout.UnitTests", false);
- RunCoreTest("./tests/Avalonia.Markup.UnitTests", false);
- RunCoreTest("./tests/Avalonia.Markup.Xaml.UnitTests", false);
- RunCoreTest("./tests/Avalonia.Styling.UnitTests", false);
- RunCoreTest("./tests/Avalonia.Visuals.UnitTests", false);
- RunCoreTest("./tests/Avalonia.Skia.UnitTests", false);
- RunCoreTest("./tests/Avalonia.ReactiveUI.UnitTests", false);
+ RunCoreTest("./tests/Avalonia.Animation.UnitTests");
+ RunCoreTest("./tests/Avalonia.Base.UnitTests");
+ RunCoreTest("./tests/Avalonia.Controls.UnitTests");
+ RunCoreTest("./tests/Avalonia.Input.UnitTests");
+ RunCoreTest("./tests/Avalonia.Interactivity.UnitTests");
+ RunCoreTest("./tests/Avalonia.Layout.UnitTests");
+ RunCoreTest("./tests/Avalonia.Markup.UnitTests");
+ RunCoreTest("./tests/Avalonia.Markup.Xaml.UnitTests");
+ RunCoreTest("./tests/Avalonia.Styling.UnitTests");
+ RunCoreTest("./tests/Avalonia.Visuals.UnitTests");
+ RunCoreTest("./tests/Avalonia.Skia.UnitTests");
+ RunCoreTest("./tests/Avalonia.ReactiveUI.UnitTests");
});
Target RunRenderTests => _ => _
@@ -143,9 +163,9 @@ partial class Build : NukeBuild
.DependsOn(Compile)
.Executes(() =>
{
- RunCoreTest("./tests/Avalonia.Skia.RenderTests/Avalonia.Skia.RenderTests.csproj", true);
+ RunCoreTest("./tests/Avalonia.Skia.RenderTests/Avalonia.Skia.RenderTests.csproj");
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
- RunCoreTest("./tests/Avalonia.Direct2D1.RenderTests/Avalonia.Direct2D1.RenderTests.csproj", true);
+ RunCoreTest("./tests/Avalonia.Direct2D1.RenderTests/Avalonia.Direct2D1.RenderTests.csproj");
});
Target RunDesignerTests => _ => _
@@ -153,7 +173,7 @@ partial class Build : NukeBuild
.DependsOn(Compile)
.Executes(() =>
{
- RunCoreTest("./tests/Avalonia.DesignerSupport.Tests", false);
+ RunCoreTest("./tests/Avalonia.DesignerSupport.Tests");
});
[PackageExecutable("JetBrains.dotMemoryUnit", "dotMemoryUnit.exe")] readonly Tool DotMemoryUnit;
diff --git a/src/Avalonia.Animation/AnimatorKeyFrame.cs b/src/Avalonia.Animation/AnimatorKeyFrame.cs
index 78a9a1e412..36d15e518e 100644
--- a/src/Avalonia.Animation/AnimatorKeyFrame.cs
+++ b/src/Avalonia.Animation/AnimatorKeyFrame.cs
@@ -1,5 +1,6 @@
using System;
using System.ComponentModel;
+using Avalonia.Animation.Animators;
using Avalonia.Data;
using Avalonia.Reactive;
diff --git a/src/Avalonia.Animation/IterationCount.cs b/src/Avalonia.Animation/IterationCount.cs
index eafc483868..e9cd0686d8 100644
--- a/src/Avalonia.Animation/IterationCount.cs
+++ b/src/Avalonia.Animation/IterationCount.cs
@@ -44,7 +44,7 @@ namespace Avalonia.Animation
{
if (type > IterationType.Infinite)
{
- throw new ArgumentException("Invalid value", "type");
+ throw new ArgumentException("Invalid value", nameof(type));
}
_type = type;
diff --git a/src/Avalonia.Base/Collections/AvaloniaDictionary.cs b/src/Avalonia.Base/Collections/AvaloniaDictionary.cs
index e8dc2a5ed7..4de4c540a0 100644
--- a/src/Avalonia.Base/Collections/AvaloniaDictionary.cs
+++ b/src/Avalonia.Base/Collections/AvaloniaDictionary.cs
@@ -148,7 +148,7 @@ namespace Avalonia.Collections
{
if (_inner.TryGetValue(key, out TValue value))
{
- PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Count"));
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Count)));
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs($"Item[{key}]"));
if (CollectionChanged != null)
@@ -209,7 +209,7 @@ namespace Avalonia.Collections
private void NotifyAdd(TKey key, TValue value)
{
- PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Count"));
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Count)));
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs($"Item[{key}]"));
diff --git a/src/Avalonia.Base/Collections/AvaloniaList.cs b/src/Avalonia.Base/Collections/AvaloniaList.cs
index d5a4e63003..4d4a561b08 100644
--- a/src/Avalonia.Base/Collections/AvaloniaList.cs
+++ b/src/Avalonia.Base/Collections/AvaloniaList.cs
@@ -511,7 +511,7 @@ namespace Avalonia.Collections
///
private void NotifyCountChanged()
{
- PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Count"));
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Count)));
}
///
diff --git a/src/Avalonia.Base/Platform/IAssetLoader.cs b/src/Avalonia.Base/Platform/IAssetLoader.cs
index 691fa2fc12..880ed62046 100644
--- a/src/Avalonia.Base/Platform/IAssetLoader.cs
+++ b/src/Avalonia.Base/Platform/IAssetLoader.cs
@@ -65,6 +65,7 @@ namespace Avalonia.Platform
/// Gets all assets of a folder and subfolders that match specified uri.
///
/// The URI.
+ /// The base URI.
/// All matching assets as a tuple of the absolute path to the asset and the assembly containing the asset
IEnumerable GetAssets(Uri uri, Uri baseUri);
}
diff --git a/src/Avalonia.Controls/Calendar/DatePicker.cs b/src/Avalonia.Controls/Calendar/DatePicker.cs
index 2270598623..70de8bec16 100644
--- a/src/Avalonia.Controls/Calendar/DatePicker.cs
+++ b/src/Avalonia.Controls/Calendar/DatePicker.cs
@@ -954,7 +954,7 @@ namespace Avalonia.Controls
}
else
{
- var dateValidationError = new DatePickerDateValidationErrorEventArgs(new ArgumentOutOfRangeException("text", "SelectedDate value is not valid."), text);
+ var dateValidationError = new DatePickerDateValidationErrorEventArgs(new ArgumentOutOfRangeException(nameof(text), "SelectedDate value is not valid."), text);
OnDateValidationError(dateValidationError);
if (dateValidationError.ThrowException)
diff --git a/src/Avalonia.Controls/GridLength.cs b/src/Avalonia.Controls/GridLength.cs
index f6a608cd71..02be95b647 100644
--- a/src/Avalonia.Controls/GridLength.cs
+++ b/src/Avalonia.Controls/GridLength.cs
@@ -56,12 +56,12 @@ namespace Avalonia.Controls
{
if (value < 0 || double.IsNaN(value) || double.IsInfinity(value))
{
- throw new ArgumentException("Invalid value", "value");
+ throw new ArgumentException("Invalid value", nameof(value));
}
if (type < GridUnitType.Auto || type > GridUnitType.Star)
{
- throw new ArgumentException("Invalid value", "type");
+ throw new ArgumentException("Invalid value", nameof(type));
}
_type = type;
diff --git a/src/Avalonia.Controls/NumericUpDown/NumericUpDown.cs b/src/Avalonia.Controls/NumericUpDown/NumericUpDown.cs
index de68eb0ab0..57db1e19bb 100644
--- a/src/Avalonia.Controls/NumericUpDown/NumericUpDown.cs
+++ b/src/Avalonia.Controls/NumericUpDown/NumericUpDown.cs
@@ -487,7 +487,7 @@ namespace Avalonia.Controls
{
if (e == null)
{
- throw new ArgumentNullException("e");
+ throw new ArgumentNullException(nameof(e));
}
var handler = Spinned;
diff --git a/src/Avalonia.Styling/Styling/Setter.cs b/src/Avalonia.Styling/Styling/Setter.cs
index 54d0a7d40f..cfe17a4291 100644
--- a/src/Avalonia.Styling/Styling/Setter.cs
+++ b/src/Avalonia.Styling/Styling/Setter.cs
@@ -69,7 +69,7 @@ namespace Avalonia.Styling
{
throw new ArgumentException(
"Cannot assign a control to Setter.Value. Wrap the control in a .",
- "value");
+ nameof(value));
}
_value = value;
diff --git a/src/Skia/Avalonia.Skia/SurfaceRenderTarget.cs b/src/Skia/Avalonia.Skia/SurfaceRenderTarget.cs
index dcd4b36d56..4b7eae1af4 100644
--- a/src/Skia/Avalonia.Skia/SurfaceRenderTarget.cs
+++ b/src/Skia/Avalonia.Skia/SurfaceRenderTarget.cs
@@ -45,6 +45,7 @@ namespace Avalonia.Skia
///
/// Create backing Skia surface.
///
+ /// GPU.
/// Width.
/// Height.
/// Format.
diff --git a/src/Skia/Avalonia.Skia/WriteableBitmapImpl.cs b/src/Skia/Avalonia.Skia/WriteableBitmapImpl.cs
index eb3a11b2a1..c9d6fa6c11 100644
--- a/src/Skia/Avalonia.Skia/WriteableBitmapImpl.cs
+++ b/src/Skia/Avalonia.Skia/WriteableBitmapImpl.cs
@@ -123,6 +123,7 @@ namespace Avalonia.Skia
///
/// Create framebuffer from given bitmap.
///
+ /// Parent bitmap impl.
/// Bitmap.
public BitmapFramebuffer(WriteableBitmapImpl parent, SKBitmap bitmap)
{
diff --git a/tests/Avalonia.Animation.UnitTests/Avalonia.Animation.UnitTests.csproj b/tests/Avalonia.Animation.UnitTests/Avalonia.Animation.UnitTests.csproj
index 1b2ba3c7de..ef515ce155 100644
--- a/tests/Avalonia.Animation.UnitTests/Avalonia.Animation.UnitTests.csproj
+++ b/tests/Avalonia.Animation.UnitTests/Avalonia.Animation.UnitTests.csproj
@@ -1,9 +1,11 @@
- netcoreapp2.0
+ netcoreapp2.0;net47
Library
+ true
+
@@ -22,4 +24,4 @@
-
\ No newline at end of file
+
diff --git a/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj b/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj
index 373b3f7196..6e885f33be 100644
--- a/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj
+++ b/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj
@@ -1,9 +1,11 @@
- netcoreapp2.0
+ netcoreapp2.0;net47
Library
+ true
+
diff --git a/tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_Property.cs b/tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_Property.cs
index f282d1baf3..b56afa33a4 100644
--- a/tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_Property.cs
+++ b/tests/Avalonia.Base.UnitTests/Data/Core/ExpressionObserverTests_Property.cs
@@ -558,7 +558,12 @@ namespace Avalonia.Base.UnitTests.Data.Core
var result = run();
result.Item1.Subscribe(x => { });
- GC.Collect();
+ // Mono trickery
+ GC.Collect(2);
+ GC.WaitForPendingFinalizers();
+ GC.WaitForPendingFinalizers();
+ GC.Collect(2);
+
Assert.Null(result.Item2.Target);
}
diff --git a/tests/Avalonia.Base.UnitTests/Data/Core/Plugins/DataAnnotationsValidationPluginTests.cs b/tests/Avalonia.Base.UnitTests/Data/Core/Plugins/DataAnnotationsValidationPluginTests.cs
index 2bffb7b84a..378c225e23 100644
--- a/tests/Avalonia.Base.UnitTests/Data/Core/Plugins/DataAnnotationsValidationPluginTests.cs
+++ b/tests/Avalonia.Base.UnitTests/Data/Core/Plugins/DataAnnotationsValidationPluginTests.cs
@@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
+using System.Linq;
using Avalonia.Data;
using Avalonia.Data.Core.Plugins;
using Avalonia.UnitTests;
@@ -86,17 +87,18 @@ namespace Avalonia.Markup.UnitTests.Data.Plugins
validator.SetValue("123456", BindingPriority.LocalValue);
validator.SetValue("abcdefghijklm", BindingPriority.LocalValue);
- Assert.Equal(new[]
- {
- new BindingNotification(null),
- new BindingNotification("123456"),
- new BindingNotification(
- new AggregateException(
- new ValidationException("The PhoneNumber field is not a valid phone number."),
- new ValidationException("The field PhoneNumber must be a string or array type with a maximum length of '10'.")),
- BindingErrorType.DataValidationError,
- "abcdefghijklm"),
- }, result);
+ Assert.Equal(3, result.Count);
+ Assert.Equal(new BindingNotification(null), result[0]);
+ Assert.Equal(new BindingNotification("123456"), result[1]);
+ var errorResult = (BindingNotification)result[2];
+ Assert.Equal(BindingErrorType.DataValidationError, errorResult.ErrorType);
+ Assert.Equal("abcdefghijklm", errorResult.Value);
+ var exceptions = ((AggregateException)(errorResult.Error)).InnerExceptions;
+ Assert.True(exceptions.Any(ex =>
+ ex.Message.Contains("The PhoneNumber field is not a valid phone number.")));
+ Assert.True(exceptions.Any(ex =>
+ ex.Message.Contains("The field PhoneNumber must be a string or array type with a maximum length of '10'.")));
+
}
private class Data
diff --git a/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj b/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj
index b418d56fcd..aa470bce9d 100644
--- a/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj
+++ b/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj
@@ -1,10 +1,12 @@
- netcoreapp2.0
+ netcoreapp2.0;net47
latest
Library
+ true
+
@@ -26,4 +28,4 @@
-
\ No newline at end of file
+
diff --git a/tests/Avalonia.Controls.UnitTests/GridLayoutTests.cs b/tests/Avalonia.Controls.UnitTests/GridLayoutTests.cs
index fbb90de505..93163f4a92 100644
--- a/tests/Avalonia.Controls.UnitTests/GridLayoutTests.cs
+++ b/tests/Avalonia.Controls.UnitTests/GridLayoutTests.cs
@@ -1,4 +1,5 @@
-using System.Collections.Generic;
+using System.Collections;
+using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using Avalonia.Controls.Utils;
@@ -16,7 +17,7 @@ namespace Avalonia.Controls.UnitTests
[InlineData("100, 200, 300", 600d, 600d, new[] { 100d, 200d, 300d })]
[InlineData("100, 200, 300", 400d, 400d, new[] { 100d, 200d, 100d })]
public void MeasureArrange_AllPixelLength_Correct(string length, double containerLength,
- double expectedDesiredLength, IList expectedLengthList)
+ double expectedDesiredLength, IList expectedLengthList)
{
TestRowDefinitionsOnly(length, containerLength, expectedDesiredLength, expectedLengthList);
}
@@ -25,7 +26,7 @@ namespace Avalonia.Controls.UnitTests
[InlineData("*,2*,3*", 0d, 0d, new[] { 0d, 0d, 0d })]
[InlineData("*,2*,3*", 600d, 0d, new[] { 100d, 200d, 300d })]
public void MeasureArrange_AllStarLength_Correct(string length, double containerLength,
- double expectedDesiredLength, IList expectedLengthList)
+ double expectedDesiredLength, IList expectedLengthList)
{
TestRowDefinitionsOnly(length, containerLength, expectedDesiredLength, expectedLengthList);
}
@@ -36,7 +37,7 @@ namespace Avalonia.Controls.UnitTests
[InlineData("100,2*,3*", 100d, 100d, new[] { 100d, 0d, 0d })]
[InlineData("100,2*,3*", 50d, 50d, new[] { 50d, 0d, 0d })]
public void MeasureArrange_MixStarPixelLength_Correct(string length, double containerLength,
- double expectedDesiredLength, IList expectedLengthList)
+ double expectedDesiredLength, IList expectedLengthList)
{
TestRowDefinitionsOnly(length, containerLength, expectedDesiredLength, expectedLengthList);
}
@@ -49,7 +50,7 @@ namespace Avalonia.Controls.UnitTests
[InlineData("100,200,Auto", 100d, 100d, new[] { 100d, 0d, 0d })]
[InlineData("100,200,Auto", 50d, 50d, new[] { 50d, 0d, 0d })]
public void MeasureArrange_MixAutoPixelLength_Correct(string length, double containerLength,
- double expectedDesiredLength, IList expectedLengthList)
+ double expectedDesiredLength, IList expectedLengthList)
{
TestRowDefinitionsOnly(length, containerLength, expectedDesiredLength, expectedLengthList);
}
@@ -58,7 +59,7 @@ namespace Avalonia.Controls.UnitTests
[InlineData("*,2*,Auto", 0d, 0d, new[] { 0d, 0d, 0d })]
[InlineData("*,2*,Auto", 600d, 0d, new[] { 200d, 400d, 0d })]
public void MeasureArrange_MixAutoStarLength_Correct(string length, double containerLength,
- double expectedDesiredLength, IList expectedLengthList)
+ double expectedDesiredLength, IList expectedLengthList)
{
TestRowDefinitionsOnly(length, containerLength, expectedDesiredLength, expectedLengthList);
}
@@ -69,14 +70,24 @@ namespace Avalonia.Controls.UnitTests
[InlineData("*,200,Auto", 200d, 200d, new[] { 0d, 200d, 0d })]
[InlineData("*,200,Auto", 100d, 100d, new[] { 0d, 100d, 0d })]
public void MeasureArrange_MixAutoStarPixelLength_Correct(string length, double containerLength,
- double expectedDesiredLength, IList expectedLengthList)
+ double expectedDesiredLength, IList expectedLengthList)
{
TestRowDefinitionsOnly(length, containerLength, expectedDesiredLength, expectedLengthList);
}
+
+ ///
+ /// This is needed because Mono somehow converts double array to object array in attribute metadata
+ ///
+ static void AssertEqual(IList expected, IReadOnlyList actual)
+ {
+ var conv = expected.Cast().ToArray();
+ Assert.Equal(conv, actual);
+ }
+
[SuppressMessage("ReSharper", "ParameterOnlyUsedForPreconditionCheck.Local")]
private static void TestRowDefinitionsOnly(string length, double containerLength,
- double expectedDesiredLength, IList expectedLengthList)
+ double expectedDesiredLength, IList expectedLengthList)
{
// Arrange
var layout = new GridLayout(new RowDefinitions(length));
@@ -84,11 +95,11 @@ namespace Avalonia.Controls.UnitTests
// Measure - Action & Assert
var measure = layout.Measure(containerLength);
Assert.Equal(expectedDesiredLength, measure.DesiredLength);
- Assert.Equal(expectedLengthList, measure.LengthList);
+ AssertEqual(expectedLengthList, measure.LengthList);
// Arrange - Action & Assert
var arrange = layout.Arrange(containerLength, measure);
- Assert.Equal(expectedLengthList, arrange.LengthList);
+ AssertEqual(expectedLengthList, arrange.LengthList);
}
[Theory]
@@ -99,7 +110,7 @@ namespace Avalonia.Controls.UnitTests
[InlineData("*,2*,Auto", 0d, new[] { Inf, Inf, 0d }, new[] { 0d, 0d, 0d })]
[InlineData("*,200,Auto", 200d, new[] { Inf, 200d, 0d }, new[] { 0d, 200d, 0d })]
public void MeasureArrange_InfiniteMeasure_Correct(string length, double expectedDesiredLength,
- IList expectedMeasureList, IList expectedArrangeList)
+ IList expectedMeasureList, IList expectedArrangeList)
{
// Arrange
var layout = new GridLayout(new RowDefinitions(length));
@@ -107,34 +118,34 @@ namespace Avalonia.Controls.UnitTests
// Measure - Action & Assert
var measure = layout.Measure(Inf);
Assert.Equal(expectedDesiredLength, measure.DesiredLength);
- Assert.Equal(expectedMeasureList, measure.LengthList);
+ AssertEqual(expectedMeasureList, measure.LengthList);
// Arrange - Action & Assert
var arrange = layout.Arrange(measure.DesiredLength, measure);
- Assert.Equal(expectedArrangeList, arrange.LengthList);
+ AssertEqual(expectedArrangeList, arrange.LengthList);
}
[Theory]
[InlineData("Auto,*,*", new[] { 100d, 100d, 100d }, 600d, 300d, new[] { 100d, 250d, 250d })]
public void MeasureArrange_ChildHasSize_Correct(string length,
- IList childLengthList, double containerLength,
- double expectedDesiredLength, IList expectedLengthList)
+ IList childLengthList, double containerLength,
+ double expectedDesiredLength, IList expectedLengthList)
{
// Arrange
var lengthList = new ColumnDefinitions(length);
var layout = new GridLayout(lengthList);
layout.AppendMeasureConventions(
Enumerable.Range(0, lengthList.Count).ToDictionary(x => x, x => (x, 1)),
- x => childLengthList[x]);
+ x => (double)childLengthList[x]);
// Measure - Action & Assert
var measure = layout.Measure(containerLength);
Assert.Equal(expectedDesiredLength, measure.DesiredLength);
- Assert.Equal(expectedLengthList, measure.LengthList);
+ AssertEqual(expectedLengthList, measure.LengthList);
// Arrange - Action & Assert
var arrange = layout.Arrange(containerLength, measure);
- Assert.Equal(expectedLengthList, arrange.LengthList);
+ AssertEqual(expectedLengthList, arrange.LengthList);
}
[Theory]
@@ -145,7 +156,7 @@ namespace Avalonia.Controls.UnitTests
[InlineData(160d, 160d, new[] { 100d, 20d, 40d }, new[] { 100d, 20d, 40d })]
public void MeasureArrange_ChildHasSizeAndHasMultiSpan_Correct(
double containerLength, double expectedDesiredLength,
- IList expectedMeasureLengthList, IList expectedArrangeLengthList)
+ IList expectedMeasureLengthList, IList expectedArrangeLengthList)
{
var length = "100,*,2*";
var childLengthList = new[] { 150d, 150d, 150d };
@@ -161,13 +172,13 @@ namespace Avalonia.Controls.UnitTests
// Measure - Action & Assert
var measure = layout.Measure(containerLength);
Assert.Equal(expectedDesiredLength, measure.DesiredLength);
- Assert.Equal(expectedMeasureLengthList, measure.LengthList);
+ AssertEqual(expectedMeasureLengthList, measure.LengthList);
// Arrange - Action & Assert
var arrange = layout.Arrange(
double.IsInfinity(containerLength) ? measure.DesiredLength : containerLength,
measure);
- Assert.Equal(expectedArrangeLengthList, arrange.LengthList);
+ AssertEqual(expectedArrangeLengthList, arrange.LengthList);
}
}
}
diff --git a/tests/Avalonia.Input.UnitTests/Avalonia.Input.UnitTests.csproj b/tests/Avalonia.Input.UnitTests/Avalonia.Input.UnitTests.csproj
index 1b2ba3c7de..ef515ce155 100644
--- a/tests/Avalonia.Input.UnitTests/Avalonia.Input.UnitTests.csproj
+++ b/tests/Avalonia.Input.UnitTests/Avalonia.Input.UnitTests.csproj
@@ -1,9 +1,11 @@
- netcoreapp2.0
+ netcoreapp2.0;net47
Library
+ true
+
@@ -22,4 +24,4 @@
-
\ No newline at end of file
+
diff --git a/tests/Avalonia.Interactivity.UnitTests/Avalonia.Interactivity.UnitTests.csproj b/tests/Avalonia.Interactivity.UnitTests/Avalonia.Interactivity.UnitTests.csproj
index bc883d0251..6b19d81034 100644
--- a/tests/Avalonia.Interactivity.UnitTests/Avalonia.Interactivity.UnitTests.csproj
+++ b/tests/Avalonia.Interactivity.UnitTests/Avalonia.Interactivity.UnitTests.csproj
@@ -1,9 +1,12 @@
netcoreapp2.0
+ netcoreapp2.0;net47
Library
+ true
+
@@ -20,4 +23,4 @@
-
\ No newline at end of file
+
diff --git a/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj b/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj
index 1680ecf798..aba5f2d469 100644
--- a/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj
+++ b/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj
@@ -1,9 +1,11 @@
- netcoreapp2.0
+ netcoreapp2.0;net47
Library
+ true
+
@@ -23,4 +25,4 @@
-
\ No newline at end of file
+
diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj b/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj
index 735d5c421a..8b47bcec30 100644
--- a/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj
+++ b/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj
@@ -1,9 +1,11 @@
- netcoreapp2.0
+ netcoreapp2.0;net47
Library
+ true
+
@@ -36,4 +38,4 @@
-
\ No newline at end of file
+
diff --git a/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj b/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj
index e65dd848dd..3fd280f7ab 100644
--- a/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj
+++ b/tests/Avalonia.Styling.UnitTests/Avalonia.Styling.UnitTests.csproj
@@ -1,10 +1,12 @@
- netcoreapp2.0
+ netcoreapp2.0;net47
Library
CS0067
+ true
+
@@ -23,4 +25,4 @@
-
\ No newline at end of file
+
diff --git a/tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj b/tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj
index 2b559c9c56..50c2e580b0 100644
--- a/tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj
+++ b/tests/Avalonia.Visuals.UnitTests/Avalonia.Visuals.UnitTests.csproj
@@ -1,8 +1,11 @@
- netcoreapp2.0
+ netcoreapp2.0;net47
+ Library
+ true
+
@@ -21,4 +24,4 @@
-
\ No newline at end of file
+