ClearCode - 株式会社クリアコード

テストケース内で利用可能なヘルパーメソッド

凡例

返り値 メソッド名(引数, [省略可能な引数])
説明

イベントの発行

void action.fireMouseEvent(in DOMWindow aWindow, [in Object aOptions])
指定されたウィンドウに対してマウス操作のイベントを発行します。以下の各プロパティを持つオブジェクトを引数として渡すことで、発生するイベントの内容を指定できます。
type
イベント名(click, dblclick, mousedown, mouseupのいずれか。省略時はclick)
button
クリックしたボタン(省略時は0)
detail
クリック回数(省略時は1)
screenX
クリックした位置の画面上でのX座標(省略時は0)
screenY
クリックした位置の画面上でのY座標(省略時は0)
x
クリックした位置のフレーム内でのX座標(省略時は0)
y
クリックした位置のフレーム内でのY座標(省略時は0)
altKey
Altキーを押していたかどうか(省略時はfalse)
ctrlKey
Ctrlキーを押していたかどうか(省略時はfalse)
metaKey
Metaキー(MacではCommandキー)を押していたかどうか(省略時はfalse)
shiftKey
Shiftキーを押していたかどうか(省略時はfalse)
すべてのオプションを省略すると、「(0, 0)の位置で左ボタンでシングルクリック」となります。指定された座標に要素がない場合はイベントを発行しません。
void action.fireMouseEventOnElement(in DOMElement aElement, [in Object aOptions])
指定された要素の中央でマウス操作のイベントを発行します。action.fireMouseEventと同様のオプションを指定できます。
void action.fireKeyEventOnElement(in DOMElement aElement, [in Object aOptions])
指定された要素に対してキーボード操作のイベントを発行します。以下の各プロパティを持つオブジェクトを引数として渡すことで、発生するイベントの内容を指定できます。
type
イベント名(keydown, keyup, keypressのいずれか。省略時はkeypress)
keyCode
押されたキーのキーコード(省略時は0)
charCode
押されたキーの文字の文字コード(省略時は0)
altKey
Altキーを押していたかどうか(省略時はfalse)
ctrlKey
Ctrlキーを押していたかどうか(省略時はfalse)
metaKey
Metaキー(MacではCommandキー)を押していたかどうか(省略時はfalse)
shiftKey
Shiftキーを押していたかどうか(省略時はfalse)
キーコードは Components.interfaces.nsIDOMKeyEventDOM_VK_RETURN などの定数プロパティで指定できます。
void action.inputTextToField(in DOMElement aElement, in String aValue[, in Boolean aAppend][, in Boolean aDontFireKeyEvents])
指定されたテキストフィールドに文字列を入力します。入力はキー入力操作のエミュレーションによって行われ、各文字入力に対してkeyup、keydown、keypress、inputイベントが発行されます(キーボードから直接入力できない日本語の文字などについては、IMEを通した入力の操作とみなします)。通常はテキストフィールドに元々入力されていた内容を削除してから新しい内容を入力しますが、第3引数にtrueを渡すと元々の内容に追加して入力されます。第4引数にtrueを渡すと、コピー&ペースト時のように、キーイベントを発行せずに文字を挿入します(Ver.0.2.8以前と互換の動作)。
DOMElement action.getElementFromScreenPoint(in DOMWindow aWindow, in Number aScreenX, in Number aScreenY)
画面上の座標から、その位置にある要素のDOMノードを取得します。その位置に要素がない場合はnullを返します。
DOMWindow action.getWindowFromScreenPoint(in DOMWindow aWindow, in Number aScreenX, in Number aScreenY)
画面上の座標から、その位置にあるフレームのWindowオブジェクトを取得します。その位置にフレームがない場合はnullを返します。

以上のユーティリティメソッドはグローバル関数としても利用できます。グローバル関数として利用する場合の名前は以下のようになります(引数等の利用法は全く同一です): actionFireMouseEvent(), actionFireMouseEventOnElement(), actionFireKeyEventOnElement(), actionInputTextToField(), actionGetElementFromScreenPoint(), actionGetWindowFromScreenPoint()

テスト用ウィンドウの制御

