Browse Source

added test for complex style and Panel in control template

donandren 8 years ago
parent
commit
cb4fcfb602
1 changed files with 107 additions and 0 deletions
  1. 107 0
      tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BasicTests.cs

+ 107 - 0
tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BasicTests.cs

@@ -110,6 +110,53 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
             Assert.Contains(bar, panel.Children);
         }
 
+        [Fact]
+        public void ControlTemplate_With_Nested_Child_Is_Operational()
+        {
+            var xaml = @"
+<ControlTemplate xmlns='https://github.com/avaloniaui'>
+    <ContentControl Name='parent'>
+        <ContentControl Name='child' />
+    </ContentControl>
+</ControlTemplate>
+";
+            var template = AvaloniaXamlLoader.Parse<ControlTemplate>(xaml);
+
+            var parent = (ContentControl)template.Build(new ContentControl());
+
+            Assert.Equal("parent", parent.Name);
+
+            var child = parent.Content as ContentControl;
+
+            Assert.NotNull(child);
+
+            Assert.Equal("child", child.Name);
+        }
+
+        [Fact]
+        public void ControlTemplate_With_Panel_Children_Are_Added()
+        {
+            var xaml = @"
+<ControlTemplate xmlns='https://github.com/avaloniaui'>
+    <Panel Name='panel'>
+        <ContentControl Name='Foo' />
+        <ContentControl Name='Bar' />
+    </Panel>
+</ControlTemplate>
+";
+            var template = AvaloniaXamlLoader.Parse<ControlTemplate>(xaml);
+
+            var panel = (Panel)template.Build(new ContentControl());
+
+            Assert.Equal(2, panel.Children.Count);
+
+            var foo = panel.Children[0];
+            var bar = panel.Children[1];
+
+            Assert.Equal("Foo", foo.Name);
+            Assert.Equal("Bar", bar.Name);
+        }
+
         [Fact]
         public void Named_x_Control_Is_Added_To_NameScope_Simple()
         {
@@ -174,6 +221,66 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml
             Assert.Equal(100.0, setters[1].Value);
         }
 
+        [Fact]
+        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='{StyleResource ThemeBorderMidBrush}'/>
+    <Setter Property='BorderThickness' Value='{StyleResource 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='{StyleResource 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 = AvaloniaXamlLoader.Parse<Styles>(xaml);
+
+                Assert.Equal(1, styles.Count);
+
+                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<StyleResourceBinding>(setters[0].Value);
+                Assert.IsType<StyleResourceBinding>(setters[1].Value);
+                Assert.IsType<ControlTemplate>(setters[2].Value);
+            }
+        }
+
         [Fact]
         public void Style_Resources_Are_Build()
         {