#if HWTEST
using System;
using NUnit.Framework;
namespace TIASshot.Tests {
/// <summary>
/// 実機テストの引数(HwTestOptions)の解析のテスト(層①).
///
/// 仕様: PLAN_06「仕組み」・.claude/verify-profile.md「実機テスト」
/// - 起動: TIASshot.exe --hwtest --camera <lucam|iscam> [--with-chart] [--hwtest-out <結果ファイル>] [--hwtest-keep]
/// - --camera は必須.機種は lucam / iscam のみ(指定した機種だけを使う)
/// - 未知のフラグ・値の欠落・重複・不正な機種は誤り(打ち間違いで別の検査が走らない)
/// - 先頭要素が実行ファイルのパス(Environment.GetCommandLineArgs の形)でもよい
/// 本クラスは HWTEST 構成(Debug|x64)でのみコンパイルされる.
/// </summary>
[TestFixture]
public class HwTestOptionsTests {
private const string Exe = @"C:\app\TIASshot.exe";
private static HwTestOptions ParseOk(params string[] args) {
string error;
var options = HwTestOptions.Parse(args, out error);
Assert.That(error, Is.Null, "前提: 解析が成功すること");
Assert.That(options, Is.Not.Null, "前提: 解析が成功すること");
return options;
}
private static string ParseError(params string[] args) {
string error;
var options = HwTestOptions.Parse(args, out error);
Assert.That(options, Is.Null, "誤りのときは null を返すこと");
return error;
}
// ---------------------------------------------------------------
// IsRequested
// ---------------------------------------------------------------
[Test]
public void IsRequested_hwtestあり_true() {
Assert.That(HwTestOptions.IsRequested(new[] { Exe, "--hwtest", "--camera", "lucam" }), Is.True);
}
[Test]
public void IsRequested_hwtestなし_false() {
Assert.That(HwTestOptions.IsRequested(new[] { Exe, "--selftest" }), Is.False);
}
[Test]
public void IsRequested_null_false() {
Assert.That(HwTestOptions.IsRequested(null), Is.False);
}
[Test]
public void IsRequested_空配列_false() {
Assert.That(HwTestOptions.IsRequested(new string[0]), Is.False);
}
// ---------------------------------------------------------------
// TryParseCamera
// ---------------------------------------------------------------
[Test]
public void TryParseCamera_lucam_Lucam() {
HwTestCameraKind kind;
var ok = HwTestOptions.TryParseCamera("lucam", out kind);
Assert.That(ok && kind == HwTestCameraKind.Lucam, Is.True);
}
[Test]
public void TryParseCamera_iscam_IScam() {
HwTestCameraKind kind;
var ok = HwTestOptions.TryParseCamera("iscam", out kind);
Assert.That(ok && kind == HwTestCameraKind.IScam, Is.True);
}
[Test]
public void TryParseCamera_大文字_受け付ける() {
HwTestCameraKind kind;
var ok = HwTestOptions.TryParseCamera("ISCAM", out kind);
Assert.That(ok && kind == HwTestCameraKind.IScam, Is.True);
}
[TestCase("lumenera")]
[TestCase("")]
[TestCase(" lucam")]
public void TryParseCamera_不正な機種_false(string value) {
HwTestCameraKind kind;
Assert.That(HwTestOptions.TryParseCamera(value, out kind), Is.False);
}
[Test]
public void TryParseCamera_null_false() {
HwTestCameraKind kind;
Assert.That(HwTestOptions.TryParseCamera(null, out kind), Is.False);
}
// ---------------------------------------------------------------
// Parse: 正常系
// ---------------------------------------------------------------
[Test]
public void Parse_cameraのみ_機種が設定される() {
var o = ParseOk("--hwtest", "--camera", "iscam");
Assert.That(o.Camera, Is.EqualTo(HwTestCameraKind.IScam));
}
[Test]
public void Parse_先頭が実行ファイルのパス_受け付ける() {
var o = ParseOk(Exe, "--hwtest", "--camera", "lucam");
Assert.That(o.Camera, Is.EqualTo(HwTestCameraKind.Lucam));
}
[Test]
public void Parse_省略時_既定値() {
var o = ParseOk(Exe, "--hwtest", "--camera", "lucam");
Assert.That(new object[] { o.OutPath, o.WithChart, o.Keep }, Is.EqualTo(new object[] { null, false, false }));
}
[Test]
public void Parse_hwtestOut_出力先が設定される() {
var o = ParseOk(Exe, "--hwtest", "--camera", "lucam", "--hwtest-out", @"C:\tmp\result.txt");
Assert.That(o.OutPath, Is.EqualTo(@"C:\tmp\result.txt"));
}
[Test]
public void Parse_withChart_true() {
var o = ParseOk(Exe, "--hwtest", "--camera", "lucam", "--with-chart");
Assert.That(o.WithChart, Is.True);
}
[Test]
public void Parse_hwtestKeep_true() {
var o = ParseOk(Exe, "--hwtest", "--camera", "lucam", "--hwtest-keep");
Assert.That(o.Keep, Is.True);
}
[Test]
public void Parse_順序が入れ替わっても_同じ結果() {
var o = ParseOk(Exe, "--hwtest-out", "r.txt", "--with-chart", "--camera", "iscam", "--hwtest", "--hwtest-keep");
Assert.That(new object[] { o.Camera, o.OutPath, o.WithChart, o.Keep },
Is.EqualTo(new object[] { HwTestCameraKind.IScam, "r.txt", true, true }));
}
[Test]
public void Parse_機種名の大文字_受け付ける() {
var o = ParseOk(Exe, "--hwtest", "--camera", "LuCam");
Assert.That(o.Camera, Is.EqualTo(HwTestCameraKind.Lucam));
}
// ---------------------------------------------------------------
// Parse: 誤り
// ---------------------------------------------------------------
[Test]
public void Parse_null_誤り() {
Assert.That(ParseError(null), Is.Not.Null.And.Not.Empty);
}
[Test]
public void Parse_cameraなし_誤り() {
Assert.That(ParseError(Exe, "--hwtest"), Is.Not.Null.And.Not.Empty);
}
[Test]
public void Parse_cameraの値の欠落_末尾_誤り() {
Assert.That(ParseError(Exe, "--hwtest", "--camera"), Is.Not.Null.And.Not.Empty);
}
[Test]
public void Parse_cameraの値の欠落_次がフラグ_誤り() {
Assert.That(ParseError(Exe, "--hwtest", "--camera", "--with-chart"), Is.Not.Null.And.Not.Empty);
}
[Test]
public void Parse_hwtestOutの値の欠落_誤り() {
Assert.That(ParseError(Exe, "--hwtest", "--camera", "lucam", "--hwtest-out"), Is.Not.Null.And.Not.Empty);
}
[Test]
public void Parse_hwtestOutの値が空白_誤り() {
Assert.That(ParseError(Exe, "--hwtest", "--camera", "lucam", "--hwtest-out", " "), Is.Not.Null.And.Not.Empty);
}
[Test]
public void Parse_不正な機種_誤り() {
Assert.That(ParseError(Exe, "--hwtest", "--camera", "lumenera"), Is.Not.Null.And.Not.Empty);
}
[Test]
public void Parse_不正な機種_誤りの理由に値が含まれる() {
Assert.That(ParseError(Exe, "--hwtest", "--camera", "lumenera"), Does.Contain("lumenera"));
}
[Test]
public void Parse_cameraの重複_誤り() {
Assert.That(ParseError(Exe, "--hwtest", "--camera", "lucam", "--camera", "iscam"), Is.Not.Null.And.Not.Empty);
}
[Test]
public void Parse_hwtestOutの重複_誤り() {
Assert.That(ParseError(Exe, "--hwtest", "--camera", "lucam", "--hwtest-out", "a.txt", "--hwtest-out", "b.txt"),
Is.Not.Null.And.Not.Empty);
}
[Test]
public void Parse_未知のフラグ_誤り() {
Assert.That(ParseError(Exe, "--hwtest", "--camera", "lucam", "--with-chrat"), Is.Not.Null.And.Not.Empty);
}
[Test]
public void Parse_未知のフラグ_誤りの理由にフラグが含まれる() {
Assert.That(ParseError(Exe, "--hwtest", "--camera", "lucam", "--with-chrat"), Does.Contain("--with-chrat"));
}
[Test]
public void Parse_先頭以外の余分な値_誤り() {
Assert.That(ParseError(Exe, "--hwtest", "--camera", "lucam", "extra"), Is.Not.Null.And.Not.Empty);
}
}
}
#endif