// ================================================================================================ // // モックオブジェクト生成処理をまとめたファクトリークラスソース // // // Copyright (C) 2013 Honeplus. All rights reserved. // // Honeplus // ================================================================================================ namespace Honememo.Wptscs.Models { using System; using System.Collections.Generic; using System.IO; using System.Xml.Serialization; using Honememo.Wptscs.Websites; /// /// モックオブジェクト生成処理をまとめたファクトリークラスです。 /// public class MockFactory { #region 定数 /// /// テスト用のconfig.xmlファイルパス。 /// public static readonly string TestConfigXml = "Data\\config.xml"; /// /// テストデータが格納されているフォルダパス。 /// public static readonly string TestMediaWikiDir = "Data\\MediaWiki"; #endregion #region private変数 /// /// テスト用設定。 /// private Config config; #endregion #region コンストラクタ /// /// テスト用のconfig.xmlを元に、モックファクトリーを生成する。 /// public MockFactory() { this.config = MockFactory.GetConfig(MockFactory.TestConfigXml); } #endregion #region テスト支援静的メソッド /// /// ファイルからアプリケーションの設定を取得する。 /// /// 設定ファイル名。 /// 作成したインスタンス。 public static Config GetConfig(string file) { // 設定ファイルを読み込み using (Stream stream = new FileStream(file, FileMode.Open, FileAccess.Read)) { return (Config)new XmlSerializer(typeof(Config)).Deserialize(stream); } } #endregion #region テスト支援メソッド /// /// アプリケーションの設定を取得する。 /// /// 作成したインスタンス。 public Config GetConfig() { return this.config; } /// /// 指定された言語のMediaWikiを取得する。 /// /// 言語コード。 /// ウェブサイトの情報。 public MediaWiki GetMediaWiki(string lang) { Website site = this.config.GetWebsite(lang); MediaWiki wiki = null; if (site != null) { wiki = site as MediaWiki; } if (wiki == null) { wiki = new MediaWiki(new Language(lang)); } // テスト用にサーバー設定を書き換えて返す this.SetMockConfig(wiki); return wiki; } /// /// 渡されたMediaWikiオブジェクトにモックの設定を上書きする。 /// /// 設定するMediaWikiオブジェクト。 public void SetMockConfig(MediaWiki wiki) { // テスト用にサーバー設定を書き換え // ※ フルパスじゃないとURIで取得できないので、ここで書き換える必要有り UriBuilder b = new UriBuilder("file", string.Empty); b.Path = Path.GetFullPath(MockFactory.TestMediaWikiDir) + "\\"; wiki.Location = new Uri(b.Uri, wiki.Language.Code + "/").ToString(); wiki.ContentApi = "$1.xml"; wiki.MetaApi = "_api.xml"; wiki.InterlanguageApi = "interlanguages/$1.xml"; } #endregion } }