Skip to content

Commit

Permalink
chore: add test for irregular corner radius
Browse files Browse the repository at this point in the history
  • Loading branch information
RafaelMendesRosa committed Aug 30, 2023
1 parent 0c6000d commit b88d27c
Show file tree
Hide file tree
Showing 3 changed files with 176 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,26 @@
</utu:ShadowContainer>
</Border>
</StackPanel>

<StackPanel HorizontalAlignment="Center"
VerticalAlignment="Center"
x:Name="containerIrregularCorner"
Visibility="Collapsed">
<Border x:Name="outerBorderIrregularCorner"
Background="Blue"
Padding="10"
Height="220"
Width="220">
<utu:ShadowContainer x:Name="shadowContainerIrregularCorner"
Background="Green">

<Border Width="200"
Height="200"
CornerRadius="0,200,0,200"
x:Name="borderIrregularCorner"/>
</utu:ShadowContainer>
</Border>
</StackPanel>
<StackPanel Spacing="10"
Grid.Row="1"
Orientation="Horizontal"
Expand Down Expand Up @@ -84,6 +104,9 @@
<TextBlock Text="Rectangle"/>
<RadioButton GroupName="RadioGroup" Content="Rectangle" x:Name="check_Rectangle" Click="Rectangle_ClickElement" />

<TextBlock Text="Irrelugar Corner Radius"/>
<RadioButton GroupName="RadioGroup" Content="Irrelugar Corner Radius" x:Name="check_IrregularCorner" Click="IrregularCorner_ClickElement" />

</StackPanel>
</StackPanel>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@ private void runButton_Click(object sender, RoutedEventArgs e)
statusText.Text = "Running";
shadowContainer.Shadows.Clear();
shadowContainerRectangle.Shadows.Clear();

shadowContainerIrregularCorner.Shadows.Clear();

if (!int.TryParse(xOffsetText.Text, out var xOffset))
{
xOffset = 0;
Expand Down Expand Up @@ -68,6 +69,15 @@ private void runButton_Click(object sender, RoutedEventArgs e)
Color = Colors.Red,
});

shadowContainerIrregularCorner.Shadows.Add(new UI.Shadow
{
OffsetX = xOffset,
OffsetY = yOffset,
IsInner = isInner,
Opacity = 1,
Color = Colors.Red,
});

statusText.Text = "Verify";
}

Expand All @@ -82,6 +92,9 @@ private void reset_Click(object sender, RoutedEventArgs e)

shadowContainer.Shadows.Clear();
shadowContainerRectangle.Shadows.Clear();
shadowContainerIrregularCorner.Shadows.Clear();

containerIrregularCorner.Visibility = Visibility.Collapsed;
containerRectangle.Visibility = Visibility.Collapsed;
containerBorder.Visibility = Visibility.Visible;
}
Expand All @@ -90,14 +103,22 @@ private void Border_ClickElement(object sender, RoutedEventArgs e)
{
containerRectangle.Visibility = Visibility.Collapsed;
containerBorder.Visibility = Visibility.Visible;
containerIrregularCorner.Visibility = Visibility.Collapsed;

}
private void Rectangle_ClickElement(object sender, RoutedEventArgs e)
{
containerRectangle.Visibility = Visibility.Visible;
containerBorder.Visibility = Visibility.Collapsed;
containerIrregularCorner.Visibility = Visibility.Collapsed;
}

private void IrregularCorner_ClickElement(object sender, RoutedEventArgs e)
{
containerRectangle.Visibility = Visibility.Collapsed;
containerBorder.Visibility = Visibility.Collapsed;
containerIrregularCorner.Visibility = Visibility.Visible;
}


}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,136 @@ public void When_RectangleShadows(int xOffset, int yOffset, bool inner)
}


