@ -32,7 +32,7 @@ public class PopupTests
#elif XUNIT
#elif XUNIT
[AvaloniaFact]
[AvaloniaFact]
#endif
#endif
public void Popup_Uses_Dedicated_TopLevel_And_Is_Discoverable ( )
public void Popup_Uses_Dedicated_TopLevel ( )
{
{
var target = new Border { Background = Brushes . Red } ;
var target = new Border { Background = Brushes . Red } ;
var popup = new Popup
var popup = new Popup
@ -49,22 +49,22 @@ public class PopupTests
window . Show ( ) ;
window . Show ( ) ;
Dispatcher . UIThread . RunJobs ( ) ;
Dispatcher . UIThread . RunJobs ( ) ;
AssertHelper . Equal ( 0 , window . GetOpenPopups ( ) . Count ) ;
AssertHelper . False ( popup . IsOpen ) ;
AssertHelper . False ( popup . IsUsingOverlayLayer ) ;
AssertHelper . Null ( GetPopupTopLevel ( popup ) ) ;
popup . Open ( ) ;
popup . Open ( ) ;
Dispatcher . UIThread . RunJobs ( ) ;
Dispatcher . UIThread . RunJobs ( ) ;
AssertHelper . True ( popup . IsOpen ) ;
AssertHelper . True ( popup . IsOpen ) ;
AssertHelper . False ( popup . IsUsingOverlayLayer ) ;
AssertHelper . False ( popup . IsUsingOverlayLayer ) ;
AssertHelper . Equal ( 1 , window . GetOpenPopups ( ) . Count ) ;
AssertHelper . True ( GetPopupTopLevel ( popup ) is PopupRoot ) ;
AssertHelper . True ( window . GetOpenPopups ( ) [ 0 ] is PopupRoot ) ;
popup . Close ( ) ;
Dispatcher . UIThread . RunJobs ( ) ;
AssertHelper . Equal ( 0 , window . GetOpenPopups ( ) . Count ) ;
window . Close ( ) ;
window . Close ( ) ;
AssertHelper . False ( popup . IsOpen ) ;
AssertHelper . False ( popup . IsUsingOverlayLayer ) ;
AssertHelper . Null ( GetPopupTopLevel ( popup ) ) ;
}
}
#if NUNIT
#if NUNIT
@ -72,31 +72,40 @@ public class PopupTests
#elif XUNIT
#elif XUNIT
[AvaloniaFact]
[AvaloniaFact]
#endif
#endif
public void Can_Click_Button_Inside_Platform_Popup ( )
public void Popup_Placement_Respects_Window_Position ( )
{
{
var clickCount = 0 ;
var target = new Border
var button = new Button { Width = 8 0 , Height = 3 0 } ;
{
button . Click + = ( _ , _ ) = > clickCount + + ;
Width = 2 0 ,
Height = 2 0 ,
var target = new Border { Background = Brushes . Red } ;
HorizontalAlignment = HorizontalAlignment . Left ,
var popup = new Popup { PlacementTarget = target , Child = button } ;
VerticalAlignment = VerticalAlignment . Top ,
Background = Brushes . Red
} ;
var popup = new Popup
{
PlacementTarget = target ,
Placement = PlacementMode . Bottom ,
Child = new Border { Width = 2 0 , Height = 2 0 }
} ;
var window = new Window
var window = new Window
{
{
Width = 1 0 0 ,
Width = 1 0 0 ,
Height = 1 0 0 ,
Height = 1 0 0 ,
Content = new Panel { Children = { target , popup } }
Content = new Panel { Children = { target , popup } }
} ;
} ;
window . Position = new PixelPoint ( 1 0 0 , 2 0 0 ) ;
window . Show ( ) ;
window . Show ( ) ;
Dispatcher . UIThread . RunJobs ( ) ;
Dispatcher . UIThread . RunJobs ( ) ;
popup . Open ( ) ;
popup . Open ( ) ;
Dispatcher . UIThread . RunJobs ( ) ;
Dispatcher . UIThread . RunJobs ( ) ;
var popupRoot = window . GetOpenPopups ( ) [ 0 ] ;
var popupRoot = GetPopupTopLevel ( popup ) ;
popupRoot . MouseDown ( new Point ( 4 0 , 1 5 ) , MouseButton . Left ) ;
AssertHelper . NotNull ( popupRoot ) ;
popupRoot . MouseUp ( new Point ( 4 0 , 1 5 ) , MouseButton . Left ) ;
AssertHelper . Equal ( 1 , clickCount ) ;
var expected = target . PointToScreen ( new Point ( 0 , target . Bounds . Height ) ) ;
AssertHelper . Equal ( expected , popupRoot . PointToScreen ( default ) ) ;
window . Close ( ) ;
window . Close ( ) ;
}
}
@ -106,38 +115,33 @@ public class PopupTests
#elif XUNIT
#elif XUNIT
[AvaloniaFact]
[AvaloniaFact]
#endif
#endif
public void Popup_Placement_Respects_Window_Position ( )
public void Can_Click_Button_Inside_Platform_Popup ( )
{
{
var target = new Border
var clickCount = 0 ;
{
var button = new Button { Width = 8 0 , Height = 3 0 } ;
Width = 2 0 ,
button . Click + = ( _ , _ ) = > clickCount + + ;
Height = 2 0 ,
HorizontalAlignment = HorizontalAlignment . Left ,
var target = new Border { Background = Brushes . Red } ;
VerticalAlignment = VerticalAlignment . Top ,
var popup = new Popup { PlacementTarget = target , Child = button } ;
Background = Brushes . Red
} ;
var popup = new Popup
{
PlacementTarget = target ,
Placement = PlacementMode . Bottom ,
Child = new Border { Width = 2 0 , Height = 2 0 }
} ;
var window = new Window
var window = new Window
{
{
Width = 1 0 0 ,
Width = 1 0 0 ,
Height = 1 0 0 ,
Height = 1 0 0 ,
Content = new Panel { Children = { target , popup } }
Content = new Panel { Children = { target , popup } }
} ;
} ;
window . Position = new PixelPoint ( 1 0 0 , 2 0 0 ) ;
window . Show ( ) ;
window . Show ( ) ;
Dispatcher . UIThread . RunJobs ( ) ;
Dispatcher . UIThread . RunJobs ( ) ;
popup . Open ( ) ;
popup . Open ( ) ;
Dispatcher . UIThread . RunJobs ( ) ;
Dispatcher . UIThread . RunJobs ( ) ;
var popupRoot = window . GetOpenPopups ( ) [ 0 ] ;
var popupRoot = GetPopupTopLevel ( popup ) ;
var expected = target . PointToScreen ( new Point ( 0 , target . Bounds . Height ) ) ;
AssertHelper . NotNull ( popupRoot ) ;
AssertHelper . Equal ( expected , popupRoot . PointToScreen ( default ) ) ;
popupRoot . MouseDown ( new Point ( 4 0 , 1 5 ) , MouseButton . Left ) ;
popupRoot . MouseUp ( new Point ( 4 0 , 1 5 ) , MouseButton . Left ) ;
AssertHelper . Equal ( 1 , clickCount ) ;
window . Close ( ) ;
window . Close ( ) ;
}
}
@ -147,7 +151,7 @@ public class PopupTests
#elif XUNIT
#elif XUNIT
[AvaloniaFact]
[AvaloniaFact]
#endif
#endif
public void Nested_Popup_Is_Child_Of_Popup_Root ( )
public void Nested_Popup_Is_Owned_By_Parent_Popup ( )
{
{
var nestedTarget = new Border { Width = 2 0 , Height = 2 0 , Background = Brushes . Green } ;
var nestedTarget = new Border { Width = 2 0 , Height = 2 0 , Background = Brushes . Green } ;
var nestedPopup = new Popup
var nestedPopup = new Popup
@ -175,11 +179,34 @@ public class PopupTests
nestedPopup . Open ( ) ;
nestedPopup . Open ( ) ;
Dispatcher . UIThread . RunJobs ( ) ;
Dispatcher . UIThread . RunJobs ( ) ;
var popupRoot = window . GetOpenPopups ( ) [ 0 ] ;
AssertHelper . Equal ( 1 , window . OpenedPopups . Count ) ;
AssertHelper . Equal ( 1 , window . GetOpenPopups ( ) . Count ) ;
AssertHelper . Same ( popup , window . OpenedPopups [ 0 ] ) ;
AssertHelper . Equal ( 1 , popupRoot . GetOpenPopups ( ) . Count ) ;
AssertHelper . True ( popupRoot . GetOpenPopups ( ) [ 0 ] is PopupRoot ) ;
AssertHelper . Equal ( 1 , popup . OpenedPopups . Count ) ;
AssertHelper . Same ( nestedPopup , popup . OpenedPopups [ 0 ] ) ;
AssertHelper . Equal ( 0 , nestedPopup . OpenedPopups . Count ) ;
// The nested popup is hosted in the parent popup's own top level.
AssertHelper . Same ( GetPopupTopLevel ( popup ) , TopLevel . GetTopLevel ( nestedTarget ) ) ;
nestedPopup . Close ( ) ;
Dispatcher . UIThread . RunJobs ( ) ;
AssertHelper . Equal ( 0 , popup . OpenedPopups . Count ) ;
AssertHelper . Equal ( 1 , window . OpenedPopups . Count ) ;
popup . Close ( ) ;
Dispatcher . UIThread . RunJobs ( ) ;
AssertHelper . Equal ( 0 , window . OpenedPopups . Count ) ;
window . Close ( ) ;
window . Close ( ) ;
}
}
internal static TopLevel GetPopupTopLevel ( Popup popup )
{
AssertHelper . NotNull ( popup . Child ) ;
var topLevel = TopLevel . GetTopLevel ( popup . Child ) ;
return topLevel ;
}
}
}