前へ 次へ 目次 文書セット ホーム


付録 A

Sun WorkShop Visual 再現機能のコマンド構文


はじめに

本付録では、Sun WorkShop Visual 再現のスクリプトで使用されるキーワードについて説明します。

Sun WorkShop Visual 再現スクリプトのキーワードは、機能に応じて以下に示すように区分することができます。

アクションのコンテキスト指定

キーワード

in

-

スクリプトにおいて以降のアクションのコンテキストを指定する

ApplicationShell

-

アプリケーションの最上位シェル

形式

in shell_widget
        commands
in ApplicationShell
        commands

入力内容

shell_widget

 

メインアプリケーションシェル以外のシェルウィジェットの名前

機能説明

Sun WorkShop Visual 再現のスクリプトは、ウィジェットに対するアクションで構成されています。これらのアクションは、該当するウィジェットを含むシェル (すなわちダイアログ) のコンテキスト内で行われる必要があります。シェルを認識できないと、その時点でスクリプトは失敗します。in コマンドを入れ子にすることはできません。一度シェルから (別のシェルに移動するために) 離れると、そのコンテキスト内でアクションを行う前に in キーワードを使用してそのシェルに戻る必要があります。

使用例

in ApplicationShell
	push this_button
	push that_button
  push help_dialog_button
in help_dialog_popup
 push cancel_button
in ApplicationShell
 push another_button

ボタンアクション (簡単な制御)

キーワード

push

-

マウスボタンを押して離す

doubleclick

-

マウスボタンをダブルクリックする

形式

push widget [with [modifier-]button[1-5]]
doubleclick widget

入力内容

widget

 

ウィジェットの名前

modifier

 

キーボード修飾子

button[1-5]

 

マウスボタンの番号 (デフォルトは修飾子なしでマウスボタン 1)

機能説明

push は指定されたウィジェット上でのマウスボタンを使用したクリック (マウスボタンを押して離すという動作) をシミュレートします。with キーワードを使用すると、特定のマウスボタンを指定することができます。このキーワードを使用しない場合は、ボタン 1 (マウスの左ボタン) が使用されます。キーボード修飾子 (Shift キーなど) を使用して、マウスボタンイベントの置換を拡張することができます。使用できる修飾子は Alt、Ctrl、Shift です。

doubleclick は、マウスの左ボタンを使用したダブルクリックをシミュレートします。このキーワードはどのウィジェットにも使用できますが、テキストウィジェットから選択する場合に特に便利です (「テキスト入力」を参照)。

用法

ウィジェットの中には、マウスをクリックする位置は重要ではないものもあります。たとえば、ボタンウィジェット上のどの部分をクリックしても、そのボタンは活性化されます。しかし、位置が重要となるウィジェットもあります。たとえば、スケールウィジェット上では押す位置によって結果が異なります。

以下の表に、位置に依存するウィジェットと位置に依存しないウィジェットを示します。

表 A-1

位置非依存ウィジェット

位置依存ウィジェット

ボタン

スライダ

トグル

スケール

 

リスト

 

描画領域

 

テキストウィジェット 1

 

非 Motif ウィジェット

位置依存リストの残りのウィジェットの記録および再生については、「ボタンアクション (位置に依存した制御)」を参照してください。

使用例

in ApplicationShell
  push this_button
in ApplicationShell
  push that_button with shift-button2
in my_dialog_popup
	if color_toggle->set:true
		push color_toggle
	endif

メニュー操作

キーワード

cascade

-

プルダウンメニューを表示する

pullright

-

プルダウンメニューからプルライトメニューを表示する

形式

cascade cascadebutton
		select widget
cascade cascadebutton
		pullright cascadebutton

入力内容

cascadebutton

 

カスケードボタンの名前

widget

 

カスケードボタンのプルダウンメニュー内にあるウィジェットの名前

機能説明

cascade は、メニュー操作の記述を簡略化した方法です。これ以外にも、対応するカスケードボタンを押すか、キーボードアクセラレータを使用して、メニューを表示することもできます。また、メニューオプションも同じように、アクセラレータまたはキーボードニーモニックを使用して選択することができます。

