Example #1
0
 public void ParseListInvalid3()
 {
     Assert.Throws(typeof(FormatException), () =>
     {
         XamlTypeName.ParseList("", new MyNSResolver());
     });
 }
Example #2
0
        StartTagInfo GetStartTagInfo()
        {
            string name         = r.LocalName;
            string ns           = r.NamespaceURI;
            string typeArgNames = null;

            var members = new List <Pair> ();
            var atts    = ProcessAttributes(r, members);

            // check TypeArguments to resolve Type, and remove them from the list. They don't appear as a node.
            var l = new List <Pair> ();

            foreach (var p in members)
            {
                if (p.Key == XamlLanguage.TypeArguments)
                {
                    typeArgNames = p.Value;
                    l.Add(p);
                    break;
                }
            }
            foreach (var p in l)
            {
                members.Remove(p);
            }

            IList <XamlTypeName> typeArgs = typeArgNames == null ? null : XamlTypeName.ParseList(typeArgNames, xaml_namespace_resolver);
            var xtn = new XamlTypeName(ns, name, typeArgs);

            return(new StartTagInfo()
            {
                Name = name, Namespace = ns, TypeName = xtn, Members = members, Attributes = atts
            });
        }
Example #3
0
 public void ParseListNullNames()
 {
     Assert.Throws(typeof(ArgumentNullException), () =>
     {
         XamlTypeName.ParseList(null, new MyNSResolver());
     });
 }
Example #4
0
 public void ParseListNullResolver()
 {
     Assert.Throws(typeof(ArgumentNullException), () =>
     {
         XamlTypeName.ParseList("foo", null);
     });
 }
Example #5
0
        public void ParseListValid()
        {
            var l = XamlTypeName.ParseList("foo,  bar", new MyNSResolver());

            Assert.AreEqual(2, l.Count, "#1");
            Assert.AreEqual("{}foo", l [0].ToString(), "#2");
            Assert.AreEqual("{}bar", l [1].ToString(), "#3");
            l = XamlTypeName.ParseList("foo,bar", new MyNSResolver());
            Assert.AreEqual("{}foo", l [0].ToString(), "#4");
            Assert.AreEqual("{}bar", l [1].ToString(), "#5");
        }
Example #6
0
        StartTagInfo GetStartTagInfo()
        {
            string name = r.LocalName;
            string ns   = ResolveLocalNamespace(r.NamespaceURI);
            string typeArgNames;

            var members = new List <Pair> ();
            var atts    = ProcessAttributes(r, members, out typeArgNames);

            IList <XamlTypeName> typeArgs = typeArgNames == null ? null : XamlTypeName.ParseList(typeArgNames, xaml_namespace_resolver);
            var xtn = new XamlTypeName(ns, name, typeArgs);

            return(new StartTagInfo {
                Name = name, Namespace = ns, TypeName = xtn, Members = members, Attributes = atts
            });
        }
Example #7
0
 public void ParseListInvalid3()
 {
     XamlTypeName.ParseList("", new MyNSResolver());
 }
