public void ComposedExtension() { var actual = MarkupExtensionParser.MarkupExtension.Parse( "{Binding Width, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type Grid}}}"); var expected = new MarkupExtensionNode( new IdentifierNode("BindingExtension"), new OptionsCollection( new List<Option> { new PositionalOption("Width"), new PropertyOption( "RelativeSource", new MarkupExtensionNode( new IdentifierNode("RelativeSourceExtension"), new OptionsCollection { new PositionalOption("FindAncestor"), new PropertyOption("AncestorLevel", new StringNode("1")), new PropertyOption( "AncestorType", new MarkupExtensionNode( new IdentifierNode("x", "TypeExtension"), new OptionsCollection { new PositionalOption("Grid") })) })) })); Assert.AreEqual(expected, actual); }
public IEnumerable<XamlInstruction> Convert(MarkupExtensionNode tree) { var identifierNode = tree.Identifier; var xamlType = wiringContext.TypeContext.GetByPrefix(identifierNode.Prefix, identifierNode.TypeName); yield return Inject.StartOfObject(xamlType); foreach (var instruction in ParseArguments(tree.Options.OfType<PositionalOption>())) yield return instruction; foreach (var instruction in ParseProperties(tree.Options.OfType<PropertyOption>(), xamlType)) yield return instruction; yield return Inject.EndOfObject(); }
public void NameOnly() { var tree = new MarkupExtensionNode(new IdentifierNode("DummyExtension")); var sut = new MarkupExtensionNodeToXamlNodesConverter(WiringContext); var actualNodes = sut.Convert(tree).ToList(); var expectedNodes = new List<XamlNode> { x.StartObject<DummyExtension>(), x.EndObject(), }; CollectionAssert.AreEqual(expectedNodes, actualNodes); }
public void NameAndAttribute() { var tree = new MarkupExtensionNode(new IdentifierNode("DummyExtension"), new OptionsCollection {new PropertyOption("Property", new StringNode("Value"))}); var sut = new MarkupExtensionNodeToXamlNodesConverter(WiringContext); var actualNodes = sut.Convert(tree).ToList(); var expectedNodes = new List<XamlNode> { x.StartObject<DummyExtension>(), x.StartMember<DummyExtension>(d => d.Property), x.Value("Value"), x.EndMember(), x.EndObject(), }; CollectionAssert.AreEqual(expectedNodes, actualNodes); }
public void NameAndAttribute() { var tree = new MarkupExtensionNode(new IdentifierNode("DummyExtension"), new OptionsCollection {new PropertyOption("Property", new StringNode("Value"))}); var sut = new MarkupExtensionNodeToXamlNodesConverter(TypeRuntimeTypeSource); var actualNodes = sut.ParseMarkupExtensionNode(tree).ToList(); var expectedInstructions = new List<Instruction> { X.StartObject<DummyExtension>(), X.StartMember<DummyExtension>(d => d.Property), X.Value("Value"), X.EndMember(), X.EndObject(), }; CollectionAssert.AreEqual(expectedInstructions, actualNodes); }
public IEnumerable <Instruction> ParseMarkupExtensionNode(MarkupExtensionNode tree) { var identifierNode = tree.Identifier; var xamlType = TypeSource.GetByPrefix(identifierNode.Prefix, identifierNode.TypeName); yield return(Inject.StartOfObject(xamlType)); foreach (var instruction in ParseArguments(tree.Options.OfType <PositionalOption>())) { yield return(instruction); } foreach (var instruction in ParseProperties(tree.Options.OfType <PropertyOption>(), xamlType)) { yield return(instruction); } yield return(Inject.EndOfObject()); }
public void ParsePropertyWithExtension() { var actual = MarkupExtensionParser.Assignment.Parse("Value={Dummy}"); var markupExtensionNode = new MarkupExtensionNode(new IdentifierNode("DummyExtension")); Assert.AreEqual(new AssignmentNode("Value", markupExtensionNode), actual); }
public void PositionalOption() { var tree = new MarkupExtensionNode(new IdentifierNode("DummyExtension"), new OptionsCollection { new PositionalOption("Option") }); var sut = new MarkupExtensionNodeToXamlNodesConverter(WiringContext); var actualNodes = sut.Convert(tree).ToList(); var expectedNodes = new Collection<XamlNode> { x.StartObject<DummyExtension>(), x.MarkupExtensionArguments(), x.Value("Option"), x.EndMember(), x.EndObject(), }; CollectionAssert.AreEqual(expectedNodes, actualNodes); }
public void NameOnly() { var tree = new MarkupExtensionNode(new IdentifierNode("DummyExtension")); var sut = new MarkupExtensionNodeToXamlNodesConverter(TypeRuntimeTypeSource); var actualNodes = sut.ParseMarkupExtensionNode(tree).ToList(); var expectedInstructions = new List<Instruction> { X.StartObject<DummyExtension>(), X.EndObject(), }; CollectionAssert.AreEqual(expectedInstructions, actualNodes); }
public void PositionalOption() { var tree = new MarkupExtensionNode(new IdentifierNode("DummyExtension"), new OptionsCollection { new PositionalOption("Option") }); var sut = new MarkupExtensionNodeToXamlNodesConverter(TypeRuntimeTypeSource); var actualNodes = sut.ParseMarkupExtensionNode(tree).ToList(); var expectedInstructions = new Collection<Instruction> { X.StartObject<DummyExtension>(), X.MarkupExtensionArguments(), X.Value("Option"), X.EndMember(), X.EndObject(), }; CollectionAssert.AreEqual(expectedInstructions, actualNodes); }