cascade で表示するプルダウンメニューを使用して、選択を行うことができます。選択項目は、ウィジェット (すなわちそのメニューのオプション) またはプルライトメニューを表示するカスケードボタンです。

使用例

in ApplicationShell
	 cascade file_m
	     select open_file
in ApplicationShell
	 cascade format_menu
	     pullright character_menu

注意事項

Sun WorkShop Visual 再現が Motif スタイルガイドに準拠してサポートするプルライトメニューは、1 階層だけです。ただし、スクリプトで push コマンドを使用すると、それ以降の階層のプルライトメニューも選択することができます。

オプションメニュー操作

キーワード

option

-

オプションメニューから選択する

形式

option opmenu-widget::member_widget

入力内容

opmenu-widget

 

オプションメニューウィジェットの名前

member-widget

 

オプションメニューのプルダウンメニュー内にあるウィジェットの名前

機能説明

option は、オプションメニューからオプションを選択します。

使用例

in ApplicationShell
	 cascade format_menu
 		pullright character_menu
		option character_menu::bold

次の例では、オプションメニュー自体がユーザー入力に応答性がある場合に限りオプションの選択を行います。

if IsSensitive(myoptionmenu->OptionButton)
	option myoptionmenu::thisoption
endif

オプションメニューの現在の設定 (すなわち、直前に選択された設定) を確認したい場合は、次の例に示すようにオプションメニューの menuHistory リソースを調べるだけでわかります。

	if myoptionMenu->menuHistory: select_yes
		message he said yes
	endif

注意事項

上記以外でオプションメニューのメンバーを選択するには、オプションボタンを押し、次に目的のメンバーウィジェットを押してください。ただし、option 構文の方がユーザーアクションにより近い動作をするので、この構文を使用することをお勧めします。

キーボード操作

キーワード

alt

-

現在の単語を選択する

ctrl

-

現在の行を選択する

key

-

キーボードからキーシムを入力する

形式

alt char
ctrl char
key keysym

入力内容

char

 

1 文字

keysym

 

任意の X キーシム (キーシム一覧については X11/keysymdef.h を参照)

機能説明

キーボード入力は、フォーカスを持つウィジェットに送られます。Sun WorkShop Visual 再現では、キーボードから入力するための追加プログラミングは必要ありません。

ユーザーもテストスクリプトも、テキストを入力する際はウィンドウマネージャを使用する必要があります。明示的なフォーカスの置かれている位置 (ウィンドウをクリックしてフォーカスを得る必要があります) で、このウィンドウマネージャをテストスクリプト内にプログラミングする必要があります。

使用例

in ApplicationShell
		alt f
		type o
in open_file_popup
		multiclick selection_field
		type foo.xd
		push ok_button
		doubleclick my_text_field
		type hallo world
		key Return

注意事項

テキストフィールドでの push または doubleclick には、フォーカスを得るという二次作用があります。Sun WorkShop Visual 再現では、この場所でのみフォーカスを直接処理することができます。

テキストフィールドへのデータ入力は以前の内容を上書きすることがよくありますが、doubleclick または multiclick によって優先されます。

テキスト入力

キーワード

type

-

キーボードからテキストを入力する

key

-

キーボードからキーシムを入力する

doubleclick

-

現在の単語を選択する

multiclick

-

現在の行を選択する

形式

type text
key keysym
doubleclick textwidget
multiclick textwidget

入力内容

keysym

 

XK_ 接頭辞のない任意の X キーシム (リストについては X11/keysymdef.h を参照)

textwidget

 

テキストウィジェットの名前

text

 

テキスト文字列

機能説明

アプリケーションにおける大部分のテキストウィジェットは、1 行データ入力 (ファイル選択ボックスの選択フィールドなど) に使用されます。Sun WorkShop Visual 再現を使用すると、フィールドのデフォルトの内容を既知の値に置換して結果を調べることができます。

type は、テキストをテキストウィジェットに入力します。doubleclick は単語の選択を、multiclick は行の選択をそれぞれプログラミングします。テストスクリプトでは、行中の単語数に関係なくテキストフィールドの内容を置換したい場合に、multiclick が最もよく使用されます。

使用例

