|
|
|
@ -1,3 +1,4 @@ |
|
|
|
using System.Linq; |
|
|
|
using System.Threading.Tasks; |
|
|
|
using Avalonia.Controls; |
|
|
|
using Xunit; |
|
|
|
@ -205,6 +206,76 @@ namespace Avalonia.Styling.UnitTests |
|
|
|
Assert.Equal(SelectorMatch.NeverThisInstance, target.Match(b1)); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
[Theory] // http://nthmaster.com/
|
|
|
|
[InlineData(+0, 8, false, false, false, false, false, false, false, true , false, false, false)] |
|
|
|
[InlineData(+1, 6, false, false, false, false, false, true , true , true , true , true , true )] |
|
|
|
[InlineData(-1, 9, true , true , true , true , true , true , true , true , true , false, false)] |
|
|
|
public async Task Nth_Child_Master_Com_Test_Sigle_Selector( |
|
|
|
int step, int offset, params bool[] items) |
|
|
|
{ |
|
|
|
var panel = new StackPanel(); |
|
|
|
panel.Children.AddRange(items.Select(_ => new Border())); |
|
|
|
|
|
|
|
var previous = default(Selector).OfType<Border>(); |
|
|
|
var target = previous.NthChild(step, offset); |
|
|
|
|
|
|
|
var results = new bool[items.Length]; |
|
|
|
for (int index = 0; index < items.Length; index++) |
|
|
|
{ |
|
|
|
var border = panel.Children[index]; |
|
|
|
results[index] = await target.Match(border).Activator!.Take(1); |
|
|
|
} |
|
|
|
|
|
|
|
Assert.Equal(items, results); |
|
|
|
} |
|
|
|
|
|
|
|
[Theory] // http://nthmaster.com/
|
|
|
|
[InlineData(+1, 4, -1, 8, false, false, false, true , true , true , true , true , false, false, false)] |
|
|
|
[InlineData(+3, 1, +2, 0, false, false, false, true , false, false, false, false, false, true , false)] |
|
|
|
public async Task Nth_Child_Master_Com_Test_Double_Selector( |
|
|
|
int step1, int offset1, int step2, int offset2, params bool[] items) |
|
|
|
{ |
|
|
|
var panel = new StackPanel(); |
|
|
|
panel.Children.AddRange(items.Select(_ => new Border())); |
|
|
|
|
|
|
|
var previous = default(Selector).OfType<Border>(); |
|
|
|
var middle = previous.NthChild(step1, offset1); |
|
|
|
var target = middle.NthChild(step2, offset2); |
|
|
|
|
|
|
|
var results = new bool[items.Length]; |
|
|
|
for (int index = 0; index < items.Length; index++) |
|
|
|
{ |
|
|
|
var border = panel.Children[index]; |
|
|
|
results[index] = await target.Match(border).Activator!.Take(1); |
|
|
|
} |
|
|
|
|
|
|
|
Assert.Equal(items, results); |
|
|
|
} |
|
|
|
|
|
|
|
[Theory] // http://nthmaster.com/
|
|
|
|
[InlineData(+1, 2, 2, 1, -1, 9, false, false, true , false, true , false, true , false, true , false, false)] |
|
|
|
public async Task Nth_Child_Master_Com_Test_Triple_Selector( |
|
|
|
int step1, int offset1, int step2, int offset2, int step3, int offset3, params bool[] items) |
|
|
|
{ |
|
|
|
var panel = new StackPanel(); |
|
|
|
panel.Children.AddRange(items.Select(_ => new Border())); |
|
|
|
|
|
|
|
var previous = default(Selector).OfType<Border>(); |
|
|
|
var middle1 = previous.NthChild(step1, offset1); |
|
|
|
var middle2 = middle1.NthChild(step2, offset2); |
|
|
|
var target = middle2.NthChild(step3, offset3); |
|
|
|
|
|
|
|
var results = new bool[items.Length]; |
|
|
|
for (int index = 0; index < items.Length; index++) |
|
|
|
{ |
|
|
|
var border = panel.Children[index]; |
|
|
|
results[index] = await target.Match(border).Activator!.Take(1); |
|
|
|
} |
|
|
|
|
|
|
|
Assert.Equal(items, results); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Returns_Correct_TargetType() |
|
|
|
{ |
|
|
|
|