Extracted PrefixLookup to another file. Add more XamlTypeName.ToString() tests.
authorAtsushi Eno <atsushi@ximian.com>
Tue, 2 Nov 2010 17:31:28 +0000 (02:31 +0900)
committerAtsushi Eno <atsushi@ximian.com>
Tue, 2 Nov 2010 17:31:28 +0000 (02:31 +0900)
mcs/class/System.Xaml/System.Xaml.dll.sources
mcs/class/System.Xaml/System.Xaml/PrefixLookup.cs [new file with mode: 0644]
mcs/class/System.Xaml/System.Xaml/XamlNode.cs
mcs/class/System.Xaml/Test/System.Xaml.Schema/XamlTypeNameTest.cs

index cf965837822d36a946e67db3c8a3b1b6be986776..6e9406bbdca747202c1d4499799670b4c8897d02 100644 (file)
@@ -76,6 +76,7 @@ System.Xaml/IXamlNamespaceResolver.cs
 System.Xaml/IXamlObjectWriterFactory.cs
 System.Xaml/IXamlSchemaContextProvider.cs
 System.Xaml/NamespaceDeclaration.cs
+System.Xaml/PrefixLookup.cs
 System.Xaml/TypeExtensionMethods.cs
 System.Xaml/XamlBackgroundReader.cs
 System.Xaml/XamlDeferringLoader.cs
