123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- using Avalonia.Platform;
- using Avalonia.Threading;
- using Avalonia.UnitTests;
- using Moq;
- using Xunit;
- namespace Avalonia.Controls.UnitTests;
- public class LoadedTests : ScopedTestBase
- {
- [Fact]
- public void Window_Loads_And_Unloads()
- {
- // Some other tests are populating the queue and are not resetting the dispatcher, so we need to purge it
- Control.ResetLoadedQueueForUnitTests();
- using (UnitTestApplication.Start(TestServices.StyledWindow))
- {
- int loadedCount = 0, unloadedCount = 0;
- var target = new Window();
- target.Loaded += (_, _) => loadedCount++;
- target.Unloaded += (_, _) => unloadedCount++;
-
- Assert.Equal(0, loadedCount);
- Assert.Equal(0, unloadedCount);
-
- target.Show();
- Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded);
- Assert.True(target.IsLoaded);
- Assert.Equal(1, loadedCount);
- Assert.Equal(0, unloadedCount);
-
- target.Close();
-
- Assert.Equal(1, loadedCount);
- Assert.Equal(1, unloadedCount);
- Assert.False(target.IsLoaded);
- }
- }
-
- [Fact]
- public void Control_Loads_And_Unloads()
- {
- // Some other tests are populating the queue and are not resetting the dispatcher, so we need to purge it
- Control.ResetLoadedQueueForUnitTests();
- using (UnitTestApplication.Start(TestServices.StyledWindow))
- {
- int loadedCount = 0, unloadedCount = 0;
- var window = new Window();
- window.Show();
- var target = new Button();
- target.Loaded += (_, _) => loadedCount++;
- target.Unloaded += (_, _) => unloadedCount++;
-
- Assert.Equal(0, loadedCount);
- Assert.Equal(0, unloadedCount);
-
- window.Content = target;
- Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded);
- Assert.True(target.IsLoaded);
- Assert.Equal(1, loadedCount);
- Assert.Equal(0, unloadedCount);
-
- window.Content = null;
-
- Assert.Equal(1, loadedCount);
- Assert.Equal(1, unloadedCount);
- Assert.False(target.IsLoaded);
- }
- }
- [Fact]
- public void Loaded_Should_Not_Be_Raised_If_Detached_From_Visual_Tree()
- {
- using var app = UnitTestApplication.Start(TestServices.StyledWindow);
- var loadedCount = 0;
- var unloadedCount = 0;
- var window = new Window();
- window.Show();
- var target = new Button();
- target.Loaded += (_, _) => loadedCount++;
- target.Unloaded += (_, _) => unloadedCount++;
- Assert.Equal(0, loadedCount);
- Assert.Equal(0, unloadedCount);
- // Attach to, then immediately detach from the visual tree.
- window.Content = target;
- window.Content = null;
- // Attach to another logical parent (this can actually happen outside tests with overlay popups)
- ((ISetLogicalParent) target).SetParent(new Window());
- Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded);
- // At this point, the control shouldn't have been loaded at all.
- Assert.Null(target.VisualParent);
- Assert.False(target.IsLoaded);
- Assert.Equal(0, loadedCount);
- Assert.Equal(0, unloadedCount);
- }
- }
|