DOMWindow utils.getTestWindow([in Object aOptions])
テスト用のFirefoxまたはThunderbirdウィンドウを取得します。テスト用ウィンドウが開かれていない場合はnullを返します。
DOMWindow utils.openTestWindow([in Object aOptions])
テスト用のFirefoxまたはThunderbirdウィンドウを開きます。テスト用ウィンドウがすでに開かれている場合はそのウィンドウを返します。
void utils.closeTestWindow([in Object aOptions])
テスト用のFirefoxまたはThunderbirdウィンドウを閉じます。テスト用ウィンドウが開かれていない場合は何もしません。
Object utils.setUpTestWindow([in Function aContinuation], [in Object aOptions])
テスト用のFirefoxまたはThunderbirdウィンドウを初期化します。実行するとウィンドウが開かれていない場合はウィンドウを開き、valueプロパティにfalseがセットされたオブジェクトを返します。ロード完了後、返り値として返したオブジェクトのvalueプロパティをtrueにセットし、continuation関数が渡されていた場合はそれを実行します。
// 利用例:テスト用ウィンドウの初期化が終わるのを待って次に進む
yield utils.setUpTestWindow();
var win = utils.getTestWindow();
void utils.tearDownTestWindow([in Object aOptions])
テスト用のFirefoxまたはThunderbirdウィンドウを閉じます。テスト用ウィンドウが開かれていない場合は何もしません。(utils.closeTestWindowへのエイリアスです)
Array utils.getChromeWindows([in Object aOptions])
特にテスト用としては開かれていない、すでにあるウィンドウを取得します。返り値はDOMWindowの配列です。

ウィンドウを開く時やウィンドウを取得する時は、オプションで詳細を指定できます。オプションは以下の書式で指定し、いずれのプロパティも省略可能です。uriとtypeの両方が省略された場合や、全くオプションを指定しなかった場合は、ブラウザウィンドウ(Thunderbirdではメインウィンドウ)が指定されたものと見なされます。

var options = {
  uri       : 'chrome://browser/content/browser.xul', // 省略可
  type      : 'navigator:browser', // 省略可(省略時は null )
  name      : '_blank', // 省略可(省略時は _blank )
  flags     : 'chrome,all,dialog=no', // 省略可(省略時は chrome,all )
  arguments : ['http://...', 'http://...'] // 省略可(省略時は空の配列)
};

また、以上のユーティリティメソッドはグローバル関数としても利用できます。グローバル関数として利用する場合の名前は以下のようになります(引数等の利用法は全く同一です): getTestWindow(), openTestWindow(), closeTestWindow(), setUpTestWindow(), tearDownTestWindow(), getChromeWindows()

ブラウザ関連操作

これらの機能はFirefox上でテストを実行する場合にのみ利用可能です。

DOMWindow utils.content
DOMWindow utils.contentWindow
プロパティとしてアクセスすると、テスト用のFirefoxの内容領域のDOMWindowオブジェクトを返します。テスト用ウィンドウが開かれていない場合はテストランナー内のテスト用フレームの内容を返します。
DOMDocument utils.contentDocument
プロパティとしてアクセスすると、テスト用のFirefoxの内容領域のDOMDocumentオブジェクトを返します。テスト用ウィンドウが開かれていない場合はテストランナー内のテスト用フレームの内容を返します。
DOMElement utils.getBrowser()
テスト用のFirefoxウィンドウのgBrowserオブジェクト(<tabbrowser/>要素)を返します。テスト用ウィンドウが開かれていない場合は、テストランナー内のテスト用フレームを含む<browser/>要素を返します。
DOMElement utils.gBrowser
プロパティとしてアクセスすると、utils.getBrowser()と同じ内容を返します。
DOMNodeList utils.getTabs()
テスト用のFirefoxウィンドウで開かれているタブのノードリストを返します。ウィンドウが開かれていない場合はnullを返します。
Object utils.loadURI(in String aURI)
テスト用のFirefoxウィンドウの現在のタブで、指定したURIを読み込みます。テスト用ウィンドウが開かれていない場合は、テストランナー内のテスト用フレームにURIを読み込みます。実行すると、valueプロパティにfalseがセットされたオブジェクトを返し、ロード完了後にそのオブジェクトのvalueプロパティをtrueにセットします。
// 利用例:読み込み完了を待って次に進む
yield utils.loadURI('http://www.clear-code.com/');
var win = utils.getTestWindow();
assert.equals('http://www.clear-code.com/', win.content.location.href);
Object utils.addTab(in String aURI)
テスト用のFirefoxウィンドウで新しいタブを開き、指定したURIをそのタブに読み込みます。実行すると、テスト用ウィンドウが開かれていない場合はnullを、ウィンドウが開かれている場合はvalueプロパティにfalseがセットされたオブジェクトを返します。ロード完了後、返り値として返したオブジェクトのvalueプロパティをtrueにセットし、tabプロパティに開かれたタブをセットします。
// 利用例:読み込み完了を待って次に進む
var win = utils.getTestWindow();
var obj = utils.addTab('http://www.clear-code.com/');
yield obj;
assert.equals('ClearCode Inc.', obj.tab.getAttribute('label'));

