Browse Source

Fixed tests

pull/4318/head
Nikita Tsukanov 6 years ago
parent
commit
6c89473ca1
  1. 12
      src/Avalonia.DesignerSupport/DesignWindowLoader.cs
  2. 19
      src/Markup/Avalonia.Markup.Xaml/AvaloniaXamlLoader.cs
  3. 4
      src/tools/Avalonia.Designer.HostApp/Avalonia.Designer.HostApp.csproj
  4. 8
      src/tools/Avalonia.Designer.HostApp/DesignXamlLoader.cs
  5. 3
      src/tools/Avalonia.Designer.HostApp/Program.cs
  6. 2
      tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/ResourceIncludeTests.cs
  7. 11
      tests/Avalonia.Markup.Xaml.UnitTests/XamlTestBase.cs

12
src/Avalonia.DesignerSupport/DesignWindowLoader.cs

@ -12,21 +12,17 @@ namespace Avalonia.DesignerSupport
{ {
public class DesignWindowLoader public class DesignWindowLoader
{ {
public interface IDesignXamlLoader
{
object Load(MemoryStream stream, Assembly localAsm, object o, Uri baseUri);
}
public static Window LoadDesignerWindow(string xaml, string assemblyPath, string xamlFileProjectPath) public static Window LoadDesignerWindow(string xaml, string assemblyPath, string xamlFileProjectPath)
{ {
Window window; Window window;
Control control; Control control;
using (PlatformManager.DesignerMode()) using (PlatformManager.DesignerMode())
{ {
var loader = AvaloniaLocator.Current.GetService<IDesignXamlLoader>(); var loader = AvaloniaLocator.Current.GetService<AvaloniaXamlLoader.IRuntimeXamlLoader>();
var stream = new MemoryStream(Encoding.UTF8.GetBytes(xaml)); var stream = new MemoryStream(Encoding.UTF8.GetBytes(xaml));
if (loader == null)
throw new XamlLoadException("Runtime XAML loader is not registered");
Uri baseUri = null; Uri baseUri = null;
if (assemblyPath != null) if (assemblyPath != null)
@ -39,7 +35,7 @@ namespace Avalonia.DesignerSupport
} }
var localAsm = assemblyPath != null ? Assembly.LoadFile(Path.GetFullPath(assemblyPath)) : null; var localAsm = assemblyPath != null ? Assembly.LoadFile(Path.GetFullPath(assemblyPath)) : null;
var loaded = loader.Load(stream, localAsm, null, baseUri); var loaded = loader.Load(stream, localAsm, null, baseUri, true);
var style = loaded as IStyle; var style = loaded as IStyle;
if (style != null) if (style != null)
{ {

19
src/Markup/Avalonia.Markup.Xaml/AvaloniaXamlLoader.cs

@ -12,6 +12,11 @@ namespace Avalonia.Markup.Xaml
/// </summary> /// </summary>
public static class AvaloniaXamlLoader public static class AvaloniaXamlLoader
{ {
public interface IRuntimeXamlLoader
{
object Load(Stream stream, Assembly localAsm, object o, Uri baseUri, bool designMode);
}
/// <summary> /// <summary>
/// Loads the XAML into a Avalonia component. /// Loads the XAML into a Avalonia component.
/// </summary> /// </summary>
@ -53,7 +58,19 @@ namespace Avalonia.Markup.Xaml
if (compiledResult != null) if (compiledResult != null)
return compiledResult; return compiledResult;
} }
// This is intended for unit-tests only
var runtimeLoader = AvaloniaLocator.Current.GetService<IRuntimeXamlLoader>();
if (runtimeLoader != null)
{
var asset = assetLocator.OpenAndGetAssembly(uri, baseUri);
using (var stream = asset.stream)
{
var absoluteUri = uri.IsAbsoluteUri ? uri : new Uri(baseUri, uri);
return runtimeLoader.Load(stream, asset.assembly, null, absoluteUri, false);
}
}
throw new XamlLoadException( throw new XamlLoadException(
$"No precompiled XAML found for {uri} (baseUri: {baseUri}), make sure to specify x:Class and include your XAML file as AvaloniaResource"); $"No precompiled XAML found for {uri} (baseUri: {baseUri}), make sure to specify x:Class and include your XAML file as AvaloniaResource");
} }

4
src/tools/Avalonia.Designer.HostApp/Avalonia.Designer.HostApp.csproj

@ -20,8 +20,8 @@
</ItemGroup> </ItemGroup>
<Import Project="..\..\..\src\Markup\Avalonia.Markup.Xaml.Loader\IncludeXamlIlSre.props" /> <Import Project="..\..\..\src\Markup\Avalonia.Markup.Xaml.Loader\IncludeXamlIlSre.props" />
<ItemGroup> <ItemGroup>
<Compile Include="..\..\..\src\Markup\Avalonia.Markup.Xaml.Loader\CompilerExtensions\**\*.cs"/> <Compile Include="..\..\..\src\Markup\Avalonia.Markup.Xaml.Loader\CompilerExtensions\**\*.cs" />
<Compile Include="..\..\..\src\Markup\Avalonia.Markup.Xaml.Loader\AvaloniaXamlIlRuntimeCompiler.cs"/> <Compile Include="..\..\..\src\Markup\Avalonia.Markup.Xaml.Loader\AvaloniaXamlIlRuntimeCompiler.cs" />
</ItemGroup> </ItemGroup>
<Import Project="..\..\..\build\NetFX.props" /> <Import Project="..\..\..\build\NetFX.props" />
</Project> </Project>

8
src/tools/Avalonia.Designer.HostApp/DesignXamlLoader.cs

@ -1,16 +1,16 @@
using System; using System;
using System.IO; using System.IO;
using System.Reflection; using System.Reflection;
using Avalonia.DesignerSupport; using Avalonia.Markup.Xaml;
using Avalonia.Markup.Xaml.XamlIl; using Avalonia.Markup.Xaml.XamlIl;
namespace Avalonia.Designer.HostApp namespace Avalonia.Designer.HostApp
{ {
class DesignXamlLoader : DesignWindowLoader.IDesignXamlLoader class DesignXamlLoader : AvaloniaXamlLoader.IRuntimeXamlLoader
{ {
public object Load(MemoryStream stream, Assembly localAsm, object o, Uri baseUri) public object Load(Stream stream, Assembly localAsm, object o, Uri baseUri, bool designMode)
{ {
return AvaloniaXamlIlRuntimeCompiler.Load(stream, localAsm, o, baseUri, true); return AvaloniaXamlIlRuntimeCompiler.Load(stream, localAsm, o, baseUri, designMode);
} }
} }
} }

3
src/tools/Avalonia.Designer.HostApp/Program.cs

@ -2,6 +2,7 @@
using System.IO; using System.IO;
using System.Reflection; using System.Reflection;
using Avalonia.DesignerSupport; using Avalonia.DesignerSupport;
using Avalonia.Markup.Xaml;
namespace Avalonia.Designer.HostApp namespace Avalonia.Designer.HostApp
{ {
@ -41,7 +42,7 @@ namespace Avalonia.Designer.HostApp
public static void Main(string[] args) public static void Main(string[] args)
#endif #endif
{ {
AvaloniaLocator.CurrentMutable.Bind<DesignWindowLoader.IDesignXamlLoader>() AvaloniaLocator.CurrentMutable.Bind<AvaloniaXamlLoader.IRuntimeXamlLoader>()
.ToConstant(new DesignXamlLoader()); .ToConstant(new DesignXamlLoader());
Avalonia.DesignerSupport.Remote.RemoteDesignerEntryPoint.Main(args); Avalonia.DesignerSupport.Remote.RemoteDesignerEntryPoint.Main(args);
} }

2
tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/ResourceIncludeTests.cs

@ -7,7 +7,7 @@ using Xunit;
namespace Avalonia.Markup.Xaml.UnitTests.MakrupExtensions namespace Avalonia.Markup.Xaml.UnitTests.MakrupExtensions
{ {
public class ResourceIncludeTests public class ResourceIncludeTests : XamlTestBase
{ {
public class StaticResourceExtensionTests : XamlTestBase public class StaticResourceExtensionTests : XamlTestBase
{ {

11
tests/Avalonia.Markup.Xaml.UnitTests/XamlTestBase.cs

@ -1,5 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Text; using System.Text;
using Avalonia.Data; using Avalonia.Data;
@ -11,6 +13,15 @@ namespace Avalonia.Markup.Xaml.UnitTests
{ {
// Ensure necessary assemblies are loaded. // Ensure necessary assemblies are loaded.
var _ = typeof(TemplateBinding); var _ = typeof(TemplateBinding);
if (AvaloniaLocator.Current.GetService<AvaloniaXamlLoader.IRuntimeXamlLoader>() == null)
AvaloniaLocator.CurrentMutable.Bind<AvaloniaXamlLoader.IRuntimeXamlLoader>()
.ToConstant(new TestXamlLoaderShim());
}
class TestXamlLoaderShim : AvaloniaXamlLoader.IRuntimeXamlLoader
{
public object Load(Stream stream, Assembly localAsm, object o, Uri baseUri, bool designMode)
=> AvaloniaRuntimeXamlLoader.Load(stream, localAsm, o, baseUri, designMode);
} }
} }
} }

Loading…
Cancel
Save