Code Search for Developers
 
 
  

AttrInjectorTest.cs from p4shelf at Krugle


Show AttrInjectorTest.cs syntax highlighted

/* **********************************************************************************
 *
 * Copyright (c) Microsoft Corporation. All rights reserved.
 *
 * This source code is subject to terms and conditions of the Shared Source License
 * for IronPython. A copy of the license can be found in the License.html file
 * at the root of this distribution. If you can not locate the Shared Source License
 * for IronPython, please send an email to ironpy@microsoft.com.
 * By using this source code in any fashion, you are agreeing to be bound by
 * the terms of the Shared Source License for IronPython.
 *
 * You must not remove this notice, or any other, from this software.
 *
 * **********************************************************************************/

using System;
using System.Xml;
using IronPython.Runtime;
using IronPython.Runtime.Operations;

namespace IronPythonTest {
    public class AttrInjectorTest {
        static AttrInjectorTest() {
            Ops.RegisterAttributesInjectorForType(typeof(XmlElement), new SimpleXmlAttrInjector(), true);
        }

        public static object LoadXml(string text) {
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(text);
            return doc.DocumentElement;
        }

        class SimpleXmlAttrInjector : IAttributesInjector {
            List IAttributesInjector.GetAttrNames(object obj) {
                List list = List.MakeEmptyList(0);
                XmlElement xml = obj as XmlElement;

                if (xml != null) {
                    for (XmlNode n = xml.FirstChild; n != null; n = n.NextSibling) {
                        if (n is XmlElement) {
                            list.Add(n.Name);
                        }
                    }
                }

                return list;
            }

            bool IAttributesInjector.TryGetAttr(object obj, SymbolId nameSymbol, out object value) {
                XmlElement xml = obj as XmlElement;

                if (xml == null) {
                    value = null;
                    return false;
                }

                string name = nameSymbol.ToString();

                for (XmlNode n = xml.FirstChild; n != null; n = n.NextSibling) {
                    if (n is XmlElement && string.CompareOrdinal(n.Name, name) == 0) {
                        if (n.HasChildNodes && n.FirstChild == n.LastChild && n.FirstChild is XmlText) {
                            value = n.InnerText;
                        } else {
                            value = n;
                        }

                        return true;
                    }
                }

                value = null;
                return false;
            }
        }
    }
}




See more files for this project here

p4shelf

A feature in Visual Studio Team Studio that was immediately appealing to me was shelving. The goal of this tool is replicate that general functionality in Perforce.

Project homepage: http://code.google.com/p/p4shelf/
Programming language(s): C#,C++,Python
License: gpl2

  bin/
    Debug/
      IronMath.dll
      IronPython.dll
      IronPythonTest.dll
  obj/
    Debug/
      TempPE/
      IronPythonTest.dll
      IronPythonTest.pdb
    IronPythonTest.csproj.FileList.txt
  AssemblyInfo.cs
  AttrInjectorTest.cs
  BindTest.cs
  BinderTest.cs
  Cmplx.cs
  Conversions.cs
  DeTest.cs
  DefaultParams.cs
  DelegateTest.cs
  EngineTest.cs
  Enums.cs
  Events.cs
  ExceptionConverter.cs
  Exceptions.cs
  Explicit.cs
  GenMeth.cs
  Indexable.cs
  InheritTest.cs
  IntegerTest.cs
  IronMath.cs
  IronPythonTest.csproj
  LoadTest.cs
  NestedClass.cs
  StaticTest.cs
  TypeDescriptor.cs