utils.loadURI()およびutils.addTab()に相対パスを渡すと、現在読み込まれているテストケースのファイルからの相対パスとして解釈します(baseURL + '<相対パス>' と表記するのと同等です)。

また、以上のユーティリティメソッドはグローバル関数としても利用できます。グローバル関数として利用する場合の名前は以下のようになります(引数等の利用法は全く同一です): content, contentWindow, contentDocument, getBrowser(), gBrowser, getTabs(), loadURI(), addTab()

メール関連操作

これらの機能はThunderbird上でテストを実行する場合にのみ利用可能です。

nsIMsgFolder mail.getFolderByURI(in String aURI)
mailbox://nobody@Local%20Folders/...のような形式のURIでメールフォルダを取得します。
nsIMsgFolder mail.localFolder
ローカルフォルダアカウントのルートフォルダを返します。
void mail.deleteFolder(in nsIMsgFolder aFolder)
nsIMsgFolder形式で渡されたメールフォルダを削除します。ごみ箱への移動ではなく、フォルダ内のメッセージも含めての完全削除となります。
void mail.deleteFolderByURI(in String aURI)
mailbox://nobody@Local%20Folders/...のような形式のURIで指定されたメールフォルダを削除します。ごみ箱への移動ではなく、フォルダ内のメッセージも含めての完全削除となります。

ファイル操作

