public void Execute() { Console.WriteLine("start."); Console.WriteLine(); LoadTables(CsvDir); //検証結果一覧tsvを生成 GenerateTestResultTsv(); // 説明XML/HTMLを保存、 foreach (AsDescriptionTable adt in AsDescriptionTables) { FileInfo outputFile = GetFileInfo(OutputXmlDir, adt.Name + ".xml"); XmlDocument xml = adt.ToXml(); XmlNode scResult = SuccessCriteriaTable.GetSuccessCriteriaInfo(xml, adt.Name); xml.DocumentElement.PrependChild(scResult); SaveXml(xml, outputFile); SaveAllChildren(adt); FileInfo indexHtml = GetFileInfo(OutputHtmlDir, adt.Name + ".html"); CreateHtml("index", xml, indexHtml); } // カバーページHTMLを保存 var criteriaXml = SuccessCriteriaTable.ToXml(); SaveXml(criteriaXml, GetFileInfo(OutputXmlDir, "success-criteria.xml")); CreateHtml("cover", criteriaXml, GetFileInfo(OutputHtmlDir, "index.html")); Console.WriteLine(); Console.WriteLine("done."); }
//public static // CSVファイルから適切なCsvDataTableの派生クラスを作るファクトリメソッド public static CsvDataTable CreateCsvDataTable(FileInfo file) { string[][] alldata = LoadCSV(file); CsvDataTable result = null; try{ if (alldata[0][0].StartsWith("テストファイルNo.")) { result = new AsDescriptionTable(); result.Name = Path.GetFileNameWithoutExtension(file.Name); } else if (alldata[0][1].IndexOf("アクセシビリティサポーテッド検証結果") >= 0) { result = new AsTestResultTable(); } else { result = new SuccessCriteriaTable(); } if (result == null) { return(null); } Console.WriteLine("Load start: {0}", file.FullName); result.Load(alldata); Console.WriteLine("Loaded: {0} rows ({1} : {2})", result.Rows.Count, result.GetType(), result.Name); return(result); } catch (Exception e) { throw new Exception(string.Format("データが読めませんでした。{0} \n {1}", file.FullName, alldata[0][1]), e); } }
// 特定ディレクトリからCsvDataTableを一気に読み込みます。 private void LoadTables(DirectoryInfo csvDir) { FileInfo[] csvFiles = csvDir.GetFiles("*.csv"); List <AsDescriptionTable> descTableList = new List <AsDescriptionTable>(); List <AsTestResultTable> resultTableList = new List <AsTestResultTable>(); foreach (FileInfo f in csvFiles) { CsvDataTable cdt = CsvDataTable.CreateCsvDataTable(f); if (cdt is AsDescriptionTable) { descTableList.Add(cdt as AsDescriptionTable); } else if (cdt is AsTestResultTable) { resultTableList.Add(cdt as AsTestResultTable); } else if (cdt is SuccessCriteriaTable) { SuccessCriteriaTable = cdt as SuccessCriteriaTable; // 達成基準リストXMLにはファイル有無の情報を追加する SuccessCriteriaTable.CheckFileExists(csvDir); } } AsDescriptionTables = descTableList.ToArray(); resultTableList.Sort(); AsTestResultTables = resultTableList.ToArray(); //UAのリストを作成 List <string> uaList = new List <string>(); foreach (var table in resultTableList) { if (!uaList.Contains(table.UserAgent)) { uaList.Add(table.UserAgent); } } UserAgentList = uaList.ToArray(); Console.WriteLine(); Console.WriteLine("ロードが完了しました。"); Console.WriteLine(); Console.WriteLine("UserAgentの一覧:"); foreach (string s in UserAgentList) { Console.WriteLine(s); } Console.WriteLine("AsTestResultTables:"); foreach (var table in AsTestResultTables) { Console.WriteLine("{0} ({1}rows)", table.Name, table.Rows.Count); } Console.WriteLine("Load Completed."); }
//public static // CSVファイルから適切なCsvDataTableの派生クラスを作るファクトリメソッド public static CsvDataTable CreateCsvDataTable(FileInfo file) { string[][] alldata = LoadCSV(file); CsvDataTable result = null; try{ if(alldata[0][0].StartsWith("テストファイルNo.")){ result = new AsDescriptionTable(); result.Name = Path.GetFileNameWithoutExtension(file.Name); } else if(alldata[0][1].IndexOf("アクセシビリティサポーテッド検証結果") >= 0){ result = new AsTestResultTable(); } else { result = new SuccessCriteriaTable(); } if(result == null) return null; Console.WriteLine("Load start: {0}", file.FullName); result.Load(alldata); Console.WriteLine("Loaded: {0} rows ({1} : {2})", result.Rows.Count, result.GetType(), result.Name); return result; } catch (Exception e){ throw new Exception(string.Format("データが読めませんでした。{0} \n {1}", file.FullName, alldata[0][1]), e); } }
// DescriptionのXML/HTMLをすべてSaveします。 public void SaveAllChildren(AsDescriptionTable adt) { foreach (DataRow row in adt.Rows) { string id = row[AsDescriptionTable.IdColumnName].ToString(); XmlDocument xml = new XmlDocument() { XmlResolver = null }; XmlElement root = xml.CreateElement("description"); xml.AppendChild(root); // 達成基準の情報を追加 // ほかの達成基準からも参照されている可能性があるので全てのテーブルを見る int count = 0; foreach (AsDescriptionTable otherAdt in AsDescriptionTables) { DataRow r = otherAdt.Rows.Find(id); if (r != null) { XmlElement successCriteriaElement = xml.CreateElement("successCriteria"); XmlNode scResult = SuccessCriteriaTable.GetSuccessCriteriaInfo(xml, otherAdt.Name); root.AppendChild(scResult); count++; } } if (count > 1) { Console.WriteLine("multiple use: {0} ", id); } string testType = GetTestTypeById(id); if (testType != null) { XmlElement testTypeElement = xml.CreateElement("testType"); testTypeElement.InnerText = testType; root.AppendChild(testTypeElement); } root.AppendChild(adt.RowToXml(row, xml)); XmlElement testDetail = xml.CreateElement("testDetail"); XmlNode testDetailNode = GetTestDetail(id, xml); if (testDetail != null) { testDetail.AppendChild(testDetailNode); root.AppendChild(testDetail); } else { Console.Error.WriteLine("testDetailが取得できませんでした : {0}", id); } FileInfo outputXml = GetFileInfo(OutputXmlDir, id + ".xml"); SaveXml(xml, outputXml); FileInfo outputHtml = GetFileInfo(OutputHtmlDir, id + ".html"); CreateHtml("doc", xml, outputHtml); } }