in form_attr_dialog_popup
		doubleclick formHorizSpacingField
	    type 100
in coreDialog
		multiclick title_t
		type My Dialog Title

注意事項

Sun WorkShop Visual 再現が処理できるのは、1 行当たり 512 文字までです。この制限を超えたテキスト文字列を入力する場合は、テキストを分割し、それぞれの部分に type キーワードを使用します。

Motif の一部のバージョンでは XmTextField ウィジェットでトリプルクリックが正しく処理されないという問題が、Sun WorkShop Visual 再現では回避されています。このような場合は、スクリプトに multiclick が含まれていると、doubleclick に変換されます。

ボタンアクション (位置に依存した制御)

キーワード

push

-

マウスボタンを押して離す

drag

-

同一ウィジェット内で押す操作と離す操作を組み合わせる

形式

push widget(mame,qual) 
drag widget(name1,qual1)-widget(name2,qual2)

入力内容

widget

 

ウィジェット名

name、name1、name2

 

アプリケーションまたはウィジェットに依存した記述

機能説明

一部のウィジェット (描画領域など) では、クリックする場所が重要になります。描画領域の場合は、描画領域内の位置が必要です。リストの場合は、選択した項目の指定が必要です。上記バージョンの push は、そのような位置に依存したウィジェットを対象としたコマンドです。

このようなウィジェットでは大部分の場合、クリック以外の操作が必要です。ある位置でボタンを押し、別の場所で離す必要があります。Sun WorkShop Visual では、フォームに対する配置エディタ上でウィジェット間にアタッチメントを設定する場合がその一例です。この設定はサーバーグラブに関係する場合があるので、最初の部分はボタンを押す位置を記述し、2 番目の部分はボタンを離す位置を記述するような単独の drag 操作として記述されます。

この機能は、アプリケーション内での描画領域など、ユーザー定義ウィジェットの単一インスタンスに使用することができます。また、ウィジェットクラス全体に (XmList、XmScale、XmScrollBar、他社の各種ウィジェットセットの場合のように) 使用することもできます。

使用例

最初の例は、Motif の描画領域ウィジェットが Sun WorkShop Visual テスト用に実装される様子を示しています。

in ApplicationShell
  push tree_da(mybutton,centre)

次の例は、Sun WorkShop Visual のフォームレイアウトエディタでインタフェースウィジェットと button_box ウィジェットの間でアタッチメントが作成される様子を示しています。

in form_layout
	drag layout(frame1,right)-layout(button_box,left)

これらの結果は Sun WorkShop Visual で試してみることができます。

注意事項

独自に作成した位置に依存するウィジェットまたは他社のウィジェットを処理する方法については、「Sun WorkShop Visual 再現ウィジェットセットの拡張」を参照してください。

リソース評価

キーワード

printres

-

ウィジェットリソースの値を出力する

形式

printres widget->resource

入力内容

widget

 

ウィジェットの名前

resource

 

ウィジェットリソースの名前

機能説明

printres は、選択したウィジェット内の指定リソースの現在の値を出力します。既知のリソース値の出力が予想されるテストスクリプトでは、特にこのキーワードが便利です。リソースの名前は、「XmN」接頭辞を付けないで指定する必要があります (「labelString」など)。

スクリプトの条件式内には、リソース評価が含まれている場合がよくあります。

使用例

in my_shell
	if !my_option_menu->menuHistory:default_option
		message FAIL: bad setting for my_option_menu
		message Setting should be:
		printres my_option_menu->menuHistory:default_option                      
	endif

ウィジェット階層分析

キーワード

tree

-

現在のウィジェット階層の回帰的リストを表示する

dump

-

ウィジェットに割り当てられているリソースを表示する

snapshot

-

現在のウィジェット階層の回帰的リストおよび各ウィジェット に割り当てられているリソースを表示する

形式

tree widget
dump widget
snapshot widget

入力内容

widget

 

ウィジェットの名前

機能説明

tree、dump、snapshot の各コマンドを使用すると、アプリケーションインタフェース内のウィジェットの構造、およびそれらのウィジェットに割り当てられているリソースの値を分析することができます。分析結果は、標準エラーに表示されます。

