public IEnumerable<PlanStep> CheckVariantsForNodes(ProjectionElement root, int depth, ParameterNames parameters)
 {
     var testBuilder = new FramingPlanBuilder();
     var plan = new TestFramingPlan(root); 
     testBuilder.CheckNodeVariants(plan, root, depth, parameters);
     return plan.ReturnPlanningResults();
 }
        public void SimplePlan()
        {
            var catalog = new AggregateCatalog(
                                    new AssemblyCatalog(typeof (ITypedPool).Assembly),
                                    new AssemblyCatalog(typeof (Element).Assembly));
            var container = new CompositionContainer(catalog);
            container.ComposeExportedValue(container);
            var cachier = container.GetExportedValue<ITypedPool>();
            var rootElement = new Element { Id = Guid.NewGuid(), Name = "Root" };
            var attr1 = new Data.Attribute { Id = Guid.NewGuid(), ElementId = rootElement.Id, Name = "Attr1" };
            var attr2 = new Data.Attribute { Id = Guid.NewGuid(), ElementId = rootElement.Id, Name = "Attr2" };
            cachier.Post(rootElement.Id, rootElement);
            cachier.Post(attr1.Id, attr1);
            cachier.Post(attr2.Id, attr2);


            var sAttr = new ResourceProjectionElement
            {
                Name = "Attribute",
                FillingInfo = new FillingInfo { { "Name", FillingInfo.FillType.Native } },
                ResourceType = "Attribute",
                Namespace = "Test"
            };
            var sElement = new ResourceProjectionElement
            {
                Name = "Element",
                FillingInfo = new FillingInfo { { "Name", FillingInfo.FillType.Native } },
                ResourceType = "Element",
                Namespace = "Test",
            };

            var steps = new TestCommendationCollection1(sAttr, new[] { attr1.Id, attr2.Id });
            var plan = new TestFramingPlan(sElement, steps);
            var builder = container.GetExportedValue<ProjectionBuilder>();
            var writer = new TestWriter();
            var sb = builder.RealisePlan(plan, rootElement.Id, "Test", 2, new Streamer<StringBuilder>(writer), new Dictionary<string, object>());

            var expWriter = new TestWriter();
            var expSb = expWriter.Open("Test");
            expWriter.StartWritingNode("Element", rootElement.Id);
            expWriter.WriteAttribute("Name", rootElement.Name);
            expWriter.StartWritingNode("Attribute", attr1.Id);
            expWriter.WriteAttribute("Name", attr1.Name);
            expWriter.WriteAttribute("DefinitlyNoChildren", "True");
            expWriter.EndWritingNode();
            expWriter.StartWritingNode("Attribute", attr2.Id);
            expWriter.WriteAttribute("Name", attr2.Name);
            expWriter.WriteAttribute("DefinitlyNoChildren", "True");
            expWriter.EndWritingNode();
            expWriter.EndWritingNode();
            Assert.AreEqual(expSb.ToString(), sb.ToString());
        }