--- /dev/null
+#!/bin/bash
+
+##
+# setup
+## 1. emulator launch check using sdb command AND emulator launch
+## 2. tizen IDE launch check using ps command AND close Tizen IDE
+## 3. pre-required resource handle (unzip workspace)
+
+### 1
+#### SCRIPT_PATH is test-ide.sh path
+pushd . > /dev/null
+SCRIPT_PATH="${BASH_SOURCE[0]}";
+ while([ -h "${SCRIPT_PATH}" ]) do
+ cd "`dirname "${SCRIPT_PATH}"`"
+ SCRIPT_PATH="$(readlink "`basename "${SCRIPT_PATH}"`")";
+ done
+cd "`dirname "${SCRIPT_PATH}"`" > /dev/null
+SCRIPT_PATH="`pwd`";
+popd > /dev/null
+echo script path : ${SCRIPT_PATH}
+
+#### TIZEN_SDK is tizen-sdk path
+if [ `ls ${SCRIPT_PATH}/../../sdk.info | grep sdk.info | wc -l` -eq 1 ] ; then
+ TIZEN_SDK=`cat ${SCRIPT_PATH}/../../sdk.info | grep TIZEN_SDK_INSTALLED_PATH= | sed -e s/TIZEN_SDK_INSTALLED_PATH=/""/g`
+
+fi
+
+if [ -z "$TIZEN_SDK" ]; then
+ TIZEN_SDK="/home/test/tizen-sdk"
+fi
+echo tizen path : $TIZEN_SDK
+
+
+TEST_IDE_PATH="${TIZEN_SDK}/test/ide"
+SDB_DEVICES="${TIZEN_SDK}/tools/sdb devices"
+EM_CMD="${TIZEN_SDK}/tools/emulator/bin/emulator-manager"
+EM_VM_CHECK="${EM_CMD} list-vm"
+EM_VM_DELETE="${EM_CMD} delete -n test"
+EM_VM_CREATE="${EM_CMD} create -n test -b 1"
+EM_VM_RUN="${EM_CMD} launch -n test"
+SIKULI_CMD=`which sikuli-script`
+if [ -z "`echo ${SIKULI_CMD}`" ] ; then
+ SIKULI_CMD="/home/test/Sikuli/sikuli-script"
+fi
+echo sikuli path : $SIKULI_CMD
+CHECK=
+
+#### 1.1 test vm exist check
+echo "test start..."
+
+while :
+do
+ EM_VM_PID=`ps aux | grep test | awk '{ print $2 "\t" $11 }' | grep emulator | awk '{ print $1 }'`
+ if [ -n "${EM_VM_PID}" ] ; then
+ echo "pid : "${EM_VM_PID}" emulator process kill..."
+ kill -9 ${EM_VM_PID}
+ sleep 20
+ else
+ echo "emulator process kill success..."
+ break;
+ fi
+done
+
+for name in `exec ${EM_VM_CHECK}`
+do
+ if [ "$name" == "test" ] ; then
+ CHECK=`${EM_VM_DELETE} | grep Success: | wc -l`
+ fi
+done
+
+#### 1.2 test vm is exist then delete
+if [ "${CHECK}" == "0" ] ; then
+ echo "emulator vm delete failed..."
+ exit 1
+else
+ echo "emulator vm delete success..."
+fi
+
+#### 1.3 new test vm create
+CHECK=`${EM_VM_CREATE} | grep "Success:" | wc -l`
+if [ "${CHECK}" == "0" ] ; then
+ echo "emulator vm create failed..."
+ exit 1
+else
+ echo "emulator vm create success..."
+fi
+
+#### 1.4 new test vm run
+CHECK=`${EM_VM_RUN} | grep "Success:" | wc -l`
+if [ "${CHECK}" == "0" ] ; then
+ echo "emulator vm start failed..."
+ exit 1
+else
+ echo "emulator vm start success..."
+fi
+
+#### 1.5 new test vm and sdb connection check
+printf "emulator vm sdb connection"
+cnt=0
+while :
+do
+# CHECK=`${SDB_DEVICES} | awk '{ print $3 }' | grep "test" | wc -l`
+CHECK=10 # sdb connection bug... so bypass logic
+ if [ `echo ${CHECK}` -gt 0 ] ; then
+ printf "\n"
+ echo "emulator vm sdb connection success..."
+ break;
+ fi
+
+ let cnt++
+ sleep 1
+ printf "."
+
+ if [ ${cnt} -gt 60 ] ; then
+ printf "\n"
+ echo "emulator vm sdb connection failed..."
+ exit 1
+ fi
+done
+
+#### 1.6 wait emulator booting
+sleep 20
+
+### 2
+#### 2.1 tizen ide launch check and close
+while :
+do
+ TIZEN_IDE_PID=`ps aux | grep test | awk '{ print $2 "\t" $11 }' | grep eclipse | awk '{ print $1 }'`
+ if [ -n "${TIZEN_IDE_PID}" ] ; then
+ echo "pid : "${TIZEN_IDE_PID}" Tizen IDE process kill..."
+ kill -9 ${TIZEN_IDE_PID}
+ sleep 20
+ else
+ echo "Tizen IDE process kill success..."
+ break;
+ fi
+done
+
+### 3
+if [ ! -d "${TEST_IDE_PATH}" ] ; then
+ mkdir -p ${TEST_IDE_PATH}
+fi
+
+if [ -d "${TEST_IDE_PATH}/workspace" ] ; then
+ rm -rf ${TEST_IDE_PATH}/workspace
+ rm -rf ${TEST_IDE_PATH}/workspace/.metadata/ide-*.log
+fi
+
+unzip ${TEST_IDE_PATH}/ide-test-workspace.zip -d ${TEST_IDE_PATH} > /dev/null
+
+if [ ! -d "${TEST_IDE_PATH}/result" ] ; then
+ mkdir -p ${TEST_IDE_PATH}/result
+fi
+
+
+
+##
+# run
+## 1. sikuli ui test script launch
+
+${SIKULI_CMD} -r ${TEST_IDE_PATH}/tizen-ide-ui-test.sikuli
+
+
+##
+# cleanup
+## 1. copy test result
+## 2. close emulator
+## 3. close Tizen IDE
+## 4. cleanup workspace
+
+echo "test cleanup..."
+
+### 1
+LOGNAME=IDE-TEST.`date +%Y%m%d.%H%M%S`.log
+cat ${TEST_IDE_PATH}/workspace/.metadata/ide-*.log | grep "PERFORM" > ${TEST_IDE_PATH}/result/`echo ${LOGNAME}`
+cat ${TEST_IDE_PATH}/result/`echo ${LOGNAME}` | grep "PERFORM" | netcat 172.21.111.252 3333
+
+### 2
+while :
+do
+ EM_VM_PID=`ps aux | grep test | awk '{ print $2 "\t" $11 }' | grep emulator | awk '{ print $1 }'`
+ if [ -n "${EM_VM_PID}" ] ; then
+ echo "pid : "${EM_VM_PID}" emulator process kill..."
+ kill -9 ${EM_VM_PID}
+ sleep 20
+ else
+ echo "emulator process kill success..."
+ break;
+ fi
+done
+
+### 3
+while :
+do
+ TIZEN_IDE_PID=`ps aux | grep test | awk '{ print $2 "\t" $11 }' | grep eclipse | awk '{ print $1 }'`
+ if [ -n "${TIZEN_IDE_PID}" ] ; then
+ echo "pid : "${TIZEN_IDE_PID}" Tizen IDE process kill..."
+ kill -9 ${TIZEN_IDE_PID}
+ sleep 20
+ else
+ echo "Tizen IDE process kill success..."
+ break;
+ fi
+done
+
+### 4
+rm -rf ${TEST_IDE_PATH}/workspace
+
+
--- /dev/null
+
+<html>
+ <head>
+ <style type="text/css">
+ .sikuli-code {
+ font-size: 20px;
+ font-family: "Osaka-mono", Monospace;
+ line-height: 1.5em;
+ display:table-cell;
+ white-space: pre-wrap; /* css-3 */
+ white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */
+ white-space: -pre-wrap; /* Opera 4-6 */
+ white-space: -o-pre-wrap; /* Opera 7 */
+ word-wrap: break-word; /* Internet Explorer 5.5+ */
+ width: 99%; /* remove horizontal scroll-bar when viewing in IE7 */
+ }
+ .sikuli-code img {
+ vertical-align: middle;
+ margin: 2px;
+ border: 1px solid #ccc;
+ padding: 2px;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ -moz-box-shadow: 1px 1px 1px gray;
+ -webkit-box-shadow: 1px 1px 2px gray;
+ }
+ .kw {
+ color: blue;
+ }
+ .skw {
+ color: rgb(63, 127, 127);
+ }
+
+ .str {
+ color: rgb(128, 0, 0);
+ }
+
+ .dig {
+ color: rgb(128, 64, 0);
+ }
+
+ .cmt {
+ color: rgb(200, 0, 200);
+ }
+
+ h2 {
+ display: inline;
+ font-weight: normal;
+ }
+
+ .info {
+ border-bottom: 1px solid #ddd;
+ padding-bottom: 5px;
+ margin-bottom: 20px;
+ display: none;
+ }
+
+ a {
+ color: #9D2900;
+ }
+
+ body {
+ font-family: "Trebuchet MS", Arial, Sans-Serif;
+ }
+
+ </style>
+ </head>
+<body>
+<div class="info">
+<h2>tizen-ide-ui-test.sikuli</h2> <a href="tizen-ide-ui-test.zip">(Download this script)</a>
+</div>
+<pre class="sikuli-code">
+<span class="cmt"># tizen sdk luanch
+</span>openApp(<span class="str">"/home/test/tizen-sdk/ide/startup.sh -data /home/test/tizen-sdk/test/ide/workspace"</span>)
+<span class="skw">sleep</span>( <span class="dig">120</span> ) <span class="cmt">## wait ide open</span>
+
+<span class="cmt"># create tizen web test project 1, and test
+</span><span class="skw">type</span>( <span class="str">"f"</span>, KeyModifier.ALT )
+<span class="skw">sleep</span>( <span class="dig">1</span> )
+<span class="skw">type</span>( <span class="str">"n"</span> )
+<span class="skw">sleep</span>( <span class="dig">1</span> )
+<span class="skw">type</span>( <span class="str">"r"</span> )
+<span class="skw">wait</span>(<img src="1373869011937.png" />, <span class="dig">30</span>)
+<span class="skw">type</span>( <span class="str">"tizen web"</span> )
+<span class="skw">sleep</span>( <span class="dig">5</span> )
+<span class="skw">type</span>( Key.ENTER )
+<span class="skw">sleep</span>( <span class="dig">5</span> )
+<span class="skw">type</span>( Key.ENTER )
+<span class="skw">sleep</span>( <span class="dig">5</span> )
+<span class="skw">wait</span>(<img src="1373869170312.png" />, <span class="dig">10</span>)
+<span class="skw">click</span>(Pattern(<img src="1373865829456.png" />).similar(<span class="dig">0.90</span>))
+<span class="skw">sleep</span>( <span class="dig">5</span> )
+<span class="skw">wait</span>(<img src="1373885396049.png" />, <span class="dig">60</span>*<span class="dig">5</span>)
+<span class="skw">click</span>(<img src="1373865867360.png" />)
+<span class="skw">type</span>( <span class="str">"wT1"</span> )
+<span class="skw">type</span>( Key.ENTER )
+<span class="skw">sleep</span>( <span class="dig">10</span> )
+
+<span class="kw">if</span> exists(<img src="1373877306612.png" />):
+ <span class="skw">click</span>(Pattern(<img src="1373877363036.png" />).targetOffset(-<span class="dig">81</span>,<span class="dig">1</span>))
+ <span class="skw">click</span>(<img src="1373877385908.png" />)
+
+<span class="skw">sleep</span>( <span class="dig">5</span> )
+<span class="skw">type</span>( <span class="str">"w"</span>, KeyModifier.ALT )
+<span class="skw">type</span>( <span class="str">"r"</span> )
+<span class="skw">sleep</span>( <span class="dig">1</span> )
+<span class="skw">type</span>( Key.ENTER )
+<span class="skw">sleep</span>( <span class="dig">5</span> )
+
+
+
+<span class="skw">click</span>(<img src="1373866395268.png" />)
+<span class="skw">wait</span>(<img src="1373866273709.png" />)
+
+<span class="skw">type</span>( Key.F11, KeyModifier.CTRL )
+<span class="kw">if</span> exists(<img src="1373873356058.png" />):
+ <span class="skw">click</span>(<img src="1373857413406.png" />)
+<span class="skw">sleep</span>( <span class="dig">30</span> )
+<span class="skw">wait</span>(<img src="1373873427833.png" />, <span class="dig">30</span>)
+<span class="skw">click</span>(Pattern(<img src="1373883294273.png" />).targetOffset(-<span class="dig">17</span>,<span class="dig">1</span>))
+<span class="skw">sleep</span>( <span class="dig">1</span> )
+
+
+
+
+<span class="cmt"># create tizen native test project 1
+</span><span class="skw">type</span>( <span class="str">"f"</span>, KeyModifier.ALT )
+<span class="skw">sleep</span>( <span class="dig">1</span> )
+<span class="skw">type</span>( <span class="str">"n"</span> )
+<span class="skw">sleep</span>( <span class="dig">1</span> )
+<span class="skw">type</span>( <span class="str">"r"</span> )
+<span class="skw">wait</span>(<img src="1373869011937.png" />, <span class="dig">30</span>)
+<span class="skw">type</span>( <span class="str">"tizen native"</span> )
+<span class="skw">sleep</span>( <span class="dig">5</span> )
+<span class="skw">type</span>( Key.ENTER )
+<span class="skw">sleep</span>( <span class="dig">5</span> )
+<span class="skw">type</span>( Key.ENTER )
+<span class="skw">sleep</span>( <span class="dig">5</span> )
+<span class="skw">wait</span>(<img src="1373877161869.png" />,<span class="dig">10</span>)
+<span class="skw">click</span>(Pattern(<img src="1373877178205.png" />).similar(<span class="dig">0.90</span>))
+<span class="skw">sleep</span>( <span class="dig">5</span> )
+<span class="skw">wait</span>(<img src="1373885464049.png" />, <span class="dig">60</span>*<span class="dig">5</span>)
+<span class="skw">click</span>(<img src="1373865867360.png" />)
+<span class="skw">type</span>( <span class="str">"nT1"</span> )
+<span class="skw">type</span>( Key.ENTER )
+<span class="skw">sleep</span>(<span class="dig">10</span>)
+
+<span class="kw">if</span> exists(<img src="1373877306612.png" />):
+ <span class="skw">click</span>(Pattern(<img src="1373877363036.png" />).targetOffset(-<span class="dig">81</span>,<span class="dig">1</span>))
+ <span class="skw">click</span>(<img src="1373877385908.png" />)
+
+<span class="skw">sleep</span>( <span class="dig">5</span> )
+<span class="skw">type</span>( <span class="str">"w"</span>, KeyModifier.ALT )
+<span class="skw">type</span>( <span class="str">"r"</span> )
+<span class="skw">sleep</span>( <span class="dig">1</span> )
+<span class="skw">type</span>( Key.ENTER )
+<span class="skw">sleep</span>( <span class="dig">5</span> )
+
+<span class="skw">click</span>(<img src="1373866395268.png" />)
+<span class="skw">wait</span>(<img src="1373883239569.png" />)
+
+
+<span class="skw">type</span>( Key.F11, KeyModifier.CTRL )
+<span class="skw">sleep</span>( <span class="dig">1</span> )
+<span class="skw">doubleClick</span>(<img src="1373883771509.png" />)
+<span class="skw">sleep</span>( <span class="dig">1</span> )
+<span class="skw">wait</span>(<img src="1373883824021.png" />, <span class="dig">60</span>*<span class="dig">10</span> )
+<span class="skw">click</span>(Pattern(<img src="1373883294273.png" />).targetOffset(-<span class="dig">17</span>,<span class="dig">1</span>))
+<span class="skw">sleep</span>( <span class="dig">1</span> )
+<span class="skw">doubleClick</span>(Pattern(<img src="1373885544264.png" />).targetOffset(-<span class="dig">29</span>,<span class="dig">1</span>))
+<span class="skw">sleep</span>( <span class="dig">1</span> )
+</pre>
+</body>
+</html>
--- /dev/null
+# tizen sdk luanch
+openApp("/home/test/tizen-sdk/ide/startup.sh -data /home/test/tizen-sdk/test/ide/workspace")
+sleep( 120 ) ## wait ide open
+
+# create tizen web test project 1, and test
+type( "f", KeyModifier.ALT )
+sleep( 1 )
+type( "n" )
+sleep( 1 )
+type( "r" )
+wait("1373869011937.png", 30)
+type( "tizen web" )
+sleep( 5 )
+type( Key.ENTER )
+sleep( 5 )
+type( Key.ENTER )
+sleep( 5 )
+wait("1373869170312.png", 10)
+click(Pattern("1373865829456.png").similar(0.90))
+sleep( 5 )
+wait("1373885396049.png", 60*5)
+click("1373865867360.png")
+type( "wT1" )
+type( Key.ENTER )
+sleep( 10 )
+
+if exists("1373877306612.png"):
+ click(Pattern("1373877363036.png").targetOffset(-81,1))
+ click("1373877385908.png")
+
+sleep( 5 )
+type( "w", KeyModifier.ALT )
+type( "r" )
+sleep( 1 )
+type( Key.ENTER )
+sleep( 5 )
+
+
+
+click("1373866395268.png")
+wait("1373866273709.png")
+
+type( Key.F11, KeyModifier.CTRL )
+if exists("1373873356058.png"):
+ click("1373857413406.png")
+sleep( 30 )
+wait("1373873427833.png", 30)
+click(Pattern("1373883294273.png").targetOffset(-17,1))
+sleep( 1 )
+
+
+
+
+# create tizen native test project 1
+type( "f", KeyModifier.ALT )
+sleep( 1 )
+type( "n" )
+sleep( 1 )
+type( "r" )
+wait("1373869011937.png", 30)
+type( "tizen native" )
+sleep( 5 )
+type( Key.ENTER )
+sleep( 5 )
+type( Key.ENTER )
+sleep( 5 )
+wait("1373877161869.png",10)
+click(Pattern("1373877178205.png").similar(0.90))
+sleep( 5 )
+wait("1373885464049.png", 60*5)
+click("1373865867360.png")
+type( "nT1" )
+type( Key.ENTER )
+sleep(10)
+
+if exists("1373877306612.png"):
+ click(Pattern("1373877363036.png").targetOffset(-81,1))
+ click("1373877385908.png")
+
+sleep( 5 )
+type( "w", KeyModifier.ALT )
+type( "r" )
+sleep( 1 )
+type( Key.ENTER )
+sleep( 5 )
+
+click("1373866395268.png")
+wait("1373883239569.png")
+
+
+type( Key.F11, KeyModifier.CTRL )
+sleep( 1 )
+doubleClick("1373883771509.png")
+sleep( 1 )
+wait("1373883824021.png", 60*10 )
+click(Pattern("1373883294273.png").targetOffset(-17,1))
+sleep( 1 )
+doubleClick(Pattern("1373885544264.png").targetOffset(-29,1))
+sleep( 1 )