using KssSmaPlaLib.AutoTest.Script.Models;
using KssSmaPlaLib.AutoTest.Script.Parse;
using System;
using System.IO;
using System.Linq;
namespace KssSmaPlaLib.AutoTest.Script.Load
{
///
/// UIテストスクリプトローダー
///
public static class LoadTryUxer
{
///
/// スクリプトファイルパス
///
private const string UITEST_SCRIPT_FILE_PATH = "./test_script.ini";
///
/// スクリプトロード
///
/// [出力]テストスクリプトデータ
/// [出力]メッセージ
/// 成否
public static bool TryLoad(out StepInfoDTO stepInfo, out string resultMessage)
{
stepInfo = new StepInfoDTO();
resultMessage = string.Empty;
try
{
if (!File.Exists(UITEST_SCRIPT_FILE_PATH))
{
resultMessage = "スクリプトファイルが存在しません。";
return false;
}
var lines = File.ReadAllLines(UITEST_SCRIPT_FILE_PATH, System.Text.Encoding.GetEncoding("shift_jis"));
stepInfo.Description = "なんか詳細...(笑)";
stepInfo.InitialStepName = "なんか初期ステップ名...(笑)";
// ここでDTOにパース(例:セクションごとに分ける、キーと値を読み込むなど)
// ↓仮の処理(実際はINIパーサーCLがあると別府)
foreach (var line in lines)
{
if (line.StartsWith("#") ||
line.StartsWith(";") ||
string.IsNullOrWhiteSpace(line))
continue;
// 左辺と右辺分離
var parts = line.Split(new[] { '=' }, 2);
// 要素数違いは飛ばす
if (parts.Length != 2) continue;
// 要素取得
var no = parts[0].Trim();
var text = parts[1].Trim();
// No重複チェック
if (stepInfo.StepList.Any(m => m.StepNo == no))
{
resultMessage = $"ステップNoが重複しています。[ステップNo:{no}]";
return false;
}
// RawDTO
var raw = new StepDTO(no, text);
// バリデーションと変換
if (!ParseTryUxer.TryParse(raw, out var parsed, out string messageForMe))
{
resultMessage = $"ステップエラーです。[行:{line},エラー内容:{messageForMe}";
return false;
}
// 正常:リストに追加
stepInfo.StepList.Add(parsed);
}
return true;
}
catch (Exception ex)
{
resultMessage = $"スクリプトロードに失敗しました。[エラー内容:{ex.Message}]";
return false;
}
}
}
}