Exemplo n.º 1
0
 protected AppHostConstraintsBase(string serviceName, params Assembly[] assembliesWithServices)
     : base(serviceName, assembliesWithServices)
 {
     ConsoleLogFactory.Configure();
 }
Exemplo n.º 2
0
        public void Can_parse_rss_LISP()
        {
            ConsoleLogFactory.Configure();
            var context = LispNetContext(new Dictionary <string, object> {
                ["rss"] = rss
            }).Init();

            object eval(string lisp) => context.EvaluateLisp($"(return (let () {lisp}))");

            var result = eval(@"
(defn parse-rss [xml]
    (let ( (to) (doc) (channel) (items) (el) )
        (def doc (System.Xml.Linq.XDocument/Parse xml))
        (def to  (ObjectDictionary.))
        (def items (List<ObjectDictionary>.))
        (def channel (first (.Descendants doc ""channel"")))
        (def el  (XLinqExtensions/FirstElement channel))

        (while (not= (.LocalName (.Name el)) ""item"")
            (.Add to (.LocalName (.Name el)) (.Value el))
            (def el (XLinqExtensions/NextElement el)))

        (doseq (elItem (.Descendants channel ""item""))
            (def item (ObjectDictionary.))
            (def el (XLinqExtensions/FirstElement elItem))
            
            (while el
                (.Add item (.LocalName (.Name el)) (.Value el))
                (def el (XLinqExtensions/NextElement el)))
            
            (.Add items item))

        (.Add to ""items"" (to-list items))
        to
    )
)
(parse-rss rss)
");

            Assert.That(result, Is.EqualTo(expected));

            var to    = new ObjectDictionary();
            var items = new List <ObjectDictionary>();

            var doc     = XDocument.Parse(rss);
            var channel = doc.Descendants("channel").First();
            var el      = channel.FirstElement();

            while (el.Name != "item")
            {
                to[el.Name.LocalName] = el.Value;
                el = el.NextElement();
            }

            var elItems = channel.Descendants("item");

            foreach (var elItem in elItems)
            {
                var item = new ObjectDictionary();
                el = elItem.FirstElement();
                while (el != null)
                {
                    item[el.Name.LocalName] = el.Value;
                    el = el.NextElement();
                }
                items.Add(item);
            }

            to["items"] = items;
            Assert.That(to, Is.EqualTo(expected));
        }