diff --git a/mcs/class/System.Xaml/System.Xaml/PrefixLookup.cs b/mcs/class/System.Xaml/System.Xaml/PrefixLookup.cs
new file mode 100644 (file)
index 0000000..190bec0
--- /dev/null
@@ -0,0 +1,90 @@
+//
+// Copyright (C) 2010 Novell Inc. http://novell.com
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Reflection;
+using System.Windows.Markup;
+using System.Xaml.Schema;
+using System.Xml;
+
+namespace System.Xaml
+{
+       internal class PrefixLookup : INamespacePrefixLookup
+       {
+               public PrefixLookup (XamlSchemaContext schemaContext)
+               {
+                       sctx = schemaContext;
+                       Namespaces = new List<NamespaceDeclaration> ();
+               }
+               
+               XamlSchemaContext sctx;
+               
+               public bool IsCollectingNamespaces { get; set; }
+               
+               public List<NamespaceDeclaration> Namespaces { get; private set; }
+
+               public string LookupPrefix (string ns)
+               {
+                       var nd = Namespaces.FirstOrDefault (n => n.Namespace == ns);
+                       if (nd == null && IsCollectingNamespaces)
+                               return AddNamespace (ns);
+                       else
+                               return nd != null ? nd.Prefix : null;
+               }
+               
+               public string AddNamespace (string ns)
+               {
+                       var l = Namespaces;
+                       string prefix, s;
+                       if (ns == XamlLanguage.Xaml2006Namespace)
+                               prefix = "x";
+                       else if (!l.Any (i => i.Prefix == String.Empty))
+                               prefix = String.Empty;
+                       else if ((s = GetAcronym (ns)) != null && !l.Any (i => i.Prefix == s))
+                               prefix = s;
+                       else
+                               prefix = sctx.GetPreferredPrefix (ns);
+                       l.Add (new NamespaceDeclaration (ns, prefix));
+                       return prefix;
+               }
+               
+               string GetAcronym (string ns)
+               {
+                       int idx = ns.IndexOf (';');
+                       if (idx < 0)
+                               return null;
+                       string pre = "clr-namespace:";
+                       if (!ns.StartsWith (pre, StringComparison.Ordinal))
+                               return null;
+                       ns = ns.Substring (pre.Length, idx - pre.Length);
+                       string ac = "";
+                       foreach (string nsp in ns.Split ('.'))
+                               if (nsp.Length > 0)
+                                       ac += nsp [0];
+                       return ac.Length > 0 ? ac.ToLower (CultureInfo.InvariantCulture) : null;
+               }
+       }
+}
index 9deda8d8122b40029df214b84cd3060b19615b67..2ec063ff868e96fadf3e44a5a5206f522d27a0f6 100644 (file)
@@ -32,62 +32,6 @@ using System.Xml;
 
 namespace System.Xaml
 {
-       internal class PrefixLookup : INamespacePrefixLookup
-       {
-               public PrefixLookup (XamlSchemaContext schemaContext)
-               {
-                       sctx = schemaContext;
-                       Namespaces = new List<NamespaceDeclaration> ();
-               }
-               
-               XamlSchemaContext sctx;
-               
-               public bool IsCollectingNamespaces { get; set; }
-               
-               public List<NamespaceDeclaration> Namespaces { get; private set; }
-
-               public string LookupPrefix (string ns)
-               {
-                       var nd = Namespaces.FirstOrDefault (n => n.Namespace == ns);
-                       if (nd == null && IsCollectingNamespaces)
-                               return AddNamespace (ns);
-                       else
-                               return nd != null ? nd.Prefix : null;
-               }
-               
-               public string AddNamespace (string ns)
-               {
-                       var l = Namespaces;
-                       string prefix, s;
-                       if (ns == XamlLanguage.Xaml2006Namespace)
-                               prefix = "x";
-                       else if (!l.Any (i => i.Prefix == String.Empty))
-                               prefix = String.Empty;
-                       else if ((s = GetAcronym (ns)) != null && !l.Any (i => i.Prefix == s))
-                               prefix = s;
-                       else
-                               prefix = sctx.GetPreferredPrefix (ns);
-                       l.Add (new NamespaceDeclaration (ns, prefix));
-                       return prefix;
-               }
-               
-               string GetAcronym (string ns)
-               {
-                       int idx = ns.IndexOf (';');
-                       if (idx < 0)
-                               return null;
-                       string pre = "clr-namespace:";
-                       if (!ns.StartsWith (pre, StringComparison.Ordinal))
-                               return null;
-                       ns = ns.Substring (pre.Length, idx - pre.Length);
-                       string ac = "";
-                       foreach (string nsp in ns.Split ('.'))
-                               if (nsp.Length > 0)
-                                       ac += nsp [0];
-                       return ac.Length > 0 ? ac.ToLower (CultureInfo.InvariantCulture) : null;
-               }
-       }
-
        internal struct XamlNodeIterator
        {
                static readonly XamlObject null_object = new XamlObject (XamlLanguage.Null, null);
index 22928cc17334bc9443a32a8429a6d9718b0faaa5..6a7d3ff7a82cffd0e166277a0ec18968ff608557 100644 (file)
@@ -198,6 +198,20 @@ namespace MonoTests.System.Xaml.Schema
                        Assert.AreEqual ("b:Bar, c:Baz", XamlTypeName.ToString (n.TypeArguments, lookup), "#2");
                }
 
+               // This test shows that MarkupExtension names are not replaced at XamlTypeName.ToString(), while XamlXmlWriter writes like "x:Null".
+               [Test]
+               public void ToStringNamespaceLookup2 ()
+               {
+                       var lookup = new MyNamespaceLookup ();
+                       lookup.Add ("x", XamlLanguage.Xaml2006Namespace);
+                       Assert.AreEqual ("x:NullExtension", new XamlTypeName (XamlLanguage.Null).ToString (lookup), "#1");
+                       // WHY is TypeExtension not the case?
+                       //Assert.AreEqual ("x:TypeExtension", new XamlTypeName (XamlLanguage.Type).ToString (lookup), "#2");
+                       Assert.AreEqual ("x:ArrayExtension", new XamlTypeName (XamlLanguage.Array).ToString (lookup), "#3");
+                       Assert.AreEqual ("x:StaticExtension", new XamlTypeName (XamlLanguage.Static).ToString (lookup), "#4");
+                       Assert.AreEqual ("x:Reference", new XamlTypeName (XamlLanguage.Reference).ToString (lookup), "#5");
+               }
+
                [Test]
                [ExpectedException (typeof (ArgumentNullException))]
                public void StaticToStringNullLookup ()