using BetterGenshinImpact.GameTask.Model.GameUI;
using BetterGenshinImpact.UnitTest.CoreTests.RecognitionTests.OCRTests;
using OpenCvSharp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BetterGenshinImpact.UnitTest.GameTaskTests.Model.GameUI
{
[Collection("Init Collection")]
public class GridScreenTests
{
private readonly PaddleFixture paddle;
public GridScreenTests(PaddleFixture paddle)
{
this.paddle = paddle;
}
[Theory]
[InlineData(@"AutoArtifactSalvage\ArtifactGrid.png", 4, 2)]
[InlineData(@"GetGridIcons\FoodGrid.png", 32, 8)]
[InlineData(@"GetGridIcons\WeaponGrid.png", 4, 2)]
[InlineData(@"GetGridIcons\WeaponGrid3.png", 32, 8)]
///
/// 测试获取各种界面中的物品图标,经过算法的后处理,结果应正确
///
public void GetGridIcons_ShouldBeRight(string screenshot, int count, int columns)
{
//
using Mat mat = new Mat(@$"..\..\..\Assets\{screenshot}");
//
var rects = GridScreen.GridEnumerator.GetGridItems(mat, columns);
var cells = GridScreen.GridEnumerator.PostProcess(mat, rects, (int)(0.025 * mat.Height));
//
Assert.Equal(count, cells.Count());
}
[Theory]
[InlineData(@"AutoArtifactSalvage\ArtifactGrid.png", 4, 2)]
[InlineData(@"GetGridIcons\FoodGrid.png", 32, 8)]
[InlineData(@"GetGridIcons\WeaponGrid.png", 4, 2)]
[InlineData(@"GetGridIcons\WeaponGrid3.png", 32, 8)]
///
/// 测试获取各种界面中的物品图标,使用复杂的cv算法,经过算法的后处理,结果应正确
///
public void GetGridIconsAlpha_ShouldBeRight(string screenshot, int count, int columns)
{
//
using Mat mat = new Mat(@$"..\..\..\Assets\{screenshot}");
//
var rects = GridScreen.GridEnumerator.GetGridItems(mat, columns, findContoursAlpha: true);
var cells = GridScreen.GridEnumerator.PostProcess(mat, rects, (int)(0.025 * mat.Height));
//
Assert.Equal(count, cells.Count());
}
[Fact]
///
/// 测试判断前后两张图是否属于滚动,结果应正确
///
public void IsScrolling_ResultShouldBeRight()
{
//
using Mat mat = new Mat(@$"..\..\..\Assets\AutoArtifactSalvage\ArtifactGrid.png", flags: ImreadModes.Grayscale);
using Mat cropped = mat[new Rect(0, 0, mat.Width, mat.Height - 10)];
using Mat black = new Mat(mat.Size(), mat.Type(), Scalar.Black);
using Mat scrolled = black.Clone(); // 一个向下平移了10像素的图
using Mat pos = scrolled[new Rect(0, 10, mat.Width, mat.Height - 10)];
cropped.CopyTo(pos);
//
bool result1 = GridScroller.IsScrolling(mat, scrolled, out Point2d shift, upperThreshold: 0.99);
bool result2 = GridScroller.IsScrolling(mat, mat, out Point2d _);
bool result3 = GridScroller.IsScrolling(mat, black, out Point2d _);
//
Assert.True(result1);
Assert.True(shift.Y <= 10 && shift.Y > 9.9);
Assert.False(result2);
Assert.False(result3);
}
public static IEnumerable