@ -121,5 +121,202 @@ namespace Avalonia.Input.UnitTests
Assert . False ( target2 . Classes . Contains ( ":focus-visible" ) ) ;
}
}
[Fact]
public void Control_FocusWithin_PseudoClass_Should_Be_Applied ( )
{
using ( UnitTestApplication . Start ( TestServices . RealFocus ) )
{
var target1 = new Decorator ( ) ;
var target2 = new Decorator ( ) ;
var root = new TestRoot
{
Child = new StackPanel
{
Children =
{
target1 ,
target2
}
}
} ;
target1 . ApplyTemplate ( ) ;
target2 . ApplyTemplate ( ) ;
FocusManager . Instance ? . Focus ( target1 ) ;
Assert . True ( target1 . IsFocused ) ;
Assert . True ( target1 . Classes . Contains ( ":focus-within" ) ) ;
Assert . True ( target1 . IsKeyboardFocusWithin ) ;
Assert . True ( root . Child . Classes . Contains ( ":focus-within" ) ) ;
Assert . True ( root . Child . IsKeyboardFocusWithin ) ;
Assert . True ( root . Classes . Contains ( ":focus-within" ) ) ;
Assert . True ( root . IsKeyboardFocusWithin ) ;
}
}
[Fact]
public void Control_FocusWithin_PseudoClass_Should_Be_Applied_and_Removed ( )
{
using ( UnitTestApplication . Start ( TestServices . RealFocus ) )
{
var target1 = new Decorator ( ) ;
var target2 = new Decorator ( ) ;
var panel1 = new Panel { Children = { target1 } } ;
var panel2 = new Panel { Children = { target2 } } ;
var root = new TestRoot
{
Child = new StackPanel
{
Children =
{
panel1 ,
panel2
}
}
} ;
target1 . ApplyTemplate ( ) ;
target2 . ApplyTemplate ( ) ;
FocusManager . Instance ? . Focus ( target1 ) ;
Assert . True ( target1 . IsFocused ) ;
Assert . True ( target1 . Classes . Contains ( ":focus-within" ) ) ;
Assert . True ( target1 . IsKeyboardFocusWithin ) ;
Assert . True ( panel1 . Classes . Contains ( ":focus-within" ) ) ;
Assert . True ( panel1 . IsKeyboardFocusWithin ) ;
Assert . True ( root . Child . Classes . Contains ( ":focus-within" ) ) ;
Assert . True ( root . Child . IsKeyboardFocusWithin ) ;
Assert . True ( root . Classes . Contains ( ":focus-within" ) ) ;
Assert . True ( root . IsKeyboardFocusWithin ) ;
FocusManager . Instance ? . Focus ( target2 ) ;
Assert . False ( target1 . IsFocused ) ;
Assert . False ( target1 . Classes . Contains ( ":focus-within" ) ) ;
Assert . False ( target1 . IsKeyboardFocusWithin ) ;
Assert . False ( panel1 . Classes . Contains ( ":focus-within" ) ) ;
Assert . False ( panel1 . IsKeyboardFocusWithin ) ;
Assert . True ( root . Child . Classes . Contains ( ":focus-within" ) ) ;
Assert . True ( root . Child . IsKeyboardFocusWithin ) ;
Assert . True ( root . Classes . Contains ( ":focus-within" ) ) ;
Assert . True ( root . IsKeyboardFocusWithin ) ;
Assert . True ( target2 . IsFocused ) ;
Assert . True ( target2 . Classes . Contains ( ":focus-within" ) ) ;
Assert . True ( target2 . IsKeyboardFocusWithin ) ;
Assert . True ( panel2 . Classes . Contains ( ":focus-within" ) ) ;
Assert . True ( panel2 . IsKeyboardFocusWithin ) ;
}
}
[Fact]
public void Control_FocusWithin_Pseudoclass_Should_Be_Removed_When_Removed_From_Tree ( )
{
using ( UnitTestApplication . Start ( TestServices . RealFocus ) )
{
var target1 = new Decorator ( ) ;
var target2 = new Decorator ( ) ;
var root = new TestRoot
{
Child = new StackPanel
{
Children =
{
target1 ,
target2
}
}
} ;
target1 . ApplyTemplate ( ) ;
target2 . ApplyTemplate ( ) ;
FocusManager . Instance ? . Focus ( target1 ) ;
Assert . True ( target1 . IsFocused ) ;
Assert . True ( target1 . Classes . Contains ( ":focus-within" ) ) ;
Assert . True ( target1 . IsKeyboardFocusWithin ) ;
Assert . True ( root . Child . Classes . Contains ( ":focus-within" ) ) ;
Assert . True ( root . Child . IsKeyboardFocusWithin ) ;
Assert . True ( root . Classes . Contains ( ":focus-within" ) ) ;
Assert . True ( root . IsKeyboardFocusWithin ) ;
Assert . Equal ( KeyboardDevice . Instance . FocusedElement , target1 ) ;
root . Child = null ;
Assert . Null ( KeyboardDevice . Instance . FocusedElement ) ;
Assert . False ( target1 . IsFocused ) ;
Assert . False ( target1 . Classes . Contains ( ":focus-within" ) ) ;
Assert . False ( target1 . IsKeyboardFocusWithin ) ;
Assert . False ( root . Classes . Contains ( ":focus-within" ) ) ;
Assert . False ( root . IsKeyboardFocusWithin ) ;
}
}
[Fact]
public void Control_FocusWithin_Pseudoclass_Should_Be_Removed_Focus_Moves_To_Different_Root ( )
{
using ( UnitTestApplication . Start ( TestServices . RealFocus ) )
{
var target1 = new Decorator ( ) ;
var target2 = new Decorator ( ) ;
var root1 = new TestRoot
{
Child = new StackPanel
{
Children =
{
target1 ,
}
}
} ;
var root2 = new TestRoot
{
Child = new StackPanel
{
Children =
{
target2 ,
}
}
} ;
target1 . ApplyTemplate ( ) ;
target2 . ApplyTemplate ( ) ;
FocusManager . Instance ? . Focus ( target1 ) ;
Assert . True ( target1 . IsFocused ) ;
Assert . True ( target1 . Classes . Contains ( ":focus-within" ) ) ;
Assert . True ( target1 . IsKeyboardFocusWithin ) ;
Assert . True ( root1 . Child . Classes . Contains ( ":focus-within" ) ) ;
Assert . True ( root1 . Child . IsKeyboardFocusWithin ) ;
Assert . True ( root1 . Classes . Contains ( ":focus-within" ) ) ;
Assert . True ( root1 . IsKeyboardFocusWithin ) ;
Assert . Equal ( KeyboardDevice . Instance . FocusedElement , target1 ) ;
FocusManager . Instance ? . Focus ( target2 ) ;
Assert . False ( target1 . IsFocused ) ;
Assert . False ( target1 . Classes . Contains ( ":focus-within" ) ) ;
Assert . False ( target1 . IsKeyboardFocusWithin ) ;
Assert . False ( root1 . Child . Classes . Contains ( ":focus-within" ) ) ;
Assert . False ( root1 . Child . IsKeyboardFocusWithin ) ;
Assert . False ( root1 . Classes . Contains ( ":focus-within" ) ) ;
Assert . False ( root1 . IsKeyboardFocusWithin ) ;
Assert . True ( target2 . IsFocused ) ;
Assert . True ( target2 . Classes . Contains ( ":focus-within" ) ) ;
Assert . True ( target2 . IsKeyboardFocusWithin ) ;
Assert . True ( root2 . Child . Classes . Contains ( ":focus-within" ) ) ;
Assert . True ( root2 . Child . IsKeyboardFocusWithin ) ;
Assert . True ( root2 . Classes . Contains ( ":focus-within" ) ) ;
Assert . True ( root2 . IsKeyboardFocusWithin ) ;
}
}
}
}