Exemple #1
0
        public void PropertyToDictionary()
        {
            var node = new ConstructionNode(typeof(Window))
            {
                Assignments = new List <MemberAssignment>()
                {
                    new MemberAssignment()
                    {
                        Member   = Member.FromStandard <Window>(window => window.Resources),
                        Children = new[] { new ConstructionNode(typeof(TextBlock))
                                           {
                                               Key = "MyKey"
                                           }, },
                    }
                }
            };

            var actual = Create(node).Result;

            var expected = new Window {
                Resources = new ResourceDictionary {
                    { "MyKey", new TextBlock() }
                }
            };

            Assert.Equal(expected, actual);
        }
Exemple #2
0
        protected override void AssembleFromChildren(MemberAssignment a, ConstructionNode constructionNode,
                                                     INodeToObjectBuilder nodeToObjectBuilder, BuilderContext context)
        {
            var loaderInfo = metadataProvider.Get(constructionNode.ActualInstanceType).FragmentLoaderInfo;

            if (loaderInfo != null)
            {
                if (constructionNode.ActualInstanceType == loaderInfo.Type &&
                    a.Member.MemberName == loaderInfo.PropertyName)
                {
                    ConstructionNode payload = constructionNode.Assignments.First(assignment => assignment.Member.MemberName == loaderInfo.PropertyName).Values.First();
                    var loader = loaderInfo.Loader.Load(payload, nodeToObjectBuilder, context);
                    CreateInstance(constructionNode);
                    ApplyAssignments(constructionNode, nodeToObjectBuilder, context);
                    a.Values = new[] { new ConstructionNode(loader.GetType())
                                       {
                                           Instance = loader
                                       } };
                    AssigmentApplier.ExecuteAssignment(new NodeAssignment(a, constructionNode.Instance), nodeToObjectBuilder, context);
                }
            }
            else
            {
                base.AssembleFromChildren(a, constructionNode, nodeToObjectBuilder, context);
            }
        }
Exemple #3
0
        public void Collection()
        {
            var tree = new ConstructionNode(typeof(Collection))
            {
                Assignments = new[]
                {
                    new MemberAssignment
                    {
                        SourceValue = "My title",
                        Member      = Member.FromStandard <Collection>(collection => collection.Title)
                    }
                },
                Children = new[]
                {
                    new ConstructionNode(typeof(TextBlock)),
                    new ConstructionNode(typeof(TextBlock))
                }
            };

            var actual = Create(tree).Result;

            var expected = new Collection {
                new TextBlock(), new TextBlock()
            };

            expected.Title = "My title";

            Assert.Equal(expected, actual);
        }
Exemple #4
0
        public void BasicEvent()
        {
            var node = new ConstructionNode(typeof(Window))
            {
                Assignments = new[]
                {
                    new MemberAssignment
                    {
                        Member   = Member.FromStandard <Window>(tb => tb.Content),
                        Children = new List <ConstructionNode>
                        {
                            new ConstructionNode <Button>
                            {
                                Assignments = new[]
                                {
                                    new MemberAssignment
                                    {
                                        Member      = Member.FromStandard(typeof(Button), nameof(Button.Click)),
                                        SourceValue = nameof(TestWindow.OnClick)
                                    }
                                }
                            }
                        }
                    }
                }
            };

            var root = new TestWindow();

            Create(node, root);

            (root.Content as Button).ClickButton();

            Assert.True(root.ButtonClicked);
        }
Exemple #5
0
        public void GivenSimpleExtensionThatProvidesAString_TheStringIsProvided()
        {
            var constructionNode = new ConstructionNode(typeof(SimpleExtension))
            {
                Assignments =
                    new List <MemberAssignment>
                {
                    new MemberAssignment
                    {
                        Member      = Member.FromStandard <SimpleExtension>(extension => extension.Property),
                        SourceValue = "MyText"
                    }
                }
            };

            var node = new ConstructionNode(typeof(TextBlock))
            {
                Assignments = new[]
                {
                    new MemberAssignment
                    {
                        Member   = Member.FromStandard <TextBlock>(tb => tb.Text),
                        Children = new[] { constructionNode }
                    }
                }
            };

            var b = Create(node);

            Assert.Equal(new TextBlock {
                Text = "MyText"
            }, b.Result);
        }
