Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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));
        }
Пример #7
0
        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);
        }
Пример #8
0
        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);
            }
        }
Пример #9
0
        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]);
        }
Пример #10
0
        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' />");
            }
        }
Пример #11
0
        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);
            }
        }
Пример #12
0
        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);
        }
Пример #13
0
        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);
            }
        }
Пример #15
0
        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));
        }
Пример #16
0
        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));
        }
Пример #17
0
        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));
            }
        }
Пример #19
0
        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"));
            }
        }
Пример #21
0
        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);
        }
Пример #22
0
        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));
            }
        }
Пример #23
0
        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"]);
            }
        }
Пример #26
0
        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);
        }
Пример #27
0
        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"));
        }
Пример #28
0
        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());
        }