Browse Source

Fixed failing namespace registry test.

pull/582/head
Steven Kirk 10 years ago
parent
commit
9f009eb4f2
  1. 37
      src/Markup/Avalonia.Markup.Xaml/Context/AvaloniaNamespaceRegistry.cs
  2. 11
      tests/Avalonia.Markup.Xaml.UnitTests/Context/AvaloniaNamespaceRegistryTest.cs

37
src/Markup/Avalonia.Markup.Xaml/Context/AvaloniaNamespaceRegistry.cs

@ -68,10 +68,14 @@ namespace Avalonia.Markup.Xaml.Context
}
else
{
result = _clrNamespaces.FirstOrDefault(x => x.Name == name);
var nsAndAssembly = ParseClrNameSpace(name);
result = _clrNamespaces.FirstOrDefault(x =>
x.Name == nsAndAssembly.Item1 &&
x.Assembly.GetName().Name == nsAndAssembly.Item2);
if (result == null)
{
{
var clr = CreateClrNamespace(name);
_clrNamespaces.Add(clr);
result = clr;
@ -105,29 +109,34 @@ namespace Avalonia.Markup.Xaml.Context
private static ClrNamespace CreateClrNamespace(string formattedClrString)
{
var startOfNamespace = formattedClrString.IndexOf(":", StringComparison.Ordinal) + 1;
var endOfNamespace = formattedClrString.IndexOf(";", startOfNamespace, StringComparison.Ordinal);
var nsAndAssembly = ParseClrNameSpace(formattedClrString);
var assembly = GetAssembly(nsAndAssembly.Item2);
return new ClrNamespace(assembly, nsAndAssembly.Item1);
}
private static Tuple<string, string> ParseClrNameSpace(string clrNamespace)
{
var startOfNamespace = clrNamespace.IndexOf(":", StringComparison.Ordinal) + 1;
var endOfNamespace = clrNamespace.IndexOf(";", startOfNamespace, StringComparison.Ordinal);
if (endOfNamespace < 0)
{
endOfNamespace = formattedClrString.Length - startOfNamespace;
endOfNamespace = clrNamespace.Length - startOfNamespace;
}
var ns = formattedClrString.Substring(startOfNamespace, endOfNamespace - startOfNamespace);
var ns = clrNamespace.Substring(startOfNamespace, endOfNamespace - startOfNamespace);
var remainingPartStart = startOfNamespace + ns.Length + 1;
var remainingPartLenght = formattedClrString.Length - remainingPartStart;
var assemblyPart = formattedClrString.Substring(remainingPartStart, remainingPartLenght);
var assembly = GetAssembly(assemblyPart);
var remainingPartLenght = clrNamespace.Length - remainingPartStart;
var assemblyPart = clrNamespace.Substring(remainingPartStart, remainingPartLenght);
return new ClrNamespace(assembly, ns);
return Tuple.Create(ns, assemblyPart.Dicotomize('=').Item2);
}
private static Assembly GetAssembly(string assemblyPart)
private static Assembly GetAssembly(string assemblyName)
{
var dicotomize = assemblyPart.Dicotomize('=');
return Assembly.Load(new AssemblyName(dicotomize.Item2));
return Assembly.Load(new AssemblyName(assemblyName));
}
private void ScanAssemblies(IEnumerable<Assembly> assemblies)

11
tests/Avalonia.Markup.Xaml.UnitTests/Context/AvaloniaNamespaceRegistryTest.cs

@ -1,18 +1,7 @@
// Copyright (c) The Avalonia Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using Avalonia.Collections;
using Avalonia.Controls;
using Avalonia.Markup.Xaml.Context;
using Avalonia.Markup.Xaml.Converters;
using Avalonia.Styling;
using Moq;
using OmniXaml;
using OmniXaml.ObjectAssembler.Commands;
using OmniXaml.TypeConversion;
using OmniXaml.Typing;
using System;
using System.Reactive;
using Xunit;
namespace Avalonia.Markup.Xaml.UnitTests.Context

Loading…
Cancel
Save