String utils.readFrom(in Object aFile, [in String aEncoding])
指定されたファイルの内容をテキストファイルとして読み込み、内容を返します。第1引数にはパス文字列、File URL、またはnsIFileのオブジェクトを指定します。第2引数としてエンコーディングを指定すると、そのエンコーディングからFirefoxの内部処理用エンコーディング(UCS-2)に変換した結果を返します。エンコーディング指定を省略すると読み込んだままのデータを返します。例えばUTF-8で記述されたファイルを読み込む場合はutils.readFrom(file, "UTF-8")と指定して下さい。
nsIFile utils.writeTo(in String aContent, in Object aFile, [in String aEncoding])
渡された文字列を、指定されたファイルに書き出します。第2引数にはパス文字列、File URL、またはnsIFileのオブジェクトを指定します。第3引数としてエンコーディングを指定すると、内部エンコーディング(UCS-2)からそのエンコーディングに変換して出力します。エンコーディング指定を省略すると内部エンコーディングのまま出力します。例えばUTF-8でファイルを出力する場合はutils.writeTo(content, file, "UTF-8")と指定して下さい。なお、すでに存在するファイルを指定した場合は確認無しに上書きされます。
nsIFile utils.cosmeticClone(in Object aOriginalFile, in Object aDestinationFolder, in String aName)
第一引数で渡されたファイルまたはフォルダを、第二引数で渡されたフォルダの中に、第三引数で渡された名前で複製します。フォルダを複製する場合、中に含まれているファイルやフォルダのうち、不可視のファイル(Windowsの隠しファイル、Linuxの「.」で始まる名前のファイルなど)は複製されません。返り値は複製されたファイルまたはフォルダです。
nsIFile utils.makeTempFile([in Object aOriginalFile], [in Boolean aCosmetic])
プラットフォームのテンポラリフォルダ内にテンポラリファイル生成し、それを返します。第一引数にパス文字列、File URL、またはnsIFileのオブジェクトを渡した場合、生成されるテンポラリファイルはそのファイルの複製になります。第二引数にtrueを渡した場合、utils.cosmeticClone()と同様に、隠しファイルを無視して複製します。
nsIFile utils.normalizeToFile(in Object aFile)
パス文字列、File URL、またはnsIFileのオブジェクトで渡された内容を、nsIFileファイルのオブジェクトとして返します。
void utils.cleanUpTempFiles()
そのテストケース内で生成したすべてのテンポラリファイルを消去します。ただし、使用中であるなどの理由でロックされていて削除できないファイルはそのまま残ります。
nsIFile utils.getFileFromURL(in nsIFile aFileURL)
nsIFileURL形式で指定されたファイルに対応するnsIFileのオブジェクトを生成します。
nsIFile utils.getFileFromURLSpec(in String aFileURLSpec)
File URL文字列で指定されたファイルに対応するnsIFileのオブジェクトを生成します。
nsIFile utils.getFileFromKeyword(in String aKeyword)
指定されたキーワードに対応するnsIFileのオブジェクトを生成します。利用可能なキーワードについてはnsDirectoryServiceDefs.hnsXULAppAPI.hなどを参照してください。
String utils.getFilePathFromURL(in nsIFileURL aFileURL)
nsIFileURL形式で指定されたファイルについて、そのプラットフォームでのパス文字列を得ます。
String utils.getFilePathFromURLSpec(in String aFileURLSpec)
File URL文字列で指定されたファイルについて、そのプラットフォームでのパス文字列を得ます。
String utils.getFilePathFromKeyword(in String aKeyword)
指定されたキーワードに対応するファイルについて、そのプラットフォームでのパス文字列を得ます。利用可能なキーワードについてはnsDirectoryServiceDefs.hnsXULAppAPI.hなどを参照してください。
nsIURI utils.getURLFromFile(in nsIFile aFile)
nsIFile形式で指定されたファイルについて、対応するFile URLのnsIFileURL形式のオブジェクトを得ます。
nsIURI utils.getURLFromFilePath(in String aFilePath)
プラットフォームのパス文字列で指定されたファイルについて、対応するFile URLのnsIFileURL形式のオブジェクトを得ます。
String utils.getURLSpecFromFile(in nsIFile aFileURL)
nsIFile形式で指定されたファイルについて、対応するFile URLのURL文字列を得ます。
String utils.getURLSpecFromFilePath(in String aFileURL)
プラットフォームのパス文字列で指定されたファイルについて、対応するFile URLのURL文字列を得ます。
void utils.scheduleToRemove(in Object aFile)
渡されたファイルを削除します。nsIFileのremove()メソッドによってその場ですぐに削除するのではなく、数ミリ秒後に遅れて削除を実行し、失敗した場合は一定回数・一定時間の間自動的に削除を再試行します。

utils.readFrom()およびutils.writeTo()に相対パスを渡すと、現在読み込まれているテストケースのファイルからの相対パスとして解釈します(baseURL + '<相対パス>' と表記するのと同等です)。

また、以上のユーティリティメソッドはグローバル関数としても利用できます。グローバル関数として利用する場合の名前は以下のようになります(引数等の利用法は全く同一です): readFrom(), writeTo(), makeTempFile(), normalizeToFile(), cleanUpTempFiles(), getFileFromURL(), getFileFromURLSpec(), getFilePathFromURL(), getFilePathFromURLSpec(), getURLFromFile(), getURLFromFilePath(), getURLSpecFromFile(), getURLSpecFromFilePath(), scheduleToRemove()

文字列操作