tree は、指定したウィジェットのウィジェット階層内にあるウィジェット名の回帰的リストを表示します。

dump は、指定したウィジェットのリソース設定を表示します。

snapshot は、指定したウィジェットのリソース設定、および指定したウィジェットのウィジェット階層内にある残りのウィジェットすべてのリソース設定を表示します。

使用例

次のコマンドは、button1 ウィジェットに割り当てられているリソースを表示します。

in ApplicationShell
	dump button1

上記コマンド例の出力の一部を以下に示します。

button1():
	Boolean ancestorSensitive:true
	HorizontalDimension width:58
	VerticalDimension height:22
	Pixel background:color('black')
	Pixel foreground:color('#72729F9FFFFF')
	HorizontalDimension highlightThickness:1
	Pixel highlightColor:color('black')
	XmString labelString:'Button A'
  Pixel armColor:color('red')

次のコマンドは、form1 ウィジェットのウィジェット階層を表示します。

in ApplicationShell
	tree form1

上記コマンド例の出力の一部を以下に示します。

	rowcol1():
		buttonA():
		button2():
	address_area():
		label1():
		text1():

注意事項

Sun WorkShop Visual 再現は、シェル内でウィジェット名を共有するウィジェットに対して一意の名前 (HorScrollBar#1、HorScrollBar#2、Apply#3、Apply#5、など) を割り当てます。再現機能用の名前が実際のウィジェット名と異なる場合は、角括弧に囲んで表示されます。

非アプリケーション操作

キーワード

delay

-

ユーザーアクションの再生を一時停止する

message

-

メッセージを出力する

sequence

-

スクリプトの一部にラベルを付ける

shell

-

シェルコマンドを実行する

setenv

-

シェル環境変数を設定する

breakpoint

-

スクリプト内にブレークポイントを指定する

exit

message

sequence

shell

-

-

-

-

スクリプトを終了する

メッセージの印刷

スクリプトのラベル部分

シェルコマンドの実行

形式

delay duration
message text
sequence text
shell command
setenv env-var env-value
breakpoint widget
exit status

入力内容

duration

 

秒単位の時間

text

 

テキスト文字列

widget

 

ウィジェットの名前

status

command

env-var

env-value

 

1 または 0

実行可能コマンド

環境変数

環境変数に割り当てられた値

機能説明

delay を使用すると、スクリプト内に一時停止を挿入することができます。これは、実行中に特定の場所でアプリケーションを視覚的に確認したいときに便利です。スクリプト内の次のアクションは、一時停止後に続行されます。

message は、標準エラーにメッセージを表示します。このコマンドを使用すると、スクリプトの異なる部分にラベルを付けて、予想される結果およびエラーをユーザーに通知します。メッセージテキストは、引用符で囲む必要はありません。

sequence を使用すると、スクリプトの異なる部分にラベルを付けることができます。そしてエラーが生じると、ラベル付けされている次のシーケンスまでスキップし、そこから続行することができます。

sequence を使用するには、 -skip-on-error フラグを設定した状態で visu_replay を呼び出す必要があります。 visu_replay はデフォルトでは -user-on-error フラグを設定した状態で実行し、エラーが生じるとテストを中止してそのままアプリケーション内に残ります。残りのエラーフラグ ( -exit-on-error ) は、エラーが生じるとアプリケーションを終了します。

shell は、スクリプトからシェルコマンドを実行します。シェルコマンドが終了すると、スクリプトは処理を続行します。この機能を使用すると、ユーザーアクションをただ再実行するよりもはるかに幅広い操作を行うスクリプトを作成することができます。

setenv は shell コマンドとともに使用して、環境変数を介してシェルに情報を引き渡します。setenv は 2 つの引数をとります。最初の引数は変数の名前で、2 番目の引数はウィジェットのリソース値と以下の簡易関数のいずれかを結合できる式です。

  • WindowId(widget)
  • WindowFrame(widget)
  • Parent(widget)
  • Shell(widget)

breakpoint はデバッガとともに使用して、指定したウィジェットが活性化された際にスクリプト内にブレークポイントを設定します。こうすることによって、個々のウィジェットの内部を調べることができます。

breakpoint キーワードを含むスクリプトは、次のように呼び出す必要があります。

visu_replay -f script debugger app

上記の script はスクリプトの名前、 debugger はデバッガの名前、 app はスクリプトがテスト実行するアプリケーションの名前です。デバッガは、Sun WorkShop Visual 再現が実行します。breakpoint キーワードで、ブレークポイントを直接設定しているのと同じようにアプリケーションが停止します。これで、アプリケーションが最適化されていても、ウィジェット内部を調べることができます。

exit は、指定した終了ステータスでスクリプトを終了します。

使用例

ウィジェットを押した後で 5 秒間遅延させるには、次のように記述します。

	in ApplicationShell
		push mywidget
		delay 5
		push yourwidget

ウィンドウマネージャ装飾を付けないで、シェルの画面ダンプを撮影するには、次のように記述します。

	in ApplicationShell
		setenv ID WindowId(ApplicationShell)
		shell xwd -id $ID -out /tmp/shell.xwd

ウィンドウマネージャ装飾を付けて、画面ダンプを撮影するには、次のように記述します。

	in ApplicationShell
		setenv ID WindowFrame(ApplicationShell)
		shell xwd -id $ID -out /tmp/shell.xwd

カスケードボタンの名前しか分からないプルダウンメニューの画面ダンプを撮影するには、次のように記述します。

	in ApplicationShell
		push cascade_button
		setenv ID WindowId(cascade_button->subMenuId)
		shell xwd -id $ID -out /tmp/shell.xwd

    注 - ボタンを最初に押さないとメニューが表示されないため、xwd はそのメニューの画面ダンプを撮影することができません。

オプションメニューを使用して同じ動作をするには、次のように記述します。

	in ApplicationShell
		push option_menu.OptionButton
		setenv ID WindowId(option_menu->subMenuId)
		shell xwd -id $ID -out /tmp/shell.xwd

カスケードボタンの親の背景色を表示するには、次のように記述します。

	in ApplicationShell
		setenv ID Parent(cascade_button)->background
		shell echo The Color $ID

条件節

キーワード

if
else
elif
endif

形式

if expression
	actions
[elif expression
	actions]
[else
	actions]
endif

入力内容

expression

 

true か false かを評価する式

actions

 

複数のユーザーアクション

機能説明

if 文を使用すると、スクリプト内の制御フローをアプリケーションの実行中にアプリケーション内の条件に対応させることができます。各 if には、対応する endif が必ず必要です。必要に応じて、別の選択肢の elif (省略可能) およびデフォルトですべてに適用される else 条件を含めることができます。

使用例

in my_shell
	if !my_option_menu->menuHistory:default_option
			message FAIL: bad setting for my_option_menu
			message Setting should be:
			printres my_option_menu->menuHistory:default_option
	else
		message setting ok for my_option_menu
endif

表示式

キーワード

IsPseudoColor
IsDirectColor
IsTrueColor
IsStaticColor
IsStaticGrey
IsGreyScale

形式

if expression
	actions
endif

入力内容

expression

 

前述のキーワードのいずれか 1 つ

機能説明

あるディスプレイ上で記録されたスクリプトは、異なる種類のディスプレイ上では動作しないことがあります。あるアプリケーションでは非常に多くの色を使うため、カラーマップに制限があるディスプレイ上でアプリケーションを実行する際に、色制限に関する警告メッセージが表示される場合があります。スクリプトはこのような状況に対応する必要があります。

使用例

if !IsPseudoColor
	message Non PseudoColor display
	in warning_popup
		push warning.OK
endif

ウィジェット状態式

キーワード

IsVisible
IsManaged
IsRealized
IsHere

形式

if expression
	actions
endif

入力内容

expression

 

前述のキーワードのいずれか 1 つ

機能説明

ダイアログの一部が選択表示されている場合は、IsManaged 式および IsRealized 式を使用して管理したり認識している部分を調べることができます。

IsVisible は、画面上ではダイアログ全体を見ることができない小さい (VGA) ディスプレイ向けのコマンドです。Motif TAB ナビゲーショントラバーサル型のディスプレイは、画面外のコントロールを無視するので、このコマンドは重要です。

IsHere は、ウィジェットが現在のシェルに存在するかどうかだけを調べます。

使用例

in ApplicationShell
	cascade file_menu
		select fm_menu.fm_exit
	if IsVisible(save_dialog)
		in save_dialog
			push save.ok
	else
		message Save Dialog cannot be seen
	endif

ユーザー定義コマンドのインポート

キーワード

import

-

追加コマンドのモジュールを読み込む

user

-

読み込んだモジュールからコマンドを呼び出す

形式

import module
user command text

入力内容

module

 

モジュールの名前

command

 

コマンドの名前

text

 

コマンドに渡す引数

機能説明

Sun WorkShop Visual 再現のコマンドセットの使用目的は、ユーザーアクションを再生したり、アプリケーションのウィジェット階層やリソース設定に関するアプリケーションの状態を確認することです。以下に示すように、必要に応じて独自のコマンドを追加しても、まったく問題はありません。

  • 再生中のさまざまな位置で、画面ダンプを作成する場合。
  • ウィジェット階層に対して別の種類の一貫性検査を行う場合。Doug Young の widgedlint ライブラリとのインタフェースをとることなどは、その一例です。
  • 特定のデバッグ対象の問題に対してプローブまたはパッチを挿入する場合。これは、デバッガの全機能を利用することが不可能な分解された最適化バイナリに最も役立ちます。

import を使用すると、独自のコマンドのモジュールをスクリプトに読み込むことができます。一度モジュールを読み込むと、モジュール内のコマンドは user コマンドを使用して呼び出すことができます。呼び出すモジュールの数には制限はありません。

使用例

import mymodule
in ApplicationShell
	cascade file_menu
		select fm_print
		in print_dialog
			user myscreendumper print_dialog

注意事項

実行する必要のあるアクションがウィジェット階層への拡張アクセス、またはプログラム内部の検査とは関係ない場合は、shell および setenv のインタフェースが優先経路です。後者の場合は、「独自の Sun WorkShop Visual 再現機能コマンドの追加」を参照してください。

Sun WorkShop Visual 再現機能でのウィジェット命名規約

Sun WorkShop Visual 再現では、ウィジェット名はウィジェットを参照するときに使用します。ウィジェットベースのテストツールの主な処理の 1 つが、正しいウィジェットを識別することです。命名規約は、複雑すぎずかつ明確である必要があります。

Sun WorkShop Visual 再現が使用している規則は、以下のとおりです。

  1. コントロールがウィジェット (ガジェットではない) で、かつ現在のダイアログでその名前を持つ唯一のウィジェットの場合は、次のようにウィジェット名を使用します。
		in ApplicationShell
			push mywidget
  1. コントロールがガジェットの場合は、次のように <親の名前>.<ガジェット> 名を使用します。
		in ApplicationShell
			push myradiobox.mytogglebuttongadget
  1. ウィジェット名がヌル (つまり "") の場合は、次のように unnamed を使用します。
		in ApplicationShell
			push myradiobox.unnamed
  1. 現在のシェルに当該ウィジェット名 (またはガジェット名) のインスタンスが複数ある場合は、次のようにインスタンスを番号で参照します。
		in ApplicationShell
			push mywidget#17
			push myradiobox.unnamed#3
			push myradiobox#2.unnamed#2
  1. スクリプトを独自に作成する場合は、次のように tree コマンドを使用してウィジェット階層を調べます。
		in ApplicationShell
			tree ApplicationShell

これで、ウィジェット階層の回帰的リストが出力されます。リストには、実際のウィジェット名が含まれます。また、Sun WorkShop Visual 再現で使用する名前と実際の名前が異なる場合は、Sun WorkShop Visual 再現で使用する名前も括弧で囲んで表示されます。

  1. シェル名があいまいな場合は、次のようにインスタンスを使用します。
	in myshell#2
		push button1
	in myshell#3
		push button2

1. ユーザーとテキストウィジェットとの対話の記録および再生については、「テキスト入力」で説明します。


前へ 次へ 目次 文書セット ホーム

サン・マイクロシステムズ株式会社
Copyright information. All rights reserved.