public void RelativeSource_TemplatedParent_Works() { using (UnitTestApplication.Start(TestServices.StyledWindow)) { AvaloniaRuntimeXamlLoader.Load(@" <Application xmlns='https://github.com/avaloniaui' xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests;assembly=Avalonia.Markup.Xaml.UnitTests' > <Application.Styles> <Style Selector='Button'> <Setter Property='Template'> <ControlTemplate> <Grid><Grid><Grid> <Canvas> <Canvas.Background> <SolidColorBrush> <SolidColorBrush.Color> <MultiBinding> <MultiBinding.Converter> <local:XamlIlBugTestsBrushToColorConverter/> </MultiBinding.Converter> <Binding Path='Background' RelativeSource='{RelativeSource TemplatedParent}'/> <Binding Path='Background' RelativeSource='{RelativeSource TemplatedParent}'/> <Binding Path='Background' RelativeSource='{RelativeSource TemplatedParent}'/> </MultiBinding> </SolidColorBrush.Color> </SolidColorBrush> </Canvas.Background> </Canvas> </Grid></Grid></Grid> </ControlTemplate> </Setter> </Style> </Application.Styles> </Application>", null, Application.Current); var parsed = (Window)AvaloniaRuntimeXamlLoader.Parse(@" <Window xmlns='https://github.com/avaloniaui' xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests;assembly=Avalonia.Markup.Xaml.UnitTests' > <Button Background='Red' /> </Window> "); var btn = ((Button)parsed.Content); btn.ApplyTemplate(); var canvas = (Canvas)btn.GetVisualChildren().First() .VisualChildren.First() .VisualChildren.First() .VisualChildren.First(); Assert.Equal(Brushes.Red.Color, ((ISolidColorBrush)canvas.Background).Color); } }
public void Complex_Style_Is_Parsed() { using (UnitTestApplication.Start(TestServices.StyledWindow)) { var xaml = @" <Styles xmlns='https://github.com/avaloniaui'> <Style Selector='CheckBox'> <Setter Property='BorderBrush' Value='{DynamicResource ThemeBorderMidBrush}'/> <Setter Property='BorderThickness' Value='{DynamicResource ThemeBorderThickness}'/> <Setter Property='Template'> <ControlTemplate> <Grid ColumnDefinitions='Auto,*'> <Border Name='border' BorderBrush='{TemplateBinding BorderBrush}' BorderThickness='{TemplateBinding BorderThickness}' Width='18' Height='18' VerticalAlignment='Center'> <Path Name='checkMark' Fill='{StaticResource HighlightBrush}' Width='11' Height='10' Stretch='Uniform' HorizontalAlignment='Center' VerticalAlignment='Center' Data='M 1145.607177734375,430 C1145.607177734375,430 1141.449951171875,435.0772705078125 1141.449951171875,435.0772705078125 1141.449951171875,435.0772705078125 1139.232177734375,433.0999755859375 1139.232177734375,433.0999755859375 1139.232177734375,433.0999755859375 1138,434.5538330078125 1138,434.5538330078125 1138,434.5538330078125 1141.482177734375,438 1141.482177734375,438 1141.482177734375,438 1141.96875,437.9375 1141.96875,437.9375 1141.96875,437.9375 1147,431.34619140625 1147,431.34619140625 1147,431.34619140625 1145.607177734375,430 1145.607177734375,430 z'/> </Border> <ContentPresenter Name='PART_ContentPresenter' Content='{TemplateBinding Content}' ContentTemplate='{TemplateBinding ContentTemplate}' Margin='4,0,0,0' VerticalAlignment='Center' Grid.Column='1'/> </Grid> </ControlTemplate> </Setter> </Style> </Styles> "; var styles = AvaloniaRuntimeXamlLoader.Parse <Styles>(xaml); Assert.Single(styles); var style = (Style)styles[0]; var setters = style.Setters.Cast <Setter>().ToArray(); Assert.Equal(3, setters.Length); Assert.Equal(CheckBox.BorderBrushProperty, setters[0].Property); Assert.Equal(CheckBox.BorderThicknessProperty, setters[1].Property); Assert.Equal(CheckBox.TemplateProperty, setters[2].Property); Assert.IsType <ControlTemplate>(setters[2].Value); } }
public void Avalonia_TypeConverter_Is_Used() { var xaml = @"<UserControl xmlns='https://github.com/avaloniaui' Background='White' />"; var control = AvaloniaRuntimeXamlLoader.Parse <UserControl>(xaml); var bk = control.Background; Assert.IsType <ImmutableSolidColorBrush>(bk); Assert.Equal(Colors.White, (bk as ISolidColorBrush).Color); }
public void Provide_Value_Target_Should_Provide_Clr_Property_Info() { var parsed = AvaloniaRuntimeXamlLoader.Parse <XamlIlClassWithClrPropertyWithValue>(@" <XamlIlClassWithClrPropertyWithValue xmlns='clr-namespace:Avalonia.Markup.Xaml.UnitTests' Count='{XamlIlCheckClrPropertyInfo ExpectedPropertyName=Count}' />", typeof(XamlIlClassWithClrPropertyWithValue).Assembly); Assert.Equal(6, parsed.Count); }
public void AddChildOfT_Child_Is_Set() { var xaml = @"<ObjectWithAddChildOfT xmlns='clr-namespace:Avalonia.Markup.Xaml.UnitTests.Xaml'>Foo</ObjectWithAddChildOfT>"; var target = AvaloniaRuntimeXamlLoader.Parse <ObjectWithAddChildOfT>(xaml); Assert.NotNull(target); Assert.Null(target.Child); Assert.Equal("Foo", target.Text); }
public void Attached_Property_Is_Set() { var xaml = @"<ContentControl xmlns='https://github.com/avaloniaui' TextElement.FontSize='21'/>"; var target = AvaloniaRuntimeXamlLoader.Parse <ContentControl>(xaml); Assert.NotNull(target); Assert.Equal(21.0, TextElement.GetFontSize(target)); }
public void Binding_Button_IsPressed_ShouldWork() { var parsed = (Button)AvaloniaRuntimeXamlLoader.Parse(@" <Button xmlns='https://github.com/avaloniaui' IsPressed='{Binding IsPressed, Mode=TwoWay}' />"); var ctx = new XamlIlBugTestsDataContext(); parsed.DataContext = ctx; parsed.SetValue(Button.IsPressedProperty, true); Assert.True(ctx.IsPressed); }
public void Binding_Should_Be_Assigned_To_ItemsSource_Instead_Of_Bound() { using (UnitTestApplication.Start(TestServices.MockPlatformWrapper)) { var xaml = "<DataTemplates xmlns='https://github.com/avaloniaui'><TreeDataTemplate DataType='Control' ItemsSource='{Binding}'/></DataTemplates>"; var templates = (DataTemplates)AvaloniaRuntimeXamlLoader.Load(xaml); var template = (TreeDataTemplate)(templates.First()); Assert.IsType <Binding>(template.ItemsSource); } }
public void Should_Parse_Points_in_Xaml(string input) { var xaml = $"<Polygon xmlns='https://github.com/avaloniaui' Points='{input}' />"; var polygon = (Polygon)AvaloniaRuntimeXamlLoader.Load(xaml); var points = polygon.Points; Assert.Equal(2, points.Count); Assert.Equal(new Point(1, 2), points[0]); Assert.Equal(new Point(3, 4), points[1]); }
public void DataContextType_Resolution() { using (UnitTestApplication.Start(TestServices.StyledWindow)) { var parsed = AvaloniaRuntimeXamlLoader.Parse <UserControl>(@" <UserControl xmlns='https://github.com/avaloniaui' xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests;assembly=Avalonia.Markup.Xaml.UnitTests' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' x:DataType='local:XamlIlBugTestsDataContext' />"); } }
public void Binding_Should_Be_Assigned_To_Setter_Value_Instead_Of_Bound() { using (UnitTestApplication.Start(TestServices.MockPlatformWrapper)) { var xaml = "<Style Selector='Button' xmlns='https://github.com/avaloniaui'><Setter Property='Content' Value='{Binding}'/></Style>"; var style = (Style)AvaloniaRuntimeXamlLoader.Load(xaml); var setter = (Setter)(style.Setters.First()); Assert.IsType <Binding>(setter.Value); } }
public void Named_Control_Is_Added_To_NameScope_Simple() { var xaml = @" <UserControl xmlns='https://github.com/avaloniaui'> <Button Name='button'>Foo</Button> </UserControl>"; var control = AvaloniaRuntimeXamlLoader.Parse <UserControl>(xaml); var button = control.FindControl <Button>("button"); Assert.Equal("Foo", button.Content); }
public void Attached_Property_With_Namespace_Is_Set() { var xaml = @"<ContentControl xmlns='https://github.com/avaloniaui' xmlns:test='clr-namespace:Avalonia.Markup.Xaml.UnitTests.Xaml;assembly=Avalonia.Markup.Xaml.UnitTests' test:BasicTestsAttachedPropertyHolder.Foo='Bar'/>"; var target = AvaloniaRuntimeXamlLoader.Parse <ContentControl>(xaml); Assert.NotNull(target); Assert.Equal("Bar", BasicTestsAttachedPropertyHolder.GetFoo(target)); }
public void Nullable_Types_Should_Still_Be_Converted_Properly() { using (UnitTestApplication.Start(TestServices.MockPlatformWrapper)) { var xaml = @"<ClassWithNullableProperties xmlns='clr-namespace:Avalonia.Markup.Xaml.UnitTests.Converters' Thickness = '5' Orientation='Vertical' ></ClassWithNullableProperties>"; var data = (ClassWithNullableProperties)AvaloniaRuntimeXamlLoader.Load(xaml, typeof(ClassWithNullableProperties).Assembly); Assert.Equal(new Thickness(5), data.Thickness); Assert.Equal(Orientation.Vertical, data.Orientation); } }
public void Attached_Property_Is_Set_On_Control_Outside_Avalonia_Namspace() { // Test for issue #1548 var xaml = @"<UserControl xmlns='https://github.com/avaloniaui' xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests.Xaml;assembly=Avalonia.Markup.Xaml.UnitTests'> <local:TestControl Grid.Column='2' /> </UserControl>"; var target = AvaloniaRuntimeXamlLoader.Parse <UserControl>(xaml); Assert.Equal(2, Grid.GetColumn((TestControl)target.Content)); }
public void Attached_Property_In_Panel_Is_Set() { var xaml = @" <Panel xmlns='https://github.com/avaloniaui'> <ToolTip.Tip>Foo</ToolTip.Tip> </Panel>"; var target = AvaloniaRuntimeXamlLoader.Parse <Panel>(xaml); Assert.Empty(target.Children); Assert.Equal("Foo", ToolTip.GetTip(target)); }
public void Can_Specify_DashStyle_In_XAML() { var xaml = @" <Pen xmlns='https://github.com/avaloniaui'> <Pen.DashStyle> <DashStyle Offset='0' Dashes='1,3'/> </Pen.DashStyle> </Pen>"; var target = AvaloniaRuntimeXamlLoader.Parse <Pen>(xaml); Assert.NotNull(target); }
public void ThrowsOnInvalidCompileBindingsDirective() { using (UnitTestApplication.Start(TestServices.StyledWindow)) { var xaml = @" <Window xmlns='https://github.com/avaloniaui' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests.MarkupExtensions;assembly=Avalonia.Markup.Xaml.UnitTests' x:DataType='local:TestDataContext' x:CompileBindings='notabool'> </Window>"; ThrowsXamlParseException(() => AvaloniaRuntimeXamlLoader.Load(xaml)); } }
public void Attached_Event_Is_Assigned() { var xaml = @"<Button xmlns='https://github.com/avaloniaui' Gestures.Tapped='OnTapped'/>"; var target = new MyButton(); AvaloniaRuntimeXamlLoader.Load(xaml, rootInstance: target); target.RaiseEvent(new RoutedEventArgs { RoutedEvent = Gestures.TappedEvent, }); Assert.True(target.WasTapped); }
public void Item_Is_Added_To_ResourceDictionary_As_Deferred() { using (StyledWindow()) { var xaml = @" <ResourceDictionary xmlns='https://github.com/avaloniaui' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'> <SolidColorBrush x:Key='Red' Color='Red' /> </ResourceDictionary>"; var resources = (ResourceDictionary)AvaloniaRuntimeXamlLoader.Load(xaml); Assert.True(resources.ContainsDeferredKey("Red")); } }
public void Event_Is_Assigned() { var xaml = @"<Button xmlns='https://github.com/avaloniaui' Click='OnClick'/>"; var target = new MyButton(); AvaloniaRuntimeXamlLoader.Load(xaml, rootInstance: target); target.RaiseEvent(new RoutedEventArgs { RoutedEvent = Button.ClickEvent, }); Assert.True(target.WasClicked); }
public void Attached_Property_Supports_Binding() { using (UnitTestApplication.Start(TestServices.MockWindowingPlatform)) { var xaml = @"<Window xmlns='https://github.com/avaloniaui' TextElement.FontSize='{Binding}'/>"; var target = AvaloniaRuntimeXamlLoader.Parse <ContentControl>(xaml); target.DataContext = 21.0; Assert.Equal(21.0, TextElement.GetFontSize(target)); } }
public void XDataType_Should_Be_Assigned_To_Clr_Property() { using (UnitTestApplication.Start(TestServices.MockPlatformWrapper)) { var xaml = @" <DataTemplates xmlns='https://github.com/avaloniaui' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'> <TreeDataTemplate x:DataType='x:String' /> </DataTemplates>"; var templates = (DataTemplates)AvaloniaRuntimeXamlLoader.Load(xaml); var template = (TreeDataTemplate)(templates.First()); Assert.Equal(typeof(string), template.DataType); } }
public void Value_Type_With_Parse_Converter_Should_Not_Be_Deferred() { using (StyledWindow()) { var xaml = @" <ResourceDictionary xmlns='https://github.com/avaloniaui' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'> <Color x:Key='Red'>Red</Color> </ResourceDictionary>"; var resources = (ResourceDictionary)AvaloniaRuntimeXamlLoader.Load(xaml); Assert.False(resources.ContainsDeferredKey("Red")); Assert.IsType <Color>(resources["Red"]); } }
public void Value_Type_With_Ctor_Converter_Should_Not_Be_Deferred() { using (StyledWindow()) { var xaml = @" <ResourceDictionary xmlns='https://github.com/avaloniaui' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'> <Thickness x:Key='Margin'>1 1 1 1</Thickness> </ResourceDictionary>"; var resources = (ResourceDictionary)AvaloniaRuntimeXamlLoader.Load(xaml); Assert.False(resources.ContainsDeferredKey("Margin")); Assert.IsType <Thickness>(resources["Margin"]); } }
public void Custom_Properties_Should_Work_With_XClass() { var precompiled = new XamlIlClassWithCustomProperty(); Assert.Equal("123", precompiled.Test); var loaded = (XamlIlClassWithCustomProperty)AvaloniaRuntimeXamlLoader.Parse(@" <UserControl xmlns='https://github.com/avaloniaui' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' x:Class='Avalonia.Markup.Xaml.UnitTests.XamlIlClassWithCustomProperty' Test='321'> </UserControl>"); Assert.Equal("321", loaded.Test); }
public void Bug2570() { SomeStaticProperty = "123"; AssertThrows(() => AvaloniaRuntimeXamlLoader .Load(@" <UserControl xmlns='https://github.com/avaloniaui' xmlns:d='http://schemas.microsoft.com/expression/blend/2008' xmlns:tests='clr-namespace:Avalonia.Markup.Xaml.UnitTests' d:DataContext='{x:Static tests:XamlIlTests.SomeStaticPropery}' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'/>", typeof(XamlIlTests).Assembly, designMode: true), e => e.Message.Contains("Unable to resolve ") && e.Message.Contains(" as static field, property, constant or enum value")); }
public void ControlTemplate_With_TargetType_Is_Operational() { var xaml = @" <ControlTemplate xmlns='https://github.com/avaloniaui' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' TargetType='{x:Type ContentControl}'> <ContentPresenter Content='{TemplateBinding Content}' /> </ControlTemplate> "; var template = AvaloniaRuntimeXamlLoader.Parse <ControlTemplate>(xaml); Assert.Equal(typeof(ContentControl), template.TargetType); Assert.IsType(typeof(ContentPresenter), template.Build(new ContentControl()).Control); }
public void ThrowsOnInvalidBindingPathOnCompiledBindingEnabledViaDirective() { using (UnitTestApplication.Start(TestServices.StyledWindow)) { var xaml = @" <Window xmlns='https://github.com/avaloniaui' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests.MarkupExtensions;assembly=Avalonia.Markup.Xaml.UnitTests' x:DataType='local:TestDataContext' x:CompileBindings='true'> <TextBlock Text='{Binding InvalidPath}' Name='textBlock' /> </Window>"; Assert.Throws <XamlX.XamlParseException>(() => AvaloniaRuntimeXamlLoader.Load(xaml)); } }
public void DynamicResource_Can_Be_Assigned_To_Resource_Property_In_Application() { var xaml = @" <Application xmlns='https://github.com/avaloniaui' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'> <Application.Resources> <Color x:Key='color'>#ff506070</Color> <SolidColorBrush x:Key='brush' Color='{DynamicResource color}'/> </Application.Resources> </Application>"; var application = (Application)AvaloniaRuntimeXamlLoader.Load(xaml); var brush = (SolidColorBrush)application.Resources["brush"]; Assert.Equal(0xff506070, brush.Color.ToUint32()); }