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 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) if (result == null)
{ {
var clr = CreateClrNamespace(name); var clr = CreateClrNamespace(name);
_clrNamespaces.Add(clr); _clrNamespaces.Add(clr);
result = clr; result = clr;
@ -105,29 +109,34 @@ namespace Avalonia.Markup.Xaml.Context
private static ClrNamespace CreateClrNamespace(string formattedClrString) private static ClrNamespace CreateClrNamespace(string formattedClrString)
{ {
var startOfNamespace = formattedClrString.IndexOf(":", StringComparison.Ordinal) + 1; var nsAndAssembly = ParseClrNameSpace(formattedClrString);
var endOfNamespace = formattedClrString.IndexOf(";", startOfNamespace, StringComparison.Ordinal); 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) 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 remainingPartStart = startOfNamespace + ns.Length + 1;
var remainingPartLenght = formattedClrString.Length - remainingPartStart; var remainingPartLenght = clrNamespace.Length - remainingPartStart;
var assemblyPart = formattedClrString.Substring(remainingPartStart, remainingPartLenght); var assemblyPart = clrNamespace.Substring(remainingPartStart, remainingPartLenght);
var assembly = GetAssembly(assemblyPart);
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(assemblyName));
return Assembly.Load(new AssemblyName(dicotomize.Item2));
} }
private void ScanAssemblies(IEnumerable<Assembly> assemblies) 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. // 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. // 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.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; using Xunit;
namespace Avalonia.Markup.Xaml.UnitTests.Context namespace Avalonia.Markup.Xaml.UnitTests.Context

Loading…
Cancel
Save