Exemple #6
0
        public void ContentPropertyDirectContentTextInsideChild()
        {
            var parseResult = ParseResult(@"<Window xmlns=""root""><TextBlock>Saludos cordiales</TextBlock></Window>");

            var expected = new ConstructionNode(typeof(Window))
            {
                Assignments = new[]
                {
                    new MemberAssignment
                    {
                        Member   = Member.FromStandard <Window>(window => window.Content),
                        Children = new[]
                        {
                            new ConstructionNode(typeof(TextBlock))
                            {
                                Assignments = new[]
                                {
                                    new MemberAssignment()
                                    {
                                        Member      = Member.FromStandard <TextBlock>(tb => tb.Text),
                                        SourceValue = "Saludos cordiales"
                                    },
                                }
                            },
                        }
                    }
                }
            };

            Assert.Equal(expected, parseResult.Root);
        }
Exemple #7
0
        public void BindTest()
        {
            var converter = new TypeConverterSourceValueConverter();
            var omniGuiInstanceCreator = new Rework.OmniGuiInstanceCreator(converter, new TypeLocator(() => new List <ControlTemplate>(), new OmniGuiPropertyEngine()));
            var valuePipeline          = new OmniGuiValuePipeline(new MarkupExtensionValuePipeline(new NoActionValuePipeline()), null);
            var assignmentApplier      = new OmniGuiMemberAssignmentApplier(converter, valuePipeline);
            var sut = new OmniGuiObjectBuilder(omniGuiInstanceCreator, converter, assignmentApplier);

            var node = new ConstructionNode(typeof(Button))
            {
                Assignments = new List <MemberAssignment>
                {
                    new MemberAssignment
                    {
                        Member   = Member.FromStandard <Button>(b => b.Content),
                        Children = new List <ConstructionNode>()
                        {
                            new ConstructionNode(typeof(Bind))
                            {
                                Assignments = new List <MemberAssignment>()
                                {
                                    new MemberAssignment()
                                    {
                                        Member   = Member.FromStandard <Bind>(b => b.TargetProperty),
                                        Children = ConstructionNode.ForString("SomeProperty")
                                    }
                                }
                            }
                        }
                    }
                }
            };

            var instance = sut.Inflate(node);
        }
        public void TestMethod2()
        {
            var prefixAnnotator = new PrefixAnnotator();

            var newTypeDirectory = GetTypeDirectory();

            var sut = new PrefixedTypeResolver(prefixAnnotator, newTypeDirectory);

            var childNode = new ConstructionNode(typeof(TextBlock));
            var root      = new ConstructionNode(typeof(Window))
            {
                Assignments = new List <MemberAssignment>()
                {
                    new MemberAssignment()
                    {
                        Member   = Member.FromStandard <Window>(window => window.Content),
                        Children = new[] { childNode, }
                    }
                },
            };

            prefixAnnotator.Annotate(childNode, new List <PrefixDeclaration>()
            {
                new PrefixDeclaration("a", "another")
            });

            sut.Root = root;
            var customGridType = sut.GetTypeByPrefix(childNode, "a:CustomGrid");

            Assert.Equal(typeof(CustomGrid), customGridType);
        }
Exemple #9
0
        private static CreationFixture CreateWithParams(ConstructionNode node, Func <IObjectBuilder, ConstructionNode, BuildContext, object> createFunc)
        {
            var constructionContext = new ObjectBuilderContext(
                new SourceValueConverter(),
                new AttributeBasedMetadataProvider());

            var prefixAnnotator = new PrefixAnnotator();


            var executingAssembly = new[] { Assembly.GetExecutingAssembly() };

            var attributeBasedTypeDirectory = new AttributeBasedTypeDirectory(executingAssembly);
            var builder =
                new ExtendedObjectBuilder(
                    new InstanceCreator(constructionContext.SourceValueConverter, constructionContext, attributeBasedTypeDirectory),
                    constructionContext,
                    new ContextFactory(attributeBasedTypeDirectory, constructionContext));


            var newTypeDirectory = GetTypeDirectory();

            var creationContext = new BuildContext(
                new NamescopeAnnotator(constructionContext.MetadataProvider),
                new AmbientRegistrator(),
                new InstanceLifecycleSignaler())
            {
                PrefixAnnotator = prefixAnnotator, PrefixedTypeResolver = new PrefixedTypeResolver(prefixAnnotator, newTypeDirectory)
            };

            return(new CreationFixture
            {
                Result = createFunc(builder, node, creationContext),
                BuildContext = creationContext
            });
        }
