public void TestUnloadViaScroll()
        {
            WeakList <Container> references = new WeakList <Container>();

            AddStep("populate panels", () =>
            {
                references.Clear();

                for (int i = 0; i < 16; i++)
                {
                    flow.Add(new Container
                    {
                        Size     = new Vector2(128),
                        Children = new Drawable[]
                        {
                            new DelayedLoadUnloadWrapper(() =>
                            {
                                var container = new Container
                                {
                                    RelativeSizeAxes = Axes.Both,
                                    Children         = new Drawable[]
                                    {
                                        new TestBox {
                                            RelativeSizeAxes = Axes.Both
                                        }
                                    },
                                };

                                references.Add(container);

                                return(container);
                            }, 500, 2000),
                            new SpriteText {
                                Text = i.ToString()
                            },
                        }
                    });
                }

                flow.Add(
                    new Container
                {
                    Size = new Vector2(128, 1280),
                });
            });

            AddUntilStep("references loaded", () => references.Count() == 16 && references.All(c => c.IsLoaded));

            AddStep("scroll to end", () => scroll.ScrollToEnd());

            AddUntilStep("references lost", () =>
            {
                GC.Collect();
                return(!references.Any());
            });

            AddStep("scroll to start", () => scroll.ScrollToStart());

            AddUntilStep("references restored", () => references.Count() == 16);
        }
        public void TestRemovedStillUnload()
        {
            WeakList <Container> references = new WeakList <Container>();

            AddStep("populate panels", () =>
            {
                references.Clear();

                for (int i = 0; i < 16; i++)
                {
                    flow.Add(new Container
                    {
                        Size     = new Vector2(128),
                        Children = new Drawable[]
                        {
                            new DelayedLoadUnloadWrapper(() =>
                            {
                                var container = new Container
                                {
                                    RelativeSizeAxes = Axes.Both,
                                    Children         = new Drawable[]
                                    {
                                        new TestBox {
                                            RelativeSizeAxes = Axes.Both
                                        }
                                    },
                                };

                                references.Add(container);

                                return(container);
                            }, 500, 2000),
                            new SpriteText {
                                Text = i.ToString()
                            },
                        }
                    });
                }
            });

            AddUntilStep("references loaded", () => references.Count() == 16 && references.All(c => c.IsLoaded));

            AddAssert("check schedulers present", () => scroll.Scheduler.HasPendingTasks);

            AddStep("Remove all panels", () => flow.Clear(false));

            AddUntilStep("repeating schedulers removed", () => !scroll.Scheduler.HasPendingTasks);

            AddUntilStep("references lost", () =>
            {
                GC.Collect();
                return(!references.Any());
            });
        }
Esempio n. 3
0
        public void TestTasksCanceledDuringLoadSequence()
        {
            var references = new WeakList <TestBox>();

            AddStep("populate panels", () =>
            {
                references.Clear();

                for (int i = 0; i < 16; i++)
                {
                    DelayedLoadUnloadWrapper loadUnloadWrapper;

                    flow.Add(new Container
                    {
                        Size  = new Vector2(128),
                        Child = loadUnloadWrapper = new DelayedLoadUnloadWrapper(() =>
                        {
                            var content = new TestBox {
                                RelativeSizeAxes = Axes.Both
                            };
                            references.Add(content);
                            return(content);
                        }, 0),
                    });

                    // cancel load tasks after the delayed load has started.
                    loadUnloadWrapper.DelayedLoadStarted += _ => game.Schedule(() => loadUnloadWrapper.UnbindAllBindables());
                }
            });

            AddStep("remove all panels", () => flow.Clear(false));

            AddUntilStep("references lost", () =>
            {
                GC.Collect();
                return(!references.Any());
            });
        }