String utils.UTF8ToUCS2(in String aInput)
String utils.UTF8ToUnicode(in String aInput)
UTF8バイト列をMozilla内部で一般的に使われているUCS2(Unicode)の文字列に変換します。
String utils.UCS2ToUTF8(in String aInput)
String utils.UnicodeToUTF8(in String aInput)
UCS2(Unicode)の文字列をUTF8バイト列に変換します。
String utils.XToUCS2(in String aInput, in String aEncoding)
String utils.XToUnicode(in String aInput, in String aEncoding)
Shift_JISやEUC-JPでエンコードされた文字列を、Mozilla内部で一般的に使われているUCS2(Unicode)の文字列に変換します。第1引数は変換する文字列、第2引数は変換元のエンコーディング名です。
String utils.UCS2ToX(in String aInput, in String aEncoding)
String utils.UnicodeToX(in String aInput, in String aEncoding)
UCS2(Unicode)の文字列を、Shift_JISやEUC-JPでエンコードされた文字列に変換します。第1引数は変換する文字列、第2引数は変換先のエンコーディング名です。
String inspect(in Object aObject)
渡された内容を可読性の高い文字列に変換します。具体的には以下のルールに則って文字列化します。
Array
配列のすべての要素をinspect()したものを返します。
Object型(オブジェクトリテラル、ハッシュ、カスタムクラスのインスタンス)
持っているすべてのプロパティの名前と値(inspect()した結果)を列挙したものを返します。
String utils.inspectDOMNode(in DOMNode aNode)
渡されたDOMノードからソース文字列を得ます。HTML文書やXML文書の処理結果を構造まで含めて簡易的に比較する場合などに利用できます。

また、以上のユーティリティメソッドはグローバル関数としても利用できます。グローバル関数として利用する場合の名前は以下のようになります(引数等の利用法は全く同一です): UTF8ToUCS2(), UTF8ToUnicode(), UCS2ToUTF8(), UnicodeToUTF8(), XToUCS2(), XToUnicode(), UCS2ToX(), UnicodeToX(), inspect(), inspectDOMNode()

スクリプトの読み込み

void utils.include(in Object aFile, [in Object aContext], [in String aEncoding])
パス、File URL、nsIFileのオブジェクトで指定されたファイルの内容をスクリプトとして読み込み、テストケースの実行コンテキストで実行します。第2引数としてオブジェクトを渡した場合、そのオブジェクトが実行コンテキストになります。ファイルのエンコーディングは初期状態ではUTF-8として認識しますが、第3引数としてエンコーディングを指定すると、そのエンコーディングとして認識します。

utils.include()に相対パスを渡すと、現在読み込まれているテストケースのファイルからの相対パスとして解釈します(baseURL + '<相対パス>' と表記するのと同等です)。

また、以上のユーティリティメソッドはグローバル関数としても利用できます。グローバル関数として利用する場合の名前は以下のようになります(引数等の利用法は全く同一です): include()

設定の読み書き

value utils.getPref(in String aKey)
FirefoxまたはThunderbirdの設定値を取得します。値の型(真偽値、整数値、文字列値)を問わず動作します。
void utils.setPref(in String aKey, in Object aValue)
渡された値をFirefoxまたはThunderbirdの設定値として保存します。値の型(真偽値、整数値、文字列値)は自動判別されます。テストの中で行った変更はテスト終了後に元に戻されます。
void utils.clearPref(in String aKey)
FirefoxまたはThunderbirdの設定値を削除します。テストの中で行った変更はテスト終了後に元に戻されます。

また、以上のユーティリティメソッドはグローバル関数としても利用できます。グローバル関数として利用する場合の名前は以下のようになります(引数等の利用法は全く同一です): getPref(), setPref(), clearPref()

アプリケーションの情報の取得

nsIFile utils.productExecutable
現在テストが動作しているアプリケーションの実行ファイルをnsIFile形式で取得します。例えばWindows版Firefoxであれば、C:\Program Files\Mozilla Firefox\firefox.exeなどです。

また、以上のプロパティはグローバル変数としても利用できます。グローバル変数として利用する場合の名前は以下のようになります: productExecutable

その他

void utils.log(in String aMessage)
void utils.dump(in String aMessage)
FirefoxまたはThunderbirdのエラーコンソール上にメッセージを出力します。複数の引数を渡した場合は改行して出力します(どちらも全く同じ働きをします)。
void utils.notify(in nsISupports aSubject, in String aTopic, in String aData)
すでに登録されているオブザーバに対して、nsIObserverServiceの機能を使ってメッセージを送出します。

また、以上のユーティリティメソッドはグローバル関数としても利用できます。グローバル関数として利用する場合の名前は以下のようになります(引数等の利用法は全く同一です): log(), dump(), notify()

Window.dump()を使用する場合は、明示的にwindow.dump()と書く必要があることに注意してください。単にdump()とだけ書いた場合は、上記のユーティリティメソッドの方が実行されます。


©2006-2008 ClearCode Inc.