[Test]
[TestCase(10, 10, false)]
[TestCase(-10, -10, false)]
public void When_ShadowsIrregularCorner(int xOffset, int yOffset, bool inner)
{
var shadowContainer = App.WaitForElementWithMessage("shadowContainer");
App.Tap("check_IrregularCorner");
shadowContainer = App.WaitForElementWithMessage("shadowContainerIrregularCorner");
var runButton = App.MarkedAnywhere("runButton");
var resetButton = App.MarkedAnywhere("resetButton");
var statusText = App.MarkedAnywhere("statusText");


App.MarkedAnywhere("xOffsetText").ClearText().EnterTextAndDismiss(xOffset.ToString());
App.MarkedAnywhere("yOffsetText").ClearText().EnterTextAndDismiss(yOffset.ToString());
var innerCheck = App.MarkedAnywhere("inner");

innerCheck.SetDependencyPropertyValue("IsChecked", inner.ToString());
App.WaitForDependencyPropertyValue(innerCheck, "IsChecked", inner);

runButton.FastTap();

App.WaitForDependencyPropertyValue<string>(statusText, "Text", "Verify");
var outerTestRect = App.GetPhysicalRect("outerBorderIrregularCorner");

var caseName = $"Shadow_x{xOffset}_y{yOffset}{(inner ? "_Inner" : "_Outer")}";

using var screenshot = TakeScreenshot(caseName);



int currentX = 3;
int currentY = 3;

int absXOffset = Math.Abs(xOffset);
int absYOffset = Math.Abs(yOffset);

while (currentX < absXOffset || currentY < absYOffset)
{

var beginX = (int)outerTestRect.X;
var beginY = (int)outerTestRect.Y;
var centerX = (int)outerTestRect.CenterX;
var centerY = (int)outerTestRect.CenterY;
var endX = (int)outerTestRect.Right;
var endY = (int)outerTestRect.Bottom;

//CornerRadius="0,100,0,100"
/*
* Points for test
_______________________
| 1 7 4 |
| A C |
| 2 8 5 |
| B D |
| 3 9 6 |
_______________________
*/

//1
var leftTopOuterTestPoint = new Point(beginX + currentX, beginY + currentY);
//2
var leftMiddleOuterTestPoint = new Point(beginX + currentX, centerY);
//3
var leftBottomOuterTestPoint = new Point(beginX + currentX, endY - currentY);

//4
var rightTopOuterTestPoint = new Point(endX - currentX, beginY + currentY);
//5
var rightMiddleOuterTestPoint = new Point(endX - currentX, centerY);
//6
var rightBottomOuterTestPoint = new Point(endX - currentX, endY - currentY);

//7
var centerTopOuterTestPoint = new Point(centerX - currentX, beginY + currentY);
//8
var centerMiddleOuterTestPoint = new Point(centerX - currentX, centerY);
//9
var centerBottomOuterTestPoint = new Point(centerX - currentX, endY - currentY);

//A
var cornerTopLeftOuterTestPoint = new Point(beginX + (endX - beginX) / 5 * 2 + currentX, beginY + (endY - beginY) / 5 * 2 + currentY);
//B
var cornerBottomLeftOuterTestPoint = new Point(beginX + (endX - beginX) / 5 * 4 + currentX, beginY + (endY - beginY) / 5 * 2 - currentY);
//C
var cornerTopRightOuterTestPoint = new Point(beginX + (endX - beginX) / 5 * 2 - currentX, beginY + (endY - beginY) / 5 * 4 + currentY);
//D
var cornerBottomRightOuterTestPoint = new Point(beginX + (endX - beginX) / 5 * 4 - currentX, beginY + (endY - beginY) / 5 * 4 - currentY);

var outerDefault = inner ? Blue : Red;

AssertExpectations(new[] {
(leftTopOuterTestPoint, xOffset < 0 ? outerDefault : Blue),
(leftMiddleOuterTestPoint, Blue),
(leftBottomOuterTestPoint, Blue),

(rightTopOuterTestPoint, Blue),
(rightMiddleOuterTestPoint, Blue),
(rightBottomOuterTestPoint, xOffset < 0 ? Blue : outerDefault),

(centerTopOuterTestPoint, Blue),
(centerMiddleOuterTestPoint, Green),
(centerBottomOuterTestPoint, Blue ),

(cornerTopLeftOuterTestPoint, Green),
(cornerBottomLeftOuterTestPoint, Blue),
(cornerTopRightOuterTestPoint, Blue),
(cornerBottomRightOuterTestPoint, Green)
});

void AssertExpectations((Point TestPoint, string Color)[] expectations)
{
foreach (var expectation in expectations)
{
ImageAssert.HasPixels(
screenshot,
ExpectedPixels
.At(expectation.TestPoint)
.Named($"{caseName}_at_{expectation.TestPoint.X}_{expectation.TestPoint.Y}_offset_{currentX}_{currentY}")
.Pixel(expectation.Color)
);
}
}

currentX = Math.Min(++currentX, absXOffset);
currentY = Math.Min(++currentY, absYOffset);
}
resetButton.FastTap();
}

public void Check_Assert(IAppRect outerBorderRect, IAppRect borderRect, int xOffset, int yOffset, bool inner)
{

Expand Down

0 comments on commit b88d27c

Please sign in to comment.