mirror of
https://github.com/babalae/better-genshin-impact.git
synced 2026-03-15 07:43:20 +08:00
圣遗物分解套装筛选的改进和JS引擎的约束 (#2319)
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
using BetterGenshinImpact.GameTask.AutoArtifactSalvage;
|
||||
using BetterGenshinImpact.GameTask.Model.GameUI;
|
||||
using BetterGenshinImpact.UnitTest.CoreTests.RecognitionTests.OCRTests;
|
||||
using Microsoft.ClearScript;
|
||||
using Microsoft.Extensions.Localization;
|
||||
using Microsoft.Extensions.Time.Testing;
|
||||
using OpenCvSharp;
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
@@ -219,18 +221,16 @@ namespace BetterGenshinImpact.UnitTest.GameTaskTests.AutoArtifactSalvageTests
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(@"ArtifactAffixes.png", @"(async function (artifact) {
|
||||
var hasATK = Array.from(artifact.MinorAffixes).some(affix => affix.Type == 'ATK');
|
||||
var hasDEF = Array.from(artifact.MinorAffixes).some(affix => affix.Type == 'DEF');
|
||||
Output = hasATK && hasDEF;
|
||||
})(ArtifactStat);", false)]
|
||||
[InlineData(@"ArtifactAffixes.png", @"(async function (artifact) {
|
||||
var level = artifact.Level;
|
||||
var hasATKPercent = Array.from(artifact.MinorAffixes).some(affix => affix.Type == 'ATKPercent');
|
||||
var hasDEF = Array.from(artifact.MinorAffixes).some(affix => affix.Type == 'DEF');
|
||||
Output = level == 0 && hasATKPercent && hasDEF;
|
||||
})(ArtifactStat);", true)]
|
||||
public void IsMatchJavaScript_JSShouldBeRight(string screenshot, string js, bool expected)
|
||||
[InlineData(@"ArtifactAffixes.png", @"
|
||||
var hasATK = Array.from(ArtifactStat.MinorAffixes).some(affix => affix.Type == 'ATK');
|
||||
var hasDEF = Array.from(ArtifactStat.MinorAffixes).some(affix => affix.Type == 'DEF');
|
||||
Output = hasATK && hasDEF;", false)]
|
||||
[InlineData(@"ArtifactAffixes.png", @"
|
||||
var level = ArtifactStat.Level;
|
||||
var hasATKPercent = Array.from(ArtifactStat.MinorAffixes).some(affix => affix.Type == 'ATKPercent');
|
||||
var hasDEF = Array.from(ArtifactStat.MinorAffixes).some(affix => affix.Type == 'DEF');
|
||||
Output = level == 0 && hasATKPercent && hasDEF;", true)]
|
||||
public async Task IsMatchJavaScript_JSShouldBeRight(string screenshot, string js, bool expected)
|
||||
{
|
||||
//
|
||||
using Mat mat = new Mat(@$"..\..\..\Assets\AutoArtifactSalvage\{screenshot}");
|
||||
@@ -239,10 +239,29 @@ namespace BetterGenshinImpact.UnitTest.GameTaskTests.AutoArtifactSalvageTests
|
||||
//
|
||||
AutoArtifactSalvageTask sut = new AutoArtifactSalvageTask(new AutoArtifactSalvageTaskParam(5, null, null, null, null, cultureInfo, this.stringLocalizer), new FakeLogger());
|
||||
ArtifactStat artifact = sut.GetArtifactStat(mat, paddle.Get(), out string _);
|
||||
bool result = IsMatchJavaScript(artifact, js);
|
||||
bool result = await IsMatchJavaScript(artifact, js, new FakeLogger());
|
||||
|
||||
//
|
||||
Assert.Equal(expected, result);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 测试JavaScript运行超时的情况,应抛出正确的异常
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Fact]
|
||||
public async Task IsMatchJavaScript_Timeout_ShouldThrowException()
|
||||
{
|
||||
//
|
||||
string js = @"while (true) {};";
|
||||
FakeTimeProvider timeProvider = new FakeTimeProvider();
|
||||
|
||||
//
|
||||
Task sut = IsMatchJavaScript(new ArtifactStat("", new ArtifactAffix(ArtifactAffixType.ATK, 0), [], 0), js, new FakeLogger(), timeProvider);
|
||||
timeProvider.Advance(TimeSpan.FromSeconds(3));
|
||||
|
||||
//
|
||||
await Assert.ThrowsAsync<ScriptInterruptedException>(()=> sut);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ namespace BetterGenshinImpact.UnitTest.GameTaskTests.Model.GameUI
|
||||
[Theory]
|
||||
[InlineData(@"GameUI\ArtifactSetFilterBright.png", 20, 2)]
|
||||
[InlineData(@"GameUI\ArtifactSetFilterDark.png", 20, 2)]
|
||||
[InlineData(@"GameUI\ArtifactSetFilterBlack.png", 20, 2)] // 只能识别到较少item(12个)的一个特例,用于验证Cell聚簇算法补齐效果
|
||||
/// <summary>
|
||||
/// 测试获取圣遗物套装筛选界面中的项目,结果应正确
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user