Exemple #10
0
        public void TemplateContent()
        {
            var node = new ConstructionNode(typeof(ItemsControl))
            {
                Assignments = new List <MemberAssignment>
                {
                    new MemberAssignment
                    {
                        Member   = Member.FromStandard <ItemsControl>(control => control.ItemTemplate),
                        Children = new List <ConstructionNode>
                        {
                            new ConstructionNode(typeof(DataTemplate))
                            {
                                Assignments = new[]
                                {
                                    new MemberAssignment
                                    {
                                        Member   = Member.FromStandard <DataTemplate>(template => template.Content),
                                        Children = new[] { new ConstructionNode(typeof(TextBlock)) }
                                    }
                                }
                            }
                        }
                    }
                }
            };

            var creationFixture = Create(node);
        }
        public void ParentPrefixesAreAvailableInChild()
        {
            var type            = typeof(TextBlock);
            var assembly        = type.GetTypeInfo().Assembly;
            var xamlNamespaces  = XamlNamespace.Map("root").With(Route.Assembly(assembly).WithNamespaces(type.Namespace));
            var prefixAnnotator = new PrefixAnnotator();

            var sut = new PrefixedTypeResolver(prefixAnnotator, new TypeDirectory(new[] { xamlNamespaces }));

            var childNode = new ConstructionNode(typeof(TextBlock));
            var root      = new ConstructionNode(typeof(Window))
            {
                Assignments = new List <MemberAssignment>()
                {
                    new MemberAssignment()
                    {
                        Member   = Member.FromStandard <Window>(window => window.Content),
                        Children = new[] { childNode, }
                    }
                },
            };

            prefixAnnotator.Annotate(root, new List <PrefixDeclaration>()
            {
                new PrefixDeclaration(string.Empty, "root")
            });

            sut.Root = root;
            var buttonType = sut.GetTypeByPrefix(childNode, "Button");

            Assert.Equal(typeof(Button), buttonType);
        }
Exemple #12
0
        private bool SubNodesAreCreated(ConstructionNode constructionNode)
        {
            var membersCreated  = constructionNode.Assignments.All(ma => ma.Values.All(node => node.IsCreated));
            var childrenCreated = constructionNode.Assignments.All(ma => ma.Values.All(node => node.IsCreated));

            return(membersCreated && childrenCreated);
        }
Exemple #13
0
        public void NodeWithChildrenShouldGetThemAsChildren()
        {
            var converter = new FuncStringConverterExtended((s, t) => (true, Convert.ChangeType(s, t)));
            var creator   = new FuncInstanceCreator((hints, type) => new CreationResult(Activator.CreateInstance(type)));
            var sut       = new NodeAssembler(creator, converter, null);

            var constructionNode = new ConstructionNode <Collection>()
                                   .WithChildren(
                new ConstructionNode <int>
            {
                SourceValue = "1"
            },
                new ConstructionNode <int>
            {
                SourceValue = "2"
            },
                new ConstructionNode <int>
            {
                SourceValue = "3"
            }
                );

            sut.Assemble(constructionNode, null);

            Assert.Equal(new Collection()
            {
                1, 2, 3,
            }, (IEnumerable)constructionNode.Instance);
        }
Exemple #14
0
        public void Namescope()
        {
            var parseResult  = ParseResult(@"<Window xmlns:x=""special"" xmlns=""root""><TextBlock x:Name=""One"" /></Window>");
            var expectedNode = new ConstructionNode(typeof(Window))
            {
                Assignments = new List <MemberAssignment>
                {
                    new MemberAssignment
                    {
                        Member   = Member.FromStandard <Window>(w => w.Content),
                        Children = new List <ConstructionNode>
                        {
                            new ConstructionNode(typeof(TextBlock))
                            {
                                Name        = "One",
                                Assignments = new[] { new MemberAssignment {
                                                          Member = Member.FromStandard <TextBlock>(block => block.Name), SourceValue = "One"
                                                      } }
                            }
                        }
                    }
                }
            };

            Assert.Equal(expectedNode, parseResult.Root);
        }
