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; } } } }