// ================================================================================================
//
// モックオブジェクト生成処理をまとめたファクトリークラスソース
//
//
// 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
}
}