[New Control] Descriptions (#791)
* feat: add ColumnWrapPanel. * feat: add Descriptions and DescriptionsItem controls * WIP: extract a LabeledContentControl for this particular need. * wip. * feat: setup demo. fix various initial status issue. * fix: fix a layout issue. * feat: improve demo. * feat: update demo. * fix: remove a redundant calculation. * feat: update per copilot feedback. * feat: add tests, fix a calculation issue. * feat: refactor to change the default label and value binding assignment logic. * feat: introduce orientation. * misc: format codes. * feat: clarify LabelPosition property. * feat: extract Font resources. * revert AvatarDemo. * feat: assign specific value to Font resources for testing. * misc: resolve copilot comment. --------- Co-authored-by: Zhang Dian <54255897+zdpcdt@users.noreply.github.com>
This commit is contained in:
183
tests/HeadlessTest.Ursa/Controls/DescriptionTests/Test.cs
Normal file
183
tests/HeadlessTest.Ursa/Controls/DescriptionTests/Test.cs
Normal file
@@ -0,0 +1,183 @@
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Data;
|
||||
using Avalonia.Headless.XUnit;
|
||||
using Avalonia.LogicalTree;
|
||||
using Ursa.Common;
|
||||
using Ursa.Controls;
|
||||
|
||||
namespace HeadlessTest.Ursa.Controls.DescriptionTests;
|
||||
|
||||
public class Test
|
||||
{
|
||||
[AvaloniaFact]
|
||||
public void Descriptions_LabelPosition_Propagates_To_DescriptionItems()
|
||||
{
|
||||
var descriptions = new Descriptions
|
||||
{
|
||||
LabelPosition = Position.Left,
|
||||
ItemsSource = new[]
|
||||
{
|
||||
new { Label = "Name", Content = "John Doe" },
|
||||
new { Label = "Age", Content = "30" }
|
||||
},
|
||||
LabelMemberBinding = new Binding("Label"),
|
||||
};
|
||||
var window = new Window
|
||||
{
|
||||
Content = descriptions
|
||||
};
|
||||
|
||||
window.Show();
|
||||
|
||||
var items = descriptions.GetLogicalChildren().OfType<DescriptionsItem>().ToList();
|
||||
foreach (var item in items)
|
||||
{
|
||||
Assert.Equal(Position.Left, item.LabelPosition);
|
||||
}
|
||||
|
||||
descriptions.LabelPosition = Position.Top;
|
||||
foreach (var item in items)
|
||||
{
|
||||
Assert.Equal(Position.Top, item.LabelPosition);
|
||||
}
|
||||
}
|
||||
|
||||
[AvaloniaFact]
|
||||
public void Inline_Descriptions_LabelPosition_Overrides_Parent_Descriptions()
|
||||
{
|
||||
var descriptions = new Descriptions
|
||||
{
|
||||
LabelPosition = Position.Left,
|
||||
Items =
|
||||
{
|
||||
new DescriptionsItem()
|
||||
{
|
||||
Label = "Name",
|
||||
Content = "John Doe",
|
||||
LabelPosition = Position.Top
|
||||
},
|
||||
new DescriptionsItem()
|
||||
{
|
||||
Label = "Age",
|
||||
Content = "30",
|
||||
}
|
||||
}
|
||||
};
|
||||
var window = new Window
|
||||
{
|
||||
Content = descriptions
|
||||
};
|
||||
|
||||
window.Show();
|
||||
|
||||
var items = descriptions.GetLogicalChildren().OfType<DescriptionsItem>().ToList();
|
||||
Assert.Equal(Position.Top, items[0].LabelPosition);
|
||||
Assert.Equal(Position.Left, items[1].LabelPosition);
|
||||
|
||||
descriptions.LabelPosition = Position.Top;
|
||||
Assert.Equal(Position.Top, items[0].LabelPosition);
|
||||
Assert.Equal(Position.Top, items[1].LabelPosition);
|
||||
}
|
||||
|
||||
[AvaloniaFact]
|
||||
public void Descriptions_ItemAlignment_Propagates_To_DescriptionItems()
|
||||
{
|
||||
var descriptions = new Descriptions
|
||||
{
|
||||
LabelPosition = Position.Left,
|
||||
ItemsSource = new[]
|
||||
{
|
||||
new { Label = "Name", Content = "John Doe" },
|
||||
new { Label = "Age", Content = "30" }
|
||||
},
|
||||
ItemAlignment = ItemAlignment.Center,
|
||||
LabelMemberBinding = new Binding("Label"),
|
||||
};
|
||||
var window = new Window
|
||||
{
|
||||
Content = descriptions
|
||||
};
|
||||
|
||||
window.Show();
|
||||
|
||||
var items = descriptions.GetLogicalChildren().OfType<DescriptionsItem>().ToList();
|
||||
foreach (var item in items)
|
||||
{
|
||||
Assert.Equal(ItemAlignment.Center, item.ItemAlignment);
|
||||
}
|
||||
|
||||
descriptions.ItemAlignment = ItemAlignment.Justify;
|
||||
foreach (var item in items)
|
||||
{
|
||||
Assert.Equal(ItemAlignment.Justify, item.ItemAlignment);
|
||||
}
|
||||
}
|
||||
|
||||
[AvaloniaFact]
|
||||
public void Inline_Descriptions_ItemAlignment_Overrides_Parent_Descriptions()
|
||||
{
|
||||
var descriptions = new Descriptions
|
||||
{
|
||||
ItemAlignment = ItemAlignment.Center,
|
||||
Items =
|
||||
{
|
||||
new DescriptionsItem()
|
||||
{
|
||||
Label = "Name",
|
||||
Content = "John Doe",
|
||||
ItemAlignment = ItemAlignment.Justify
|
||||
},
|
||||
new DescriptionsItem()
|
||||
{
|
||||
Label = "Age",
|
||||
Content = "30",
|
||||
}
|
||||
}
|
||||
};
|
||||
var window = new Window
|
||||
{
|
||||
Content = descriptions
|
||||
};
|
||||
|
||||
window.Show();
|
||||
|
||||
var items = descriptions.GetLogicalChildren().OfType<DescriptionsItem>().ToList();
|
||||
Assert.Equal(ItemAlignment.Justify, items[0].ItemAlignment);
|
||||
Assert.Equal(ItemAlignment.Center, items[1].ItemAlignment);
|
||||
|
||||
descriptions.ItemAlignment = ItemAlignment.Left;
|
||||
Assert.Equal(ItemAlignment.Justify, items[0].ItemAlignment);
|
||||
Assert.Equal(ItemAlignment.Left, items[1].ItemAlignment);
|
||||
}
|
||||
|
||||
[AvaloniaFact]
|
||||
public void Descriptions_LabelWidth_Propagates_To_DescriptionItems()
|
||||
{
|
||||
var descriptions = new Descriptions
|
||||
{
|
||||
LabelWidth = new GridLength(100),
|
||||
ItemsSource = new[]
|
||||
{
|
||||
new { Label = "Name", Content = "John Doe" },
|
||||
new { Label = "Age", Content = "30" }
|
||||
},
|
||||
LabelMemberBinding = new Binding("Label"),
|
||||
};
|
||||
var window = new Window
|
||||
{
|
||||
Content = descriptions
|
||||
};
|
||||
window.Show();
|
||||
var items = descriptions.GetLogicalChildren().OfType<DescriptionsItem>().ToList();
|
||||
foreach (var item in items)
|
||||
{
|
||||
Assert.Equal(100, item.LabelWidth);
|
||||
}
|
||||
|
||||
descriptions.LabelWidth = new GridLength(150);
|
||||
foreach (var item in items)
|
||||
{
|
||||
Assert.Equal(150, item.LabelWidth);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user