Example #8
0
        void ReadStartTypeOrContentGetObject()
        {
            string name         = r.LocalName;
            string ns           = r.NamespaceURI;
            string typeArgNames = null;

            var members = new List <Pair> ();
            var atts    = ProcessAttributes(members);

            // check TypeArguments to resolve Type, and remove them from the list. They don't appear as a node.
            var l = new List <Pair> ();

            foreach (var p in members)
            {
                if (p.Key == XamlLanguage.TypeArguments)
                {
                    typeArgNames = p.Value;
                    l.Add(p);
                    break;
                }
            }
            foreach (var p in l)
            {
                members.Remove(p);
            }

            XamlType             xt;
            IList <XamlTypeName> typeArgs = typeArgNames == null ? null : XamlTypeName.ParseList(typeArgNames, xaml_namespace_resolver);
            var xtn = new XamlTypeName(ns, name, typeArgs);

            xt = sctx.GetXamlType(xtn);
            if (xt == null)
            {
                // creates name-only XamlType. Also, it does not seem that it does not store this XamlType to XamlSchemaContext (Try GetXamlType(xtn) after reading such xaml node, it will return null).
                xt = new XamlType(ns, name, typeArgs == null ? null : typeArgs.Select <XamlTypeName, XamlType> (xxtn => sctx.GetXamlType(xxtn)).ToArray(), sctx);
            }

            if (current_member != null && !xt.CanAssignTo(current_member.Type))
            {
                var pxt = types.Count > 0 ? types.Peek() : null;
                if (pxt != null && pxt.ContentProperty == current_member)
                {
                    SetGetObject();
                    return;
                }

                // It could still be GetObject if current_member
                // is not a directive and current type is not
                // a markup extension.
                // (I'm not very sure about the condition;
                // it could be more complex.)
                // seealso: bug #682131
                if (!get_flags.Peek() &&
                    !(current_member is XamlDirective) &&
                    !xt.IsMarkupExtension)
                {
                    SetGetObject();
                    return;
                }
            }

            types.Push(xt);
            get_flags.Push(false);
            current = xt;

            if (!r.IsEmptyElement)
            {
                r.Read();
                do
                {
                    r.MoveToContent();
                    switch (r.NodeType)
                    {
                    case XmlNodeType.Element:
                    // FIXME: parse type arguments etc.
                    case XmlNodeType.EndElement:
                        break;

                    default:
                        // this value is for Initialization, or Content property value
                        if (xt.ContentProperty != null)
                        {
                            members.Add(new Pair(xt.ContentProperty, r.Value));
                        }
                        else
                        {
                            members.Add(new Pair(XamlLanguage.Initialization, r.Value));
                        }
                        r.Read();
                        continue;
                    }
                    break;
                } while (true);
            }
            else
            {
                is_empty_object = true;
            }

            foreach (var p in atts)
            {
                int    idx    = p.Key.IndexOf(':');
                string prefix = idx > 0 ? p.Key.Substring(0, idx) : String.Empty;
                string aname  = idx > 0 ? p.Key.Substring(idx + 1) : p.Key;
                idx = aname.IndexOf('.');
                if (idx > 0)
                {
                    string apns   = prefix.Length > 0 ? r.LookupNamespace(prefix) : r.NamespaceURI;
                    var    apname = aname.Substring(0, idx);
                    var    axtn   = new XamlTypeName(apns, apname, null);
                    var    at     = sctx.GetXamlType(axtn);
                    var    am     = at.GetAttachableMember(aname.Substring(idx + 1));
                    if (am != null)
                    {
                        members.Add(new Pair(am, p.Value));
                    }
                    // ignore unknown attribute
                }
                var xm = xt.GetMember(aname);
                if (xm != null)
                {
                    members.Add(new Pair(xm, p.Value));
                }
                // ignore unknown attribute
            }

            node_type = XamlNodeType.StartObject;
            inside_object_not_member = true;

            // The next Read() results are likely directives.
            stored_member_enumerator = members.GetEnumerator();
        }
Example #9
0
 public void ParseListNullResolver()
 {
     XamlTypeName.ParseList("foo", null);
 }
Example #10
0
 public void ParseListNullNames()
 {
     XamlTypeName.ParseList(null, new MyNSResolver());
 }
Example #11
0
 public void ParseListInvalid3()
 {
     Assert.Throws <FormatException> (() => XamlTypeName.ParseList("", new MyNSResolver()));
 }
Example #12
0
 public void ParseListNullResolver()
 {
     Assert.Throws <ArgumentNullException> (() => XamlTypeName.ParseList("foo", null));
 }
Example #13
0
 public void ParseListNullNames()
 {
     Assert.Throws <ArgumentNullException> (() => XamlTypeName.ParseList(null, new MyNSResolver()));
 }