public async Task When_NoItemTemplate()
        {
            var SUT = new ItemsControl()
            {
                ItemTemplate         = null,
                ItemTemplateSelector = null,
            };

            WindowHelper.WindowContent = SUT;
            await WindowHelper.WaitForIdle();

            var source = new[] {
                "Item 1"
            };

            SUT.ItemsSource = source;

            ContentPresenter cp = null;
            await WindowHelper.WaitFor(() => (cp = SUT.ContainerFromItem(source[0]) as ContentPresenter) != null);

            Assert.AreEqual("Item 1", cp.Content);

            var tb = cp.FindFirstChild <TextBlock>();

            Assert.IsNotNull(tb);
            Assert.AreEqual("Item 1", tb.Text);
        }
        public async Task When_ContainerSet_Then_ContentShouldBeSet()
        {
            var resources = new TestsResources();

            var SUT = new ItemsControl
            {
                ItemTemplate = TextBlockItemTemplate
            };

            WindowHelper.WindowContent = SUT;

            await WindowHelper.WaitForIdle();

            var source = new[] {
                "item 0",
            };

            SUT.ItemsSource = source;

            ContentPresenter cp = null;
            await WindowHelper.WaitFor(() => (cp = SUT.ContainerFromItem(source[0]) as ContentPresenter) != null);

            Assert.AreEqual("item 0", cp.Content);

            var tb = cp.FindFirstChild <TextBlock>();

            Assert.IsNotNull(tb);
            Assert.AreEqual("item 0", tb.Text);
        }
        public async Task When_SpecifyingDisplayMemberPath_Then_ContentShouldBeSet()
        {
            var resources = new TestsResources();

            var SUT = new ItemsControl
            {
                ItemTemplate      = TextBlockItemTemplate,
                DisplayMemberPath = "DisplayName"
            };

            WindowHelper.WindowContent = SUT;

            await WindowHelper.WaitForIdle();

            var source = new[]
            {
                new ItemForDisplayMemberPath {
                    DisplayName = "item 0"
                },
                new ItemForDisplayMemberPath {
                    DisplayName = "item 1"
                },
                new ItemForDisplayMemberPath {
                    DisplayName = "item 2"
                }
            };

            SUT.ItemsSource = source;


            async Task Assert(int index, string s)
            {
                ContentPresenter cp = null;
                await WindowHelper.WaitFor(() => (cp = SUT.ContainerFromItem(source[index]) as ContentPresenter) != null);

                cp.Content.Should().Be(s, $"ContainerFromItem() at index {index}");

                var tb = cp.FindFirstChild <TextBlock>();

                tb.Should().NotBeNull($"Item at index {index}");
                tb.Text.Should().Be(s, $"TextBlock.Text at index {index}");
            }

            using var _ = new AssertionScope();

            await Assert(0, "item 0");
            await Assert(1, "item 1");
            await Assert(2, "item 2");
        }