Exemple #15
0
        public void BasicEvent()
        {
            var tree = ParseResult(@"<Window xmlns=""root"">
                                <Button Click=""OnClick"" />
                               </Window>");

            var expected = new ConstructionNode(typeof(Window))
            {
                Assignments = new[]
                {
                    new MemberAssignment()
                    {
                        Member   = Member.FromStandard <Window>(window => window.Content),
                        Children = new[]
                        {
                            new ConstructionNode(typeof(Button))
                            {
                                Assignments = new[] { new MemberAssignment()
                                                      {
                                                          SourceValue = "OnClick", Member = Member.FromStandard(typeof(Button), "Click")
                                                      }, }
                            },
                        }
                    },
                }
            };

            Assert.Equal(expected, tree.Root);
        }
Exemple #16
0
        public void CollectionProperty()
        {
            var items = new[]
            {
                new ConstructionNode(typeof(TextBlock)),
                new ConstructionNode(typeof(TextBlock)),
                new ConstructionNode(typeof(TextBlock))
            };

            var node = new ConstructionNode(typeof(ItemsControl))
            {
                Assignments = new[]
                {
                    new MemberAssignment
                    {
                        Member   = Member.FromStandard <ItemsControl>(tb => tb.Items),
                        Children = items
                    }
                }
            };

            var result = (ItemsControl)Create(node).Result;

            Assert.NotNull(result.Items);
            Assert.IsAssignableFrom <IEnumerable>(result.Items);
            Assert.NotEmpty(result.Items);
        }
Exemple #17
0
        public void MarkupExtensionWithoutPrefix()
        {
            var parseResult = ParseResult(@"<Window xmlns=""root"" Content=""{Simple}"" />");

            var expected = new ConstructionNode <Window>().WithAssignment(w => w.Content, new ConstructionNode <SimpleExtension>());

            Assert.Equal(expected, parseResult.Root);
        }
Exemple #18
0
        public void ClrNs()
        {
            var parseResult = ParseResult(@"<Window xmlns=""using:OmniXaml.Tests.Model;Assembly=OmniXaml.Tests"" />");

            var expected = new ConstructionNode(typeof(Window));

            Assert.Equal(expected, parseResult.Root);
        }
Exemple #19
0
        public void Class()
        {
            var xaml = @"<Window xmlns=""root"" xmlns:x=""special"" x:Class=""OmniXaml.Tests.Model.Custom.CustomWindow;assembly=OmniXaml.Tests"" />";
            var p = ParseResult(xaml);
            ConstructionNode expected = new ConstructionNode(typeof(Window)) { InstantiateAs = typeof(CustomWindow) };

            Assert.Equal(expected, p.Root);
        }
Exemple #20
0
        public void CDataInsidePropertyElement()
        {
            var parseResult = ParseResult(@"<Window xmlns=""root""><Window.Content><![CDATA[Hello]]></Window.Content></Window>");

            var expected = new ConstructionNode <Window>().WithAssignment(w => w.Content, "Hello");

            Assert.Equal(expected, parseResult.Root);
        }
Exemple #21
0
        public void PropertyElementThatIsAnAttachedProperty()
        {
            var parseResult = ParseResult(@"<Window xmlns=""root""><Grid.Row>1</Grid.Row></Window>");

            var expected = new ConstructionNode <Window>().WithAttachedAssignment <Grid>("Row", "1");

            Assert.Equal(expected, parseResult.Root);
        }
Exemple #22
0
        public void ContentPropertyDirectContentText()
        {
            var parseResult = ParseResult(@"<TextBlock xmlns=""root"">Hello</TextBlock>");

            var expected = new ConstructionNode <TextBlock>().WithAssignment(tb => tb.Text, "Hello");

            Assert.Equal(expected, parseResult.Root);
        }
Exemple #23
0
        public void AttachedPropertyFromPrefixedNamespace()
        {
            var parseResult = ParseResult(@"<Window xmlns=""root"" xmlns:a=""custom"" a:CustomGrid.Value=""1"" />");
            var expected    = new ConstructionNode <Window>()
                              .WithAttachedAssignment <CustomGrid>("Value", "1");

            Assert.Equal(expected, parseResult.Root);
        }
Exemple #24
0
        public void PropertyElementWithTextContent()
        {
            var parseResult = ParseResult(@"<Window xmlns=""root""><Window.Content>Hola</Window.Content></Window>");

            var expected = new ConstructionNode <Window>()
                           .WithAssignment(w => w.Content, "Hola");

            Assert.Equal(expected, parseResult.Root);
        }
Exemple #25
0
        public void ObjectAndDirectProperties()
        {
            var parseResult = ParseResult(@"<Window xmlns=""root"" Title=""Saludos"" />");

            var expected = new ConstructionNode <Window>()
                           .WithAssignment(w => w.Title, "Saludos");

            Assert.Equal(expected, parseResult.Root);
        }
Exemple #26
0
    // Update is called once per frame
    void Update()
    {
        // Select repair items with mouse
        if (selected == '\0' && Input.GetMouseButtonDown(0))
        {
            RaycastHit hit;
            Ray        ray = main_camera.ScreenPointToRay(Input.mousePosition);

            if (Physics.Raycast(ray, out hit, 1000, 1 << LayerMask.NameToLayer("UI")))
            {
                Transform objectHit = hit.transform;

                // Do something with the object that was hit by the raycast.

                SelectableRepairNode ui_element = objectHit.GetComponent <SelectableRepairNode>();
                selected       = ui_element.hotkey;
                mouse_selected = true;
                SoundFactory.AddSound("event:/menuselect", null, null);
            }
        }
        else if ((mouse_selected && Input.GetMouseButtonUp(0)) || (!mouse_selected && selected != '\0' && Input.GetMouseButtonDown(0)))
        {
            RaycastHit hit;
            Ray        ray = main_camera.ScreenPointToRay(Input.mousePosition);

            if (Physics.Raycast(ray, out hit, 1000, 1 << LayerMask.NameToLayer("Build")))
            {
                Transform objectHit = hit.transform;

                // Do something with the object that was hit by the raycast.

                ConstructionNode construction_site = objectHit.GetComponentInChildren <ConstructionNode>();
                construction_site.construct(buildings[selected]);
                SoundFactory.AddSound("event:/menuselect", null, null);
            }

            selected       = '\0';
            mouse_selected = false;
        }

        KeyCode[] hotkeys = new KeyCode[] { KeyCode.Q, KeyCode.W, KeyCode.E, KeyCode.R };
        // Select repair items with hotkeys (priority)
        foreach (KeyCode key in hotkeys)
        {
            if (Input.GetKeyDown(key))
            {
                selected       = (char)key;
                mouse_selected = false;
                SoundFactory.AddSound("event:/menuselect", null, null);
            }
            else if (Input.GetKeyUp(key) && (char)key == selected)
            {
                selected       = '\0';
                mouse_selected = false;
            }
        }
    }
Exemple #27
0
        public void InvalidTypeThrows()
        {
            var node = new ConstructionNode(typeof(Window))
            {
                InstantiateAs = typeof(TextBlock)
            };

            Assert.Throws <InvalidOperationException>(() => Create(node));
        }
Exemple #28
0
        public void ImmutableFromContent()
        {
            var parseResult = ParseResult(@"<MyImmutable xmlns=""root"">hola</MyImmutable>");

            var expected = new ConstructionNode <MyImmutable> {
                PositionalParameters = new[] { "hola" }
            };

            Assert.Equal(expected, parseResult.Root);
        }
Exemple #29
0
        public void EventAttachedToCorrectInstance()
        {
            var xaml = @"<Window xmlns=""root"" xmlns:x=""special"" x:Class=""OmniXaml.Tests.Model.TestWindow;assembly=OmniXaml.Tests"" Clicked=""OnClick"" />";
            var p    = ParseResult(xaml);

            var expected = new ConstructionNode <Window, TestWindow>()
                           .WithAssignment("Clicked", "OnClick");

            Assert.Equal(expected, p.Root);
        }
Exemple #30
0
        public void ContentPropertyDirectContentTextInsideChild()
        {
            var parseResult = ParseResult(@"<Window xmlns=""root""><TextBlock>Saludos cordiales</TextBlock></Window>");

            var expected = new ConstructionNode <Window>()
                           .WithAssignment(w => w.Content,
                                           new ConstructionNode <TextBlock>().WithAssignment(tb => tb.Text, "Saludos cordiales"));

            Assert.Equal(expected, parseResult.Root);
        }