testkit-lite v2.1
authorjoey <joey@joey-tang.sh.intel.com>
Tue, 7 May 2013 09:51:59 +0000 (17:51 +0800)
committerjoey <joey@joey-tang.sh.intel.com>
Tue, 7 May 2013 09:51:59 +0000 (17:51 +0800)
54 files changed:
ChangeLog [deleted file]
README
TODO [deleted file]
VERSION [new file with mode: 0644]
commodule/Makefile.am [moved from man/Makefile.am with 80% similarity]
commodule/__init__.py [moved from __init__.py with 100% similarity]
commodule/connector.py [new file with mode: 0644]
commodule/impl/Makefile.am [moved from autogen with 83% similarity, mode: 0644]
commodule/impl/__init__.py [new file with mode: 0644]
commodule/impl/autoexec.py [moved from testkitlite/common/autoexec.py with 87% similarity, mode: 0755]
commodule/impl/killall.py [moved from testkitlite/common/killall.py with 100% similarity, mode: 0755]
commodule/impl/localhost.py [new file with mode: 0644]
commodule/impl/str2.py [moved from Makefile.am with 54% similarity, mode: 0755]
commodule/impl/tizenmobile.py [new file with mode: 0644]
commodule/log.py [new file with mode: 0644]
configure.ac [deleted file]
debian/changelog [new file with mode: 0644]
debian/compat [new file with mode: 0644]
debian/control [new file with mode: 0644]
debian/copyright [new file with mode: 0644]
debian/docs [new file with mode: 0644]
debian/files [new file with mode: 0644]
debian/postinst [new file with mode: 0644]
debian/rules [new file with mode: 0755]
doc/Testkit-Lite_Quick_Start.pdf [deleted file]
doc/Testkit-Lite_User_Guide.pdf
man/testkit-lite.1 [deleted file]
pack.sh [deleted file]
packaging/Makefile [new file with mode: 0644]
packaging/testkit-lite.dsc [new file with mode: 0644]
packaging/testkit-lite.spec [new file with mode: 0644]
setup.py [new file with mode: 0644]
testkit-lite
testkit-lite.spec [deleted file]
testkitlite/Makefile.am
testkitlite/common/Makefile.am
testkitlite/common/process_killall.py [new file with mode: 0755]
testkitlite/common/str2.py
testkitlite/engines/Makefile.am
testkitlite/engines/default/Makefile.am
testkitlite/engines/default/runner.py
testkitlite/engines/default/testkithttpd.py [deleted file]
tests/__init__.py [new file with mode: 0644]
tests/testkitlite/Test_Runner.py [new file with mode: 0644]
tests/testkitlite/__init__.py [new file with mode: 0644]
web/index.html
web/manual_harness.html
xsd/readme.txt
xsd/release-notes
xsd/result.xml
xsd/test_definition.xsd
xsd/testresult.xsl
xsd/tests.css
xsd/tests.xml

diff --git a/ChangeLog b/ChangeLog
deleted file mode 100644 (file)
index d5ed5d1..0000000
--- a/ChangeLog
+++ /dev/null
@@ -1,159 +0,0 @@
- Tue Jan 22 2013 Tang Shaofeng <shaofeng.tang@intel.com> 2.3.0-2
-  -merge the PR https://github.com/testkit/testkit-lite/pull/3 
-
- Tue Jan 9 2013 Zhang Huihui <huihuix.zhang@intel.com> 2.3.0-1
-  - add an option to enable memory collection
-  - add case number info for core cases
-  - split test xml by set and send to the server one by one
- Tue Dec 20 2012 Zhang Huihui <huihuix.zhang@intel.com> 2.2.9-2
-  - update widget kill regular expression
-  - add error message for -o option when the file doesn't exist
- Tue Dec 17 2012 Zhang Huihui <huihuix.zhang@intel.com> 2.2.9-1
-  - add feature to set the result of core manual cases from the console
- Tue Dec 12 2012 Zhang Huihui <huihuix.zhang@intel.com> 2.2.8-3
-  - prevent the same test entry loaded again in the test frame
- Tue Dec 11 2012 Zhang Huihui <huihuix.zhang@intel.com> 2.2.8-2
-  - restart client when free memory is less than 100M
-  - when release memory, the cached memory will also be released
- Tue Dec 7 2012 Zhang Huihui <huihuix.zhang@intel.com> 2.2.8-1
-  - merge application.js into index.html
-  - change execution sequence to core_auto, webapi, core_manual
-  - add test summary information after merging test result
-  - add patch to deal multiple packages in one server run
-  - add title and running info for index.html
-  - add dynamic waiting time to check BLOCK result
-  - add error log frame
-  - change server to read definition before start client
-  - kill all client process after all done
-  - code cleanup and update copyright
-  - restart client every 200 cases to release memory
-  - update window close feature, to close mini-browser and chromium when timeout
-  - add device info into the result xml file
- Tue Nov 16 2012 Zhang Huihui <huihuix.zhang@intel.com> 2.2.7-3
-  - terminate existing client when timeout
- Tue Nov 13 2012 Zhang Huihui <huihuix.zhang@intel.com> 2.2.7-2
-  - change result to BLOCK when timeout, set initial case result to BLOCK
- Tue Nov 8 2012 Zhang Huihui <huihuix.zhang@intel.com> 2.2.7-1
-  - add patch from tangshaofeng, and introduces a new mechanism to run webapi case
-  - alien to the new schema which move launcher attribute from tag test_definition to suite
-  - add support to run xml without tag test_definition
-  - add installation section into pdf doc
-  - remove overall timeout control for webapi package
-change permission to 755 for folder /opt/testkit/lite, so non-root user can user testkit-lite
- Tue Oct 23 2012 Zhang Huihui <huihuix.zhang@intel.com> 2.2.6-1
-  - add category filter back
-  - add block button to the manualharness
-  - cut off long case id to improve manualharness's user experience
-  - change python build to standard rpm build
- Tue Oct 10 2012 Zhang Huihui <huihuix.zhang@intel.com> 2.2.5-1
-  - add BLOCK logic for webapi's result
- Tue Sep 29 2012 Zhang Huihui <huihuix.zhang@intel.com> 2.2.4-4
-  - update pdf files
- Tue Sep 28 2012 Zhang Huihui <huihuix.zhang@intel.com> 2.2.4-3
-  - add Known Issues section in README
-  - update Notes section in README
- Tue Sep 25 2012 Zhang Huihui <huihuix.zhang@intel.com> 2.2.4-2
-  - integrate shaofeng's patch onload_for_perf
-  - remove category filter
- Tue Sep 17 2012 Zhang Huihui <huihuix.zhang@intel.com> 2.2.4-1
-  - add sleep time between running tests.xml
-  - update post message
-  - add merging status message
-  - update log format
-  - Update elements(button, radiobox, etc) in testkit/web/manualharness.html
-  - add time for merge log
-  - update xsl according to new <spec> schema
- Tue Sep 10 2012 Zhang Huihui <huihuix.zhang@intel.com> 2.2.3-2
-  - support merge result file that has same case ID
-  - update result file name
-  - add error handler for post request, to print error message
- Tue Aug 30 2012 Zhang Huihui <huihuix.zhang@intel.com> 2.2.3-1
-  - support run both auto and manual core cases in one test run
-  - write pid into pid_log,kill pid on windows platform
-  - modify webAPI identify string
-  - use CDATA to resolve unreadable characters
-  - add default time for core package
- Tue Aug 16 2012 Zhang Huihui <huihuix.zhang@intel.com> 2.2.2-3
-  - support run both core and web api test packages in one test run
-  - fill the device info, test plan name and testing start/end time to result xml
-  - remove txt test result
- Tue Aug 14 2012 Zhang Huihui <huihuix.zhang@intel.com> 2.2.2-2
-  - use str2str function defined in common module to replace the complex regular expression
-  - support Windows platform
- Tue Aug 8 2012 Zhang Huihui <huihuix.zhang@intel.com> 2.2.2-1
-  - remove unreadable characters from stdout and stderr
- Tue Aug 4 2012 Zhang Huihui <huihuix.zhang@intel.com> 2.2.1-1
-  - Fix bug: Testkit could not output the whole result.xml
- Tue Jul 26 2012 Zhang Huihui <huihuix.zhang@intel.com> 2.2.0-3
-  - modify index and manualharness to make test widgets display better
-  - add suppor to view test result in XSL format
- Tue Jul 12 2012 Zhang Huihui <huihuix.zhang@intel.com> 2.2.0-2
-  - Fix bug: can't be installed by command 'rpm -ivh'
-  - change option -A from --all to --auto-only
- Tue Jul 7 2012 Zhang Huihui <huihuix.zhang@intel.com> 2.2.0-1
-  - code clean up
-  - Fix bug: log directory doesn't have millisecond
- Fri Jun 29 2012 Jing Wang <jing.j.wang@intel.com> 2.2.0 
-  - code clean up. remove original parser and filter, but use etree instead
-  - for normal and external test, filter is done by testkit-lite in uniform way
-  - update manual doc
-  - Add performance test support
-  - Support case hint when running external test
-  - Support run under Windows (Non-install mode)
-  - Fix bug: result location issue
-  - Fix bug: execution_type filter issue in testkit-web
-  - Fix bug: fullscreen issue
- Fri Mar 30 2012 Yugang Fan <yugang.fan@intel.com> 2.1.0-4 
-  - Add license header to web/index.html and web/manualharness.html.
- Tue Mar 27 2012 Tian Xu <xux.tian@intel.com> 2.1.0-2 
-  - Add pretty print manual case detials
-  - Fixed bug: can't get final result xml by "-o" option when
-  testkit-lite be killed
-  - Implement feature to create txt type result for Web test
-  - Remove option "--webnotpoll" and update default result file ext. to ".result" + ext
-  - Code clean up, remove unnecessary dependents and platform specifical code
-  - Add support for running manual test in testkit-web
-  - Implement feature: Implement a local http server to handle post request
- Thu Feb 16  2012 Tian, Xu <xux.tian@intel.com> 2.0.0-5
-  - Fixed bug: save result xml when each testcase executed done 
- Sun Feb  5  2012 Tian, Xu <xux.tian@intel.com> 2.0.0-4 
-  - Update chrominue default start up paramters 
- Sun Jan 18 2012 Wang, Jing <jing.j.wang@intel.com> 2.0.0-3
-  - Resolve page complete but not timeout issue in web testing
- Sun Jan 16 2012 Tian, Xu <tian.xux@intel.com> 2.0.0-2
-  - Fix timeout, but can't kill issue
- Sun Jan 15 2012 Tian, Xu <tian.xux@intel.com> 2.0.0-1
-  - Unified native core testing and web API testing entry in testkit-lite
-  - Support execute testcases per vertical in testkit-lite
- Thu Dec 29 Tian, Xu <tian.xux@intel.com> 1.0.8-1
-  - Support type and status filters in testkit-lite
- Tue Dec  6 Tian, Xu <tian.xux@intel.com> 1.0.7-1
-  - Merge testkit-web  
- Fri Nov 25 2011 Tian, Xu <tian.xux@intel.com> 1.0.6-1
-  - Refactor 1.0.5 code, add tizen testcases parse engine in testkit-lite 
- Tue Jul 27 2011 Wang, Jing <jing.j.wang@intel.com> 1.0.5-1
-  - Refresh test-definition schema
-  - Add support for latest test-definition schema
- Tue Jul 14 2011 Wang, Jing <jing.j.wang@intel.com> 1.0.4-1
-  - add -o output option, let user specify result file location
-  - add external reporter plugin support
- Sat Apr 23 2011 Wei, Zhang <wei.z.zhang@intel.com> 1.0.3-1
-  - add separate log for each case
- Fri Nov 12 2010 Wei, Zhang <wei.z.zhang@intel.com> 1.0.2-1
-  - refresh the schema file from http://gitorious.org/qa-tools/test-definition/
-  - use explicit step to replace pseudo step for descrption
- Wed Sep 27 2010 Wei, Zhang <wei.z.zhang@intel.com> 1.0.1-1
-  - add option -T to strip those non-executed cases in result xml
-  - not print empty presteps or poststeps in result xml
- Fri Jul 09 2010 Wei, Zhang <wei.z.zhang@intel.com> 0.6.1-1
-  - pre_steps and post_steps are forced automated. (align with nokia's testrunner)
-  - deal with manual tests which has description element, it's the requirement of tests.xml exported from testlink.
-  - imporve testparser to handle unicode object from tests.xml
- Wed Jul 14 2010 Wei, Zhang <wei.z.zhang@intel.com> 0.6.1-2
-  - install directory changes from /opt/testkit-lite to /opt/testkit/lite
-  - encode to utf8 when xml content is transfered to unicode object by lxml
- Mon Jul 19 2010 Wei, Zhang <wei.z.zhang@intel.com> 0.6.1-3 
-  - add normal user running support for command testkit-lite
-  - deal with non-params as -h
- Wed Jul 21 2010 Wei, Zhang <wei.z.zhang@intel.com> 1.0.0-1
-  - for 1.0.0 release
diff --git a/README b/README
index e038759..0ce1b35 100644 (file)
--- a/README
+++ b/README
@@ -1,129 +1,2 @@
-    Installation:
-    =================
-   
-    Before installation, please make sure basic packages of python have been installed;
-    
-        Build RPM from source code: 
-            ./pack.sh
-            
-        Install testkit-lite RPM:
-            rpm -ivh testkit-lite-x.x.x-x.noarch.rpm
-            
-            if your system doesn't support 'rpm -ivh', you can install it as follows:
-                1): Copy 'testkit-lite-x.x.x-x.noarch.rpm' to <somewhere>
-                2): Execute 'rpm2cpio <somewhere>/testkit-lite-x.x.x-x.noarch.rpm | cpio Â¨Cidmv'
-                3): Execute 'cp -r <somewhere>/usr/* /usr/'
-                4): Execute 'cp -r <somewhere>/opt/* /opt/'
-
-    Quick Start:
-    =================
-    
-    At first, prepare one tests.xml file aligned with schema files: /opt/testkit/lite/xsd/testdefinition-syntax.xsd.
-    
-    And then,
-    
-        1) You can select on parser engine to simply conduct one or more tests.xml:
-            testkit-lite -f <somewhere>/tests.xml
-            
-        2) If you just want to get the statistic (such as the testcase number or the structure), dryrun could help:
-            testkit-lite -f tests.xml -D
-            
-        3) If you want to execute both auto and manual tests:
-            testkit-lite -f tests.xml
-            
-        4) If you just want to execute manual tests:
-            testkit-lite -f tests.xml -M
-            
-        5) If you just want to execute auto tests:
-            testkit-lite -f tests.xml -A
-            
-        6) If you want to save test result to another file, by default it'll be under /opt/testkit/lite/latest:
-            testkit-lite -f tests.xml -o <somewhere>
-            
-        7) If you want to choose some filters:
-            testkit-lite -f tests.xml --status level1 --type type1 ...
-            
-        8) If you want to run Web API test:
-            testkit-lite -f /usr/share/webapi-webkit-tests/tests.xml -e "WRTLauncher webapi-webkit-tests" -o /tmp/wekit-tests-result.xml
-            
-        9) If you want to run Web API test in full screen mode:
-            testkit-lite -f /usr/share/webapi-webkit-tests/tests.xml -e "WRTLauncher webapi-webkit-tests" -o /tmp/wekit-tests-result.xml --fullscreen
-            
-        10) At last, you can freely compose the above parameters together:
-             testkit-lite -f <somewhere1>/tests.xml <somewhere2>/tests.xml -A --priority P1 --type type1 ...
-
-    Get Results:
-    =================
-    
-    Test report will be generated as bellow:
-        tests.result.xml
-            xml result files aligned with schema files: /opt/testkit/lite/xsd/
-        example: <ignore>
-        
-    The result will be under /opt/testkit/lite/latest after execution, you can also check the history results in /opt/testkit/lite/yyyy-mm-dd-HH:MM:SS.NNNNNN.
-
-    View Results:
-    =================
-    
-    Test report can be viewed in HTML format, so the data in the xml result file looks more human friendly.
-    
-    Please follow the following steps to view test report:
-        1) copy files: application.js back_top.png jquery.min.js testresult.xsl tests.css under directory /opt/testkit/lite/xsd/
-        2) put the files from step 1) under the same directory as the xml result file
-        3) open xml result file with a web browser(IE, Chrome or Firefox)
-
-    Notes:
-    =================
-    
-    1) Proxy settings should be disabled when execute webapi packages
-    2) testkit-lite's TestLog is stored to /opt/testkit/lite/latest
-    3) testkit-lite enables both automatic and manual tests by default
-    4) Obviously -A and -M are conflict options
-    5) -e option does not support -D mode
-    6) The test cases' order in the result files might be arbitrary, when running same tests.xml with same options. This is caused by python's API 'getiterator' from module 'xml.etree.ElementTree'
-    7) run command 'testkit-lite', it might not be able to locate module 'testkitlite.engines.default.runner', run command 'export PYTHONPATH=/usr/lib/python2.7/site-packages' to resolve this issue
-
-    Known Issues:
-    =================
-    
-    1) testkit-lite might crash when running test package which contains more than 1000 test cases on portable devices(launch box, PR3)
-     workaround for 1): Split the test package's xml into smaller xml files, which contain less than 1000 test cases. And run them one by one
-
-    Detail Options:
-    =================
-    Options:
-
-      Common options:
-        -f, --testxml             Specify the test.xml. If run more the one testxml, just list them all and separate with a whitespace
-        -D, --dryrun              Dry-run the selected test cases
-        -A, --auto-only           Enable only auto tests
-        -M, --manual-only         Enable only manual tests
-        -E  <engine name>         Specify a test engine
-        -o RESULTFILE, --output=RESULTFILE
-                                  Specify output file for result xml. If more than one testxml provided, results will be merged together to this output file
-        -e                        Launch external test with an executable file
-        --fullscreen              Run Web API test in full screen mode
-        --non-active              Disable the ability to set the result of core manual cases from the console
-        --enable-memory-collection
-                                  Enable the ability to release memory when the free memory is less than 100M
-        --version                 Show version information
-        -h, --help                Show this help message and exit
-
-      Filters options:
-        All filters options are multiple-valued and optional
-         --suite                  Select the specified white-rules
-         --set                    Select the specified white-rules
-         --id                     Select the specified white-rules
-         --component              Select the specified white-rules
-         --status                 Select the specified white-rules
-         --type                   Select the specified white-rules
-         --priority               Select the specified white-rules
-         --category               Select the specified white-rules
-
-    Examples:
-    =================
-    
-    run a webapi package:
-      1) testkit-lite -f /usr/share/webapi-webkit-tests/tests.xml -e 'WRTLauncher webapi-webkit-tests' -o /tmp/wekit-tests-result.xml --priority P0 --status ready
-    run both core and webapi packages:
-      2) testkit-lite -f /usr/share/webapi-webkit-tests/tests.xml /usr/share/tts-bluez-tests/tests.xml -e 'WRTLauncher webapi-webkit-tests' -o /tmp/wekit-tests-result.xml
+Update
+README
diff --git a/TODO b/TODO
deleted file mode 100644 (file)
index 967ff0d..0000000
--- a/TODO
+++ /dev/null
@@ -1,3 +0,0 @@
-TODO:
-========
-1. add --verbose and logging level
\ No newline at end of file
diff --git a/VERSION b/VERSION
new file mode 100644 (file)
index 0000000..0544b57
--- /dev/null
+++ b/VERSION
@@ -0,0 +1,4 @@
+[public_version]
+version=TCT2.1
+[internal_version]
+version=TCT2.1
similarity index 80%
rename from man/Makefile.am
rename to commodule/Makefile.am
index 03236ad..205211e 100644 (file)
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 #
 # Authors:
-#              Zhang, Huihui <huihuix.zhang@intel.com>
-#              Wendong,Sui  <weidongx.sun@intel.com>
+#              Yuanyuan,Zou  <zouyuanx@intel.com>
 
-testkitmandir = /usr/share/man/man1
-dist_testkitman_DATA = testkit-lite.1
+
+SUBDIRS = impl
+
+commoduledir = /usr/lib/python2.7/dist-packages/commodule
+dist_commodule_SCRIPTS = *.py
similarity index 100%
rename from __init__.py
rename to commodule/__init__.py
diff --git a/commodule/connector.py b/commodule/connector.py
new file mode 100644 (file)
index 0000000..499ba80
--- /dev/null
@@ -0,0 +1,78 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2013 Intel Corporation
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor,Boston, MA 02110-1301,USA.
+#
+# Authors:
+#              Liu,chengtao <liux.chengtao@intel.com>
+
+import sys
+import time
+
+class Connector:
+    """Communication module for automatic test"""
+    def __init__(self, config):
+        self.__handler = None
+        if "testremote" in config:
+            try:
+                exec "from impl.%s import testremote" % config["testremote"]
+                self.__handler = testremote
+            except Exception, e:
+                print e
+
+    def get_connector(self):
+        """list the handler instance"""
+        return self.__handler
+
+def main(argvs):
+    """commanline entry for invoke Connector apis"""
+    if len(argvs) < 2:
+        print "No command-line parameters provided."
+        return
+
+    ret = None
+    subcmd = argvs[1]
+    conn = Connector({"testremote":"tizenMobile"}).get_connector()
+    if conn is None:
+        print "Testremote instance is not initialized successfully!"        
+        return
+    if subcmd == "get_device_ids":
+        ret = conn.get_device_ids()
+    elif subcmd == "get_device_info":
+        ret = conn.get_device_info("emulator-26100") 
+    elif subcmd == "install_package":
+        ret = conn.install_package("emulator-26100", \
+                                   "/home/packages/tct-webapi-tizen-contact-tests-1.1.9-7.1.i586.rpm")
+    elif subcmd == "get_installed_package":
+        ret = conn.get_installed_package("emulator-26100")
+    elif subcmd == "remove_package":
+        ret = conn.remove_package("emulator-26100", \
+                                  "tct-webapi-tizen-contact-tests-1.1.9-7.1.i586")
+    elif subcmd == "download_file":
+        ret = conn.download_file("emulator-26100", \
+                                  "/usr/share/tct-webapi-tizen-time-tests/tests.xml",\
+                                  "/usr/share/tct-webapi-tizen-time-tests/tests.xml")
+    elif subcmd == "upload_file":
+        ret = conn.upload_file("emulator-26100", \
+                                  "/usr/share/tct-webapi-tizen-time-tests/tests.xml",\
+                                  "/usr/share/tct-webapi-tizen-time-tests/tests.xml")
+    else: 
+        print "unknown sub command name \"%s\"" % subcmd
+
+    print "result:", ret
+
+if __name__ == '__main__':
+    main(sys.argv)
old mode 100755 (executable)
new mode 100644 (file)
similarity index 83%
rename from autogen
rename to commodule/impl/Makefile.am
index a56ff09..2d91657
--- a/autogen
@@ -1,5 +1,3 @@
-#!/bin/sh
-#
 # Copyright (C) 2012 Intel Corporation
 # 
 # This program is free software; you can redistribute it and/or
@@ -17,7 +15,8 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 #
 # Authors:
-#              Zhang, Huihui <huihuix.zhang@intel.com>
-#              Wendong,Sui  <weidongx.sun@intel.com>
+#              Yuanyuan,Zou  <zouyuanx@intel.com>
+
 
-autoreconf --install
+commoduleimpldir = /usr/lib/python2.7/dist-packages/commodule/impl
+dist_commoduleimpl_SCRIPTS = *.py
diff --git a/commodule/impl/__init__.py b/commodule/impl/__init__.py
new file mode 100644 (file)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
old mode 100644 (file)
new mode 100755 (executable)
similarity index 87%
rename from testkitlite/common/autoexec.py
rename to commodule/impl/autoexec.py
index 7c85548..db5e62b
@@ -27,10 +27,10 @@ import threading
 import subprocess
 from multiprocessing import Process
 from multiprocessing import Value
-from testkitlite.common.killall import killall
-from testkitlite.common.str2 import *
+from killall import killall
+from str2 import *
 
-def shell_exec(cmd, pid_log, timeout=None, boutput=False):
+def shell_exec(cmd,  timeout=None,  boutput=False):
     """shell executor, return [exitcode, stdout/stderr]
        timeout: None means unlimited timeout
        boutput: specify whether print output during the command running
@@ -52,15 +52,6 @@ def shell_exec(cmd, pid_log, timeout=None, boutput=False):
     # start execution process
     cmdPopen = subprocess.Popen(args=cmd, shell=True,
                                 stdout=wbuffile1, stderr=wbuffile2)
-    # write pid only for external execution
-    if pid_log is not "no_log":
-        try:
-            with open(pid_log, "a") as fd:
-                pid = str(cmdPopen.pid)
-                fd.writelines(pid + '\n')
-        except:
-            pass
-            
     def print_log():
         sys.stdout.write(rbuffile1.read())
         sys.stdout.write(rbuffile2.read())
@@ -82,7 +73,7 @@ def shell_exec(cmd, pid_log, timeout=None, boutput=False):
             if t <= 0:
                 # timeout, kill command
                 try:
-                    exit_code = "time_out"
+                    exit_code = "timeout"
                     cmdPopen.terminate()
                     time.sleep(5)
                 except:
@@ -104,6 +95,11 @@ def shell_exec(cmd, pid_log, timeout=None, boutput=False):
     # only leave readable characters
     stdout_log = str2str(stdout_log)
     stderr_log = str2str(stderr_log)
+    retruncode = 0
+    if 'returncode=' in stdout_log:
+        index = stdout_log.find('returncode=')+11
+        retruncode = str(int(stdout_log[index:]))
+        exit_code = retruncode
     stdout_log = '<![CDATA[' + stdout_log + ']]>'
     stderr_log = '<![CDATA[' + stderr_log + ']]>'
     # close file
old mode 100644 (file)
new mode 100755 (executable)
similarity index 100%
rename from testkitlite/common/killall.py
rename to commodule/impl/killall.py
diff --git a/commodule/impl/localhost.py b/commodule/impl/localhost.py
new file mode 100644 (file)
index 0000000..5259667
--- /dev/null
@@ -0,0 +1,563 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+#
+# Authors:
+#              Liu ChengTao <liux.chengtao@intel.com>
+
+import os
+import sys
+import time
+import socket
+import threading
+import subprocess
+import requests
+import json
+import re
+import uuid
+
+def get_url(baseurl, api):
+    """get full url string"""
+    return "%s%s" % (baseurl, api)
+
+def http_request(url, rtype="POST", data=None):
+    """http request to the device http server"""
+    result = None
+    if rtype == "POST":
+        headers = {'content-type': 'application/json'}
+        try:
+            ret = requests.post(url, data=json.dumps(data), headers=headers)
+            if ret:
+                result = ret.json()
+        except Exception, e:
+            pass
+    elif rtype == "GET":
+        try:        
+            ret = requests.get(url, params=data)
+            if ret:
+                result = ret.json()
+        except Exception, e:
+            pass
+
+    return result
+
+def shell_command(cmdline):
+    """sdb communication for quick return in sync mode"""
+    proc = subprocess.Popen(cmdline,
+                            shell=True,
+                            stdout=subprocess.PIPE,
+                            stderr=subprocess.PIPE)
+    ret1 = proc.stdout.readlines()
+    ret2 = proc.stderr.readlines()
+    result = ret1 or ret2
+    return result
+
+lockobj = threading.Lock()
+test_server_result = []
+test_server_status = {}
+class StubExecThread(threading.Thread):
+    """sdb communication for serve_forever app in async mode"""
+    def __init__(self, cmd=None, sessionid=None):
+        super(StubExecThread, self).__init__()
+        self.stdout = []
+        self.stderr = []
+        self.cmdline = cmd
+        self.sessionid = sessionid
+
+    def run(self):        
+        BUFFILE1 = os.path.expanduser("~") + os.sep + self.sessionid + "_stdout"
+        BUFFILE2 = os.path.expanduser("~") + os.sep + self.sessionid + "_stderr"
+
+        LOOP_DELTA = 0.2
+        wbuffile1 = file(BUFFILE1, "w")
+        wbuffile2 = file(BUFFILE2, "w")
+        rbuffile1 = file(BUFFILE1, "r")
+        rbuffile2 = file(BUFFILE2, "r")
+        proc = subprocess.Popen(self.cmdline,
+                                shell=True,
+                                stdout=wbuffile1,
+                                stderr=wbuffile2)
+        def print_log():
+            """
+            print the stdout/stderr log
+            """
+            sys.stdout.write(rbuffile1.read())
+            sys.stdout.write(rbuffile2.read())
+            sys.stdout.flush()
+
+        rbuffile1.seek(0)
+        rbuffile2.seek(0)
+        while True:
+            if not proc.poll() is None:
+                break
+            print_log()
+            time.sleep(LOOP_DELTA)
+        # print left output
+        print_log()
+        wbuffile1.close()
+        wbuffile2.close()
+        rbuffile1.close()
+        rbuffile2.close()
+        os.remove(BUFFILE1)
+        os.remove(BUFFILE2)
+
+class CoreTestExecThread(threading.Thread):
+    """sdb communication for serve_forever app in async mode"""
+    def __init__(self, device_id, test_set_name, exetype, test_cases):
+        super(CoreTestExecThread, self).__init__()
+        self.test_set_name = test_set_name
+        self.cases_queue = test_cases
+        self.device_id = device_id
+        self.exetype = exetype
+        global test_server_result
+        lockobj.acquire()
+        test_server_result = {"cases":[]}
+        lockobj.release()
+
+    def set_result(self, result_data):
+        """set case result to the result buffer"""
+        if not result_data is None:
+            global test_server_result
+            lockobj.acquire()
+            test_server_result["cases"].append(result_data)
+            lockobj.release()
+
+    def run(self):
+        """run core tests"""
+        from autoexec import shell_exec
+        global test_server_status
+        if self.cases_queue is None:
+            return
+        total_count = len(self.cases_queue)
+        current_idx = 0
+        for tc in self.cases_queue:
+            current_idx += 1
+            lockobj.acquire()
+            test_server_status = {"finished": 0}
+            lockobj.release()
+            expected_result = "0"
+            core_cmd = ""
+            time_out = None
+            measures = []
+            retmeasures = []
+            if "entry" in tc:
+                core_cmd = tc["entry"]
+            else:
+                print "[ Warnning: test script is empty, please check your test xml file ]"
+                continue
+            if "expected_result" in tc:
+                expected_result = tc["expected_result"]
+            if "timeout" in tc:
+                time_out = int(tc["timeout"])
+            if "measures" in tc:
+                measures = tc["measures"]
+
+            print "\n[case] execute case:\nTestCase: %s\nTestEntry: %s\nExpected Result: %s\nTotal: %s, Current: %s" % (tc['case_id'], tc['entry'], expected_result, total_count, current_idx)
+            print "[ execute test script, this might take some time, please wait ]"
+            if self.exetype == 'auto':
+                return_code, stdout, stderr = shell_exec(
+                    core_cmd, time_out, False)
+                if return_code is not None:
+                    actual_result = str(return_code)
+                    if actual_result == "timeout":
+                        tc["result"] = "BLOCK"
+                        tc["stdout"] = "none"
+                        tc["stderr"] = "none"
+                    else:
+                        if actual_result == expected_result:
+                            tc["result"] = "pass"
+                        else:
+                            tc["result"] = "fail"
+                        tc["stdout"] = stdout
+                        tc["stderr"] = stderr
+
+                        for m in measures:
+                            ind = m['name']
+                            fname = m['file']
+                            if fname and os.path.exists(fname):
+                                try:
+                                    config = ConfigParser.ConfigParser()
+                                    config.read(fname)
+                                    m['value'] = config.get(ind, 'value')
+                                    retmeasures.append(m)
+                                except Exception, e:
+                                    print "[ Error: fail to parse performance value, error: %s ]\n" % e                        
+                        tc["measures"] = retmeasures
+                else:
+                    tc["result"] = "BLOCK"
+                    tc["stdout"] = "none"
+                    tc["stderr"] = "none"
+            elif self.exetype == 'manual':
+                # handle manual core cases
+                try:
+                    # print pre-condition info
+                    if "pre_condition" in tc:
+                        print "\n****\nPre-condition: %s\n ****\n" % tc['pre_condition']
+                    # print step info
+                    if "steps" in tc:
+                        for step in tc['steps']:
+                            print "********************\nStep Order: %s" % step['order']
+                            print "Step Desc: %s" % step['step_desc']
+                            print "Expected: %s\n********************\n" % step['expected']
+                    while True:
+                        test_result = raw_input(
+                            '[ please input case result ] (p^PASS, f^FAIL, b^BLOCK, n^Next, d^Done):')
+                        if test_result.lower() == 'p':
+                            tc["result"] = "PASS"
+                            break
+                        elif test_result.lower() == 'f':
+                            tc["result"] = "FAIL"
+                            break
+                        elif test_result.lower() == 'b':
+                            tc["result"] = "BLOCK"
+                            break
+                        elif test_result.lower() == 'n':
+                            tc["result"] = "N/A"
+                            break
+                        elif test_result.lower() == 'd':
+                            tc["result"] = "N/A"
+                            break
+                        else:
+                            print "[ Warnning: you input: '%s' is invalid, \
+                            please try again ]" % test_result
+                except Exception, error:
+                    print "[ Error: fail to get core manual test step, \
+                    error: %s ]\n" % error
+            print "Case Result: %s" % tc["result"]
+            self.set_result(tc)
+
+        lockobj.acquire()
+        test_server_status = {"finished": 1}
+        lockobj.release()
+
+class WebTestExecThread(threading.Thread):
+    """sdb communication for serve_forever app in async mode"""
+    def __init__(self, server_url, test_set_name, test_data_queue):
+        super(WebTestExecThread, self).__init__()
+        self.server_url = server_url
+        self.test_set_name = test_set_name
+        self.data_queue = test_data_queue
+        global test_server_result
+        lockobj.acquire()
+        test_server_result = {"cases":[]}
+        lockobj.release()
+
+    def set_result(self, result_data):
+        """set http result response to the result buffer"""
+        if not result_data is None:
+            global test_server_result
+            lockobj.acquire()
+            test_server_result["cases"].extend(result_data["cases"])
+            lockobj.release()
+
+    def run(self):
+        """run web tests"""
+        if self.data_queue is None:
+            return
+        global test_server_status
+        set_finished = False
+        cur_block = 0
+        err_cnt = 0
+        total_block = len(self.data_queue)
+        for test_block in self.data_queue:
+            cur_block += 1
+            ret = http_request(get_url(self.server_url, "/init_test"), "POST", test_block)
+            if ret is None or "error_code" in ret:
+                break
+
+            while True:
+                ret = http_request(get_url(self.server_url, "/check_server_status"), \
+                                   "GET", {})
+
+                if ret is None or "error_code" in ret:
+                    err_cnt += 1
+                    if err_cnt >= 10:
+                        lockobj.acquire()
+                        test_server_status = {"finished": 1}
+                        lockobj.release()
+                        break
+                elif "finished" in ret:
+                    lockobj.acquire()
+                    test_server_status = ret
+                    lockobj.release()
+                    err_cnt = 0
+                    print "[ test suite: %s, block: %d/%d , finished: %s ]" % \
+                          (self.test_set_name, cur_block, total_block, ret["finished"])
+                    ### check if current test set is finished
+                    if ret["finished"] == 1:
+                        set_finished = True
+                        ret = http_request(get_url(self.server_url, "/get_test_result"), \
+                                           "GET", {})
+                        self.set_result(ret)
+                        break
+                    ### check if current block is finished
+                    elif ret["block_finished"] == 1:
+                        ret =  http_request(get_url(self.server_url, "/get_test_result"), \
+                                            "GET", {})
+                        self.set_result(ret)
+                        break
+                time.sleep(2)
+
+            if set_finished:
+                break
+
+class HostCon:
+    """ Implementation for transfer data between Host and Tizen Mobile Device"""
+
+    def __init__(self):
+        self.__server_url = "http://127.0.0.1:8000"
+        self.__test_async_shell = None
+        self.__test_async_http = None
+        self.__test_async_core = None
+        self.__test_set_block = 100
+        self.__device_id = None
+        self.__test_type = None
+
+    def get_device_ids(self):
+        """get tizen deivce list of ids"""
+        return ['localhost']
+
+    def get_device_info(self, deviceid=None):
+        """get tizen deivce inforamtion"""
+        device_info = {}
+        resolution_str = "Empty resolution"
+        screen_size_str = "Empty screen_size"
+        device_model_str = "Empty device_model"
+        device_name_str = "Empty device_name"
+        os_version_str = ""
+
+        # get resolution and screen size
+        ret = shell_command("xrandr")
+        pattern = re.compile("connected (\d+)x(\d+).* (\d+mm) x (\d+mm)")
+        for line in ret:
+            match = pattern.search(line)
+            if match:
+                resolution_str = "%s x %s" % (match.group(1), match.group(2))
+                screen_size_str = "%s x %s" % (match.group(3), match.group(4))
+        # get architecture
+        ret = shell_command("uname -m")
+        if len(ret) > 0:
+            device_model_str = ret[0]
+        # get hostname
+        ret = shell_command("uname -n")
+        if len(ret) > 0:
+            device_name_str = ret[0]
+        # get os version
+        ret = shell_command("cat /etc/issue")
+        for line in ret:
+            if len(line) > 1:
+                os_version_str = "%s %s" % (os_version_str, line)
+        os_version_str = os_version_str[0:-1]
+        device_info["resolution"] = resolution_str
+        device_info["screen_size"] = screen_size_str
+        device_info["device_model"] = device_model_str
+        device_info["device_name"] = device_name_str
+        device_info["os_version"] = os_version_str
+        return device_info
+
+    def __init_test_stub(self, deviceid,  params):
+        """init the test runtime, mainly process the star up of test stub"""
+        result = None
+        if params is None:
+            return result
+        stub_name = ""
+        stub_server_port = "8000"
+        testsuite_name = ""
+        testsuite_id = ""
+        external_command = ""       
+        stub_name = params["stub-name"]
+        capability_opt = None
+        debug_opt = ""
+
+        if "capability" in params:
+            capability_opt = params["capability"]
+
+        if "stub-port" in params:
+            stub_server_port = params["stub-port"]
+
+        if "debug" in params:
+            bvalue = params["debug"]
+            if bvalue:
+                debug_opt = "--debug"
+           
+        if not "testsuite-name" in params:
+            print "\"testsuite-name\" is required for web tests!"
+            return result
+        else:
+            testsuite_name = params["testsuite-name"]
+        if not "external-test" in params:
+            print "\"external-test\" is required for web tests!"
+            return result
+        else:
+            external_command = params["external-test"]
+            if external_command.find("WRTLauncher") != -1:
+                external_command = "wrt-launcher"
+
+        cmd = "wrt-launcher -l | grep %s | awk '{print $NF}'" %  testsuite_name
+        ret = shell_command(cmd)
+        if len(ret) == 0:
+            print "[ test suite \"%s\" not found in device! ]" % testsuite_name
+            return result
+        else:
+            testsuite_id = ret[0].strip('\r\n')
+
+        ###kill the stub process###
+        cmd = " killall %s " % stub_name
+        ret =  shell_command(cmd)
+        print "[ waiting for kill http server ]"
+        time.sleep(3)
+
+        ###launch an new stub process###
+        session_id = str(uuid.uuid1())
+        print "[ launch the stub app ]"
+        cmdline = "%s --testsuite:%s --external-test:\"%s\" %s" % \
+                  (stub_name, testsuite_id, external_command, debug_opt)
+        self.__test_async_shell = StubExecThread(cmd=cmdline, sessionid=session_id)
+        self.__test_async_shell.start()
+        time.sleep(2)
+
+        ###check if http server is ready for data transfer### 
+        timecnt = 0
+        while timecnt < 10:
+            ret = http_request(get_url(self.__server_url, "/check_server_status"), "GET", {})
+            if ret is None:
+                print "[ check server status, not ready yet! ]"
+                time.sleep(1)
+                timecnt += 1
+            else:
+                if "error_code" in ret:
+                    print "[ check server status, get error code %d ! ]" % ret["error_code"]
+                    result = None
+                else:
+                    result = session_id
+                    print "[ check server status, get ready! ]"
+                    if capability_opt is not None:
+                        ret = http_request(get_url(self.__server_url, "/set_capability"), "POST", capability_opt)
+                break
+        return result
+
+    def init_test(self, deviceid,  params):
+        """init the test envrionment"""
+        self.__device_id = deviceid
+        if "client-command" in params and params['client-command'] is not None:
+            self.__test_type = "webapi"
+            return self.__init_test_stub(deviceid, params)
+        else:
+            self.__test_type = "coreapi"
+            return str(uuid.uuid1())
+
+    def __run_core_test(self, test_set_name, exetype, ctype, cases):
+        """
+            process the execution for core api test
+        """
+        self.__test_async_core = CoreTestExecThread(self.__device_id, test_set_name, exetype, cases)
+        self.__test_async_core.start()
+        return True
+
+    def __run_web_test(self, test_set_name, exetype, ctype, cases):
+        """
+            process the execution for web api test
+            may be splitted to serveral blocks, with the unit size defined by block_size
+        """
+        case_count = len(cases)
+        blknum = 0
+        if case_count % self.__test_set_block == 0:
+            blknum = case_count / self.__test_set_block
+        else:
+            blknum = case_count / self.__test_set_block + 1
+
+        idx = 1
+        test_set_blocks = []
+        while idx <= blknum:
+            block_data = {}
+            block_data["exetype"] = exetype
+            block_data["type"] = ctype
+            block_data["totalBlk"] = str(blknum)
+            block_data["currentBlk"] = str(idx)
+            block_data["casecount"] = str(case_count)
+            start = (idx - 1) * self.__test_set_block
+            if idx == blknum:
+                end = case_count
+            else:
+                end = idx * self.__test_set_block
+            block_data["cases"] = cases[start:end]
+            test_set_blocks.append(block_data)
+            idx += 1
+        self.__test_async_http = WebTestExecThread(self.__server_url, test_set_name, test_set_blocks)
+        self.__test_async_http.start()
+        return True
+
+    def run_test(self, sessionid, test_set):
+        """
+            process the execution for a test set
+        """
+        if sessionid is None:
+            return False
+        if not "cases" in test_set:
+            return False
+        test_set_name = os.path.split(test_set["current_set_name"])[1]
+        cases = test_set["cases"]
+        exetype = test_set["exetype"]
+        ctype = test_set["type"]
+        if self.__test_type == "webapi":
+            return self.__run_web_test(test_set_name, exetype, ctype, cases)
+        else:
+            return self.__run_core_test(test_set_name, exetype, ctype, cases)
+
+    def get_test_status(self, sessionid):
+        """poll the test task status"""
+        if sessionid is None: 
+            return None
+        result = {}
+        result["msg"] = []
+        global test_server_status
+        lockobj.acquire()
+        if "finished" in test_server_status:
+            result["finished"] = str(test_server_status["finished"])
+        else:
+            result["finished"] = "0"
+        test_server_status = {"finished": 0}
+        lockobj.release()
+
+        return result
+
+    def get_test_result(self, sessionid):
+        """get the test result for a test set """
+        result = {}
+        if sessionid is None:
+            return result
+        try:
+            global test_server_result
+            lockobj.acquire()
+            result = test_server_result
+            lockobj.release()
+        except Exception, e:
+            print e
+
+        return result
+
+    def finalize_test(self, sessionid):
+        """clear the test stub and related resources"""
+        if sessionid is None: 
+            return False
+
+        if self.__test_type == "webapi":
+            ret = http_request(get_url(self.__server_url, "/shut_down_server"), "GET", {})
+        return True
+
+testremote = HostCon()
old mode 100644 (file)
new mode 100755 (executable)
similarity index 54%
rename from Makefile.am
rename to commodule/impl/str2.py
index 1a65918..3c58d11
@@ -1,3 +1,5 @@
+#!/usr/bin/python
+#
 # Copyright (C) 2012 Intel Corporation
 # 
 # This program is free software; you can redistribute it and/or
 #              Zhang, Huihui <huihuix.zhang@intel.com>
 #              Wendong,Sui  <weidongx.sun@intel.com>
 
-SUBDIRS = doc man testkitlite web xsd
+from types import *
+import sys
+import string
+
+STRENCODE = "utf8"
+
+def str2str(s):
+    # unify str and unicode to str
+    if isinstance(s, unicode):
+        return s.encode(STRENCODE)
+    if isinstance(s, str):
+        s = filter(lambda x: x in string.printable, s)
+        return s
+    return ""
+
+def str2val(s):
+    ret = None
+    try:
+        ret = eval(str2str(s))
+    except:
+        pass
+    return ret
 
-rootdir = /opt/testkit/lite
-dist_root_DATA = ChangeLog LICENSE README TODO
+def str2bool(s):
+    if "TRUE" == str2str(s).upper():
+        return True
+    if "FALSE" == str2str(s).upper():
+        return False
+    return None
 
-scriptdir = /usr/bin
-dist_script_SCRIPTS = testkit-lite
+def str2number(s):
+    val = str2val(str2str(s))
+    if type(val) in [IntType, FloatType, LongType]:
+        return val
+    else:
+        return None
diff --git a/commodule/impl/tizenmobile.py b/commodule/impl/tizenmobile.py
new file mode 100644 (file)
index 0000000..df5b7fe
--- /dev/null
@@ -0,0 +1,658 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+#
+# Authors:
+#              Liu ChengTao <liux.chengtao@intel.com>
+
+import os
+import sys
+import time
+import socket
+import threading
+import subprocess
+import requests
+import json
+import re
+import uuid
+import ConfigParser
+
+def get_url(baseurl, api):
+    """get full url string"""
+    return "%s%s" % (baseurl, api)
+
+def http_request(url, rtype="POST", data=None):
+    """http request to the device http server"""
+    result = None
+    if rtype == "POST":
+        headers = {'content-type': 'application/json'}
+        try:
+            ret = requests.post(url, data=json.dumps(data), headers=headers)
+            if ret:
+                result = ret.json()
+        except Exception, e:
+            pass
+    elif rtype == "GET":
+        try:
+            ret = requests.get(url, params=data)
+            if ret:
+                result = ret.json()
+        except Exception, e:
+            pass
+
+    return result
+
+def shell_command(cmdline):
+    """sdb communication for quick return in sync mode"""
+    proc = subprocess.Popen(cmdline,
+                            shell=True,
+                            stdout=subprocess.PIPE,
+                            stderr=subprocess.PIPE)
+    ret1 = proc.stdout.readlines()
+    ret2 = proc.stderr.readlines()
+    result = ret1 or ret2
+    return result
+
+def get_forward_connect(device_id, remote_port=None):
+    """forward request a host port to a device-side port"""
+    if remote_port is None:
+        return None
+
+    HOST = "127.0.0.1"
+    inner_port = 9000
+    TIME_OUT = 2
+    bflag = False
+    while True:
+        sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+        sk.settimeout(TIME_OUT)
+        try:
+            sk.bind((HOST, inner_port))
+            sk.close()
+            bflag = False
+        except socket.error, e:
+            if e.errno == 98 or e.errno == 13:
+                bflag = True
+        if bflag: inner_port += 1
+        else: break
+    host_port = str(inner_port)
+    cmd = "sdb -s %s forward tcp:%s tcp:%s" % \
+          (device_id, host_port, remote_port)
+    result = shell_command(cmd)
+    url_forward = "http://%s:%s" % (HOST, host_port)
+    return url_forward
+
+
+def _download_file(deviceid, remote_path, local_path):
+    """download file from device"""
+    cmd = "sdb -s %s pull %s %s" % (deviceid, remote_path, local_path)
+    ret =  shell_command(cmd)
+    if not ret is None:
+        for l in ret:
+            if l.find("does not exist") != -1 or l.find("error:") != -1: 
+                print "[ file \"%s\" not found in device! ]" % remote_path
+                return False
+        return True
+    else:
+        return False
+
+def _upload_file(deviceid, remote_path, local_path):
+    """upload file to device"""
+    cmd = "sdb -s %s push %s %s" % (deviceid, local_path, remote_path)
+    ret =  shell_command(cmd)
+    return ret
+
+lockobj = threading.Lock()
+test_server_result = []
+test_server_status = {}
+class StubExecThread(threading.Thread):
+    """sdb communication for serve_forever app in async mode"""
+    def __init__(self, cmd=None, sessionid=None):
+        super(StubExecThread, self).__init__()
+        self.stdout = []
+        self.stderr = []
+        self.cmdline = cmd
+        self.sessionid = sessionid
+
+    def run(self):        
+        BUFFILE1 = os.path.expanduser("~") + os.sep + self.sessionid + "_stdout"
+        BUFFILE2 = os.path.expanduser("~") + os.sep + self.sessionid + "_stderr"
+
+        LOOP_DELTA = 0.2
+        wbuffile1 = file(BUFFILE1, "w")
+        wbuffile2 = file(BUFFILE2, "w")
+        rbuffile1 = file(BUFFILE1, "r")
+        rbuffile2 = file(BUFFILE2, "r")
+        proc = subprocess.Popen(self.cmdline,
+                                shell=True,
+                                stdout=wbuffile1,
+                                stderr=wbuffile2)
+        def print_log():
+            """
+            print the stdout/stderr log
+            """
+            sys.stdout.write(rbuffile1.read())
+            sys.stdout.write(rbuffile2.read())
+            sys.stdout.flush()
+
+        rbuffile1.seek(0)
+        rbuffile2.seek(0)
+        while True:
+            if not proc.poll() is None:
+                break
+            print_log()
+            time.sleep(LOOP_DELTA)
+        # print left output
+        print_log()
+        wbuffile1.close()
+        wbuffile2.close()
+        rbuffile1.close()
+        rbuffile2.close()
+        os.remove(BUFFILE1)
+        os.remove(BUFFILE2)
+
+class CoreTestExecThread(threading.Thread):
+    """sdb communication for serve_forever app in async mode"""
+    def __init__(self, device_id, test_set_name, exetype, test_cases):
+        super(CoreTestExecThread, self).__init__()
+        self.test_set_name = test_set_name
+        self.cases_queue = test_cases
+        self.device_id = device_id
+        self.exetype = exetype
+        global test_server_result
+        lockobj.acquire()
+        test_server_result = {"cases":[]}
+        lockobj.release()
+
+    def set_result(self, result_data):
+        """set case result to the result buffer"""
+        if not result_data is None:
+            global test_server_result
+            lockobj.acquire()
+            test_server_result["cases"].append(result_data)
+            lockobj.release()
+
+    def run(self):
+        """run core tests"""
+        from autoexec import shell_exec
+        global test_server_status
+        if self.cases_queue is None:
+            return
+        total_count = len(self.cases_queue)
+        current_idx = 0
+        for tc in self.cases_queue:
+            current_idx += 1
+            lockobj.acquire()
+            test_server_status = {"finished": 0}
+            lockobj.release()
+            expected_result = "0"
+            core_cmd = ""
+            time_out = None
+            measures = []
+            retmeasures = []
+            if "entry" in tc:
+                core_cmd = "sdb -s %s shell '%s ;  echo returncode=$?'" % (
+                    self.device_id, tc["entry"])
+            else:
+                print "[ Warnning: test script is empty, please check your test xml file ]"
+                continue
+            if "expected_result" in tc:
+                expected_result = tc["expected_result"]
+            if "timeout" in tc:
+                time_out = int(tc["timeout"])
+            if "measures" in tc:
+                measures = tc["measures"]
+            print "\n[case] execute case:\nTestCase: %s\nTestEntry: %s\nExpected Result: %s\nTotal: %s, Current: %s" % (tc['case_id'], tc['entry'], expected_result, total_count, current_idx)
+            print "[ execute test script, this might take some time, please wait ]"
+            if self.exetype == 'auto':
+                return_code, stdout, stderr = shell_exec(
+                    core_cmd, time_out, False)
+                if return_code is not None:
+                    actual_result = str(return_code)
+                    if actual_result == "timeout":
+                        tc["result"] = "BLOCK"
+                        tc["stdout"] = "none"
+                        tc["stderr"] = "none"
+                    else:
+                        if actual_result == expected_result:
+                            tc["result"] = "pass"
+                        else:
+                            tc["result"] = "fail"
+                        tc["stdout"] = stdout
+                        tc["stderr"] = stderr
+
+                        for m in measures:
+                            ind = m['name']
+                            fname = m['file']
+                            if fname is None: 
+                                continue
+                            tmpname = os.path.expanduser("~") + os.sep + "measure_tmp"
+                            if _download_file(self.device_id, fname, tmpname):
+                                try:
+                                    config = ConfigParser.ConfigParser()
+                                    config.read(tmpname)
+                                    m['value'] = config.get(ind, 'value')
+                                    retmeasures.append(m)
+                                    os.remove(tmpname)
+                                except Exception, e:
+                                    print "[ Error: fail to parse performance value, error: %s ]\n" % e
+                        tc["measures"] = retmeasures
+                else:
+                    tc["result"] = "BLOCK"
+                    tc["stdout"] = "none"
+                    tc["stderr"] = "none"
+            elif self.exetype == 'manual':
+                # handle manual core cases
+                try:
+                    # print pre-condition info
+                    if "pre_condition" in tc:
+                        print "\n****\nPre-condition: %s\n ****\n" % tc['pre_condition']
+                    # print step info
+                    if "steps" in tc:
+                        for step in tc['steps']:
+                            print "********************\nStep Order: %s" % step['order']
+                            print "Step Desc: %s" % step['step_desc']
+                            print "Expected: %s\n********************\n" % step['expected']
+                    while True:
+                        test_result = raw_input(
+                            '[ please input case result ] (p^PASS, f^FAIL, b^BLOCK, n^Next, d^Done):')
+                        if test_result.lower() == 'p':
+                            tc["result"] = "PASS"
+                            break
+                        elif test_result.lower() == 'f':
+                            tc["result"] = "FAIL"
+                            break
+                        elif test_result.lower() == 'b':
+                            tc["result"] = "BLOCK"
+                            break
+                        elif test_result.lower() == 'n':
+                            tc["result"] = "N/A"
+                            break
+                        elif test_result.lower() == 'd':
+                            tc["result"] = "N/A"
+                            break
+                        else:
+                            print "[ Warnning: you input: '%s' is invalid, \
+                            please try again ]" % test_result
+                except Exception, error:
+                    print "[ Error: fail to get core manual test step, \
+                    error: %s ]\n" % error
+            print "Case Result: %s" % tc["result"]
+            self.set_result(tc)
+
+        lockobj.acquire()
+        test_server_status = {"finished": 1}
+        lockobj.release()
+
+class WebTestExecThread(threading.Thread):
+    """sdb communication for serve_forever app in async mode"""
+    def __init__(self, server_url, test_set_name, test_data_queue):
+        super(WebTestExecThread, self).__init__()
+        self.server_url = server_url
+        self.test_set_name = test_set_name
+        self.data_queue = test_data_queue
+        global test_server_result
+        lockobj.acquire()
+        test_server_result = {"cases":[]}
+        lockobj.release()
+
+    def set_result(self, result_data):
+        """set http result response to the result buffer"""
+        if not result_data is None:
+            global test_server_result
+            lockobj.acquire()
+            test_server_result["cases"].extend(result_data["cases"])
+            lockobj.release()
+
+    def run(self):
+        """run web tests"""
+        if self.data_queue is None:
+            return
+        global test_server_status
+        set_finished = False
+        cur_block = 0
+        err_cnt = 0
+        total_block = len(self.data_queue)
+        for test_block in self.data_queue:
+            cur_block += 1
+            ret = http_request(get_url(self.server_url, "/init_test"), "POST", test_block)
+            if ret is None or "error_code" in ret:
+                break
+
+            while True:
+                ret = http_request(get_url(self.server_url, "/check_server_status"), \
+                                   "GET", {})
+
+                if ret is None or "error_code" in ret:
+                    err_cnt += 1
+                    if err_cnt >= 10:
+                        lockobj.acquire()
+                        test_server_status = {"finished": 1}
+                        lockobj.release()
+                        break
+                elif "finished" in ret:
+                    lockobj.acquire()
+                    test_server_status = ret
+                    lockobj.release()
+                    err_cnt = 0
+                    print "[ test suite: %s, block: %d/%d , finished: %s ]" % \
+                          (self.test_set_name, cur_block, total_block, ret["finished"])
+                    ### check if current test set is finished
+                    if ret["finished"] == 1:
+                        set_finished = True
+                        ret = http_request(get_url(self.server_url, "/get_test_result"), \
+                                           "GET", {})
+                        self.set_result(ret)
+                        break
+                    ### check if current block is finished
+                    elif ret["block_finished"] == 1:
+                        ret =  http_request(get_url(self.server_url, "/get_test_result"), \
+                                            "GET", {})
+                        self.set_result(ret)
+                        break
+                time.sleep(2)
+
+            if set_finished:
+                break
+
+class TizenMobile:
+    """ Implementation for transfer data between Host and Tizen Mobile Device"""
+
+    def __init__(self):
+        self.__forward_server_url = "http://127.0.0.1:9000"
+        self.__test_async_shell = None
+        self.__test_async_http = None
+        self.__test_async_core = None
+        self.__test_set_block = 100
+        self.__device_id = None
+        self.__test_type = None
+
+    def get_device_ids(self):
+        """get tizen deivce list of ids"""
+        result = []
+        ret = shell_command("sdb devices")
+        for line in ret:
+            if str.find(line, "\tdevice\t") != -1: 
+                result.append(line.split("\t")[0])
+        return result
+
+    def get_device_info(self, deviceid=None):
+        """get tizen deivce inforamtion"""
+        device_info = {}
+        resolution_str = "Empty resolution"
+        screen_size_str = "Empty screen_size"
+        device_model_str = "Empty device_model"
+        device_name_str = "Empty device_name"
+        os_version_str = ""
+
+        # get resolution and screen size
+        ret = shell_command("sdb -s %s shell xrandr" % deviceid)
+        pattern = re.compile("connected (\d+)x(\d+).* (\d+mm) x (\d+mm)")
+        for line in ret:
+            match = pattern.search(line)
+            if match:
+                resolution_str = "%s x %s" % (match.group(1), match.group(2))
+                screen_size_str = "%s x %s" % (match.group(3), match.group(4))
+        # get architecture
+        ret = shell_command("sdb -s %s shell uname -m" % deviceid)
+        if len(ret) > 0:
+            device_model_str = ret[0]
+        # get hostname
+        ret = shell_command("sdb -s %s shell uname -n" % deviceid)
+        if len(ret) > 0:
+            device_name_str = ret[0]
+        # get os version
+        ret = shell_command("sdb -s %s shell cat /etc/issue" % deviceid)
+        for line in ret:
+            if len(line) > 1:
+                os_version_str = "%s %s" % (os_version_str, line)
+        os_version_str = os_version_str[0:-1]
+        device_info["resolution"] = resolution_str
+        device_info["screen_size"] = screen_size_str
+        device_info["device_model"] = device_model_str
+        device_info["device_name"] = device_name_str
+        device_info["os_version"] = os_version_str
+        return device_info
+
+    def install_package(self, deviceid, pkgpath):
+        """install a package on tizen device: push package and install with shell command"""
+        filename = os.path.split(pkgpath)[1]
+        devpath = "/tmp/%s" % filename
+        cmd = "sdb -s %s push %s %s" % (deviceid, pkgpath, devpath)
+        ret =  shell_command(cmd)
+        cmd = "sdb shell rpm -ivh %s" % devpath
+        ret =  shell_command(cmd)
+        return ret
+
+    def get_installed_package(self, deviceid):
+        """get list of installed package from device"""
+        cmd = "sdb -s %s shell rpm -qa | grep tct" % (deviceid)
+        ret =  shell_command(cmd)
+        return ret
+
+    def download_file(self, deviceid, remote_path, local_path):
+        """download file from device"""
+        return _download_file(deviceid, remote_path, local_path)
+
+    def upload_file(self, deviceid, remote_path, local_path):
+        """upload file to device"""
+        return _upload_file(deviceid, remote_path, local_path)
+
+    def __init_test_stub(self, deviceid, params):
+        """init the test runtime, mainly process the star up of test stub"""
+        result = None
+        if params is None:
+            return result
+        stub_name = ""
+        stub_server_port = "8000"
+        testsuite_name = ""
+        testsuite_id = ""
+        external_command = ""
+        stub_name = params["stub-name"]
+        capability_opt = None
+        debug_opt = ""
+
+        if "capability" in params:
+            capability_opt = params["capability"]
+
+        if "stub-port" in params:
+            stub_server_port = params["stub-port"]
+
+        if "debug" in params:
+            bvalue = params["debug"]
+            if bvalue:
+                debug_opt = "--debug"
+
+        if not "testsuite-name" in params:
+            print "\"testsuite-name\" is required for web tests!"
+            return result
+        else:
+            testsuite_name = params["testsuite-name"]
+
+        if not "external-test" in params:
+            print "\"external-test\" is required for web tests!"
+            return result
+        else:
+            external_command = params["external-test"]
+            if external_command.find("WRTLauncher") != -1:
+                external_command = "wrt-launcher"
+
+        cmd = "sdb -s %s shell wrt-launcher -l | grep %s | awk '{print $NF}'" % \
+              (deviceid, testsuite_name)
+        ret = shell_command(cmd)
+        if len(ret) == 0:
+            print "[ test suite \"%s\" not found in device! ]" % testsuite_name
+            return result
+        else:
+            testsuite_id = ret[0].strip('\r\n')
+
+        ###kill the stub process###
+        cmd = "sdb shell killall %s " % stub_name
+        ret =  shell_command(cmd)
+        print "[ waiting for kill http server ]"
+        time.sleep(3)
+
+        ###set forward between host and device###        
+        self.__forward_server_url = get_forward_connect(deviceid, stub_server_port)
+        print "[ forward server %s ]" % self.__forward_server_url
+
+        ###launch an new stub process###
+        session_id = str(uuid.uuid1())
+        print "[ launch the stub app ]"
+        stub_entry = "%s --testsuite:%s --external-test:%s %s" % \
+                     (stub_name, testsuite_id, external_command, debug_opt)
+        cmdline = "sdb -s %s shell %s" % (deviceid, stub_entry)
+        
+        self.__test_async_shell = StubExecThread(cmd=cmdline, sessionid=session_id)
+        self.__test_async_shell.start()
+
+        print "[ launch the tiny web app ]"
+        tinycmd = 'sdb -s %s shell tinyweb -listening_ports 80,8080 -document_root /&' % deviceid
+        self.__test_async_tiny = StubExecThread(cmd=tinycmd, sessionid=str(session_id+'_tiny'))
+        self.__test_async_tiny.start()
+
+        time.sleep(2)
+
+        ###check if http server is ready for data transfer### 
+        timecnt = 0
+        while timecnt < 10:
+            ret = http_request(get_url(self.__forward_server_url, "/check_server_status"), "GET", {})
+            if ret is None:
+                print "[ check server status, not ready yet! ]"
+                time.sleep(1)
+                timecnt += 1
+            else:
+                if "error_code" in ret:
+                    print "[ check server status, get error code %d ! ]" % ret["error_code"]
+                    result = None
+                else:
+                    result = session_id
+                    print "[ check server status, get ready! ]"
+                    if capability_opt is not None:
+                        ret = http_request(get_url(self.__forward_server_url, "/set_capability"), "POST", capability_opt)
+                break
+        return result
+
+    def init_test(self, deviceid, params):
+        """init the test envrionment"""
+        self.__device_id = deviceid
+        if "client-command" in params and params['client-command'] is not None:
+            self.__test_type = "webapi"
+            return self.__init_test_stub(deviceid, params)
+        else:
+            self.__test_type = "coreapi"
+            return str(uuid.uuid1())
+
+    def __run_core_test(self, test_set_name, exetype, ctype, cases):
+        """
+            process the execution for core api test
+        """
+        self.__test_async_core = CoreTestExecThread(self.__device_id, test_set_name, exetype, cases)
+        self.__test_async_core.start()
+        return True
+
+    def __run_web_test(self, test_set_name, exetype, ctype, cases):
+        """
+            process the execution for web api test
+            may be splitted to serveral blocks, with the unit size defined by block_size
+        """
+        case_count = len(cases)
+        blknum = 0
+        if case_count % self.__test_set_block == 0:
+            blknum = case_count / self.__test_set_block
+        else:
+            blknum = case_count / self.__test_set_block + 1
+
+        idx = 1
+        test_set_blocks = []
+        while idx <= blknum:
+            block_data = {}
+            block_data["exetype"] = exetype
+            block_data["type"] = ctype
+            block_data["totalBlk"] = str(blknum)
+            block_data["currentBlk"] = str(idx)
+            block_data["casecount"] = str(case_count)
+            start = (idx - 1) * self.__test_set_block
+            if idx == blknum:
+                end = case_count
+            else:
+                end = idx * self.__test_set_block
+            block_data["cases"] = cases[start:end]
+            test_set_blocks.append(block_data)
+            idx += 1
+        self.__test_async_http = WebTestExecThread(self.__forward_server_url, test_set_name, test_set_blocks)
+        self.__test_async_http.start()
+        return True
+
+    def run_test(self, sessionid, test_set):
+        """
+            process the execution for a test set
+        """
+        if sessionid is None:
+            return False
+        if not "cases" in test_set:
+            return False
+        test_set_name = os.path.split(test_set["current_set_name"])[1]
+        cases = test_set["cases"]
+        exetype = test_set["exetype"]
+        ctype = test_set["type"]
+        if self.__test_type == "webapi":
+            return self.__run_web_test(test_set_name, exetype, ctype, cases)
+        else:
+            return self.__run_core_test(test_set_name, exetype, ctype, cases)
+
+    def get_test_status(self, sessionid):
+        """poll the test task status"""
+        if sessionid is None: 
+            return None
+        result = {}
+        result["msg"] = []
+        global test_server_status
+        lockobj.acquire()
+        if "finished" in test_server_status:
+            result["finished"] = str(test_server_status["finished"])
+        else:
+            result["finished"] = "0"
+        test_server_status = {"finished": 0}
+        lockobj.release()
+
+        return result
+
+    def get_test_result(self, sessionid):
+        """get the test result for a test set """
+        result = {}
+        if sessionid is None:
+            return result
+        try:
+            global test_server_result
+            lockobj.acquire()
+            result = test_server_result
+            lockobj.release()
+        except Exception, e:
+            print e
+
+        return result
+
+    def finalize_test(self, sessionid):
+        """clear the test stub and related resources"""
+        if sessionid is None: 
+            return False
+
+        if self.__test_type == "webapi":
+            ret = http_request(get_url(self.__forward_server_url, "/shut_down_server"), "GET", {})
+        return True
+
+testremote = TizenMobile()
diff --git a/commodule/log.py b/commodule/log.py
new file mode 100644 (file)
index 0000000..bff9fac
--- /dev/null
@@ -0,0 +1,85 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2013 Intel Corporation
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+#
+# Authors:
+#              Liu,chengtao <liux.chengtao@intel.com>
+
+
+import logging,time,os,threading,sys
+import logging.handlers
+
+#logger levels
+LEVELS={"CRITICAL" : 50,
+        "ERROR"    : 40,
+        "WARNING"  : 30,
+        "INFO"     : 20,
+        "DEBUG"    : 10,
+        "NOTSET"   : 0
+       } 
+
+class Logger:
+    '''Logger'''
+    _instance=None
+    _mutex=threading.Lock()
+
+    def __init__(self, level="DEBUG"):
+        '''Generate root logger'''
+        self._logger = logging.getLogger("TCT")
+        self._logger.setLevel(LEVELS[level])
+        self._formatter = logging.Formatter("%(message)s")
+        self.add_print_logger()
+
+    def add_print_logger(self, level="INFO"):
+        '''Generate console writer [StreamHandler]'''
+        ch = logging.StreamHandler()
+        ch.setLevel(LEVELS[level])
+        ch.setFormatter(self._formatter)
+        self._logger.addHandler(ch)
+
+    @staticmethod
+    def getLogger(level="DEBUG"):
+        if(Logger._instance==None):
+            Logger._mutex.acquire()
+            if(Logger._instance==None):
+                Logger._instance=Logger(level)
+            else:
+                pass
+            Logger._mutex.release()
+        else:
+            pass
+        return Logger._instance
+
+    def debug(self,msg):
+        if msg is not None:
+            self._logger.debug(msg)
+
+    def info(self,msg):
+        if msg is not None:
+            self._logger.info(msg)
+
+    def warning(self,msg):
+        if msg is not None:
+            self._logger.warning(msg)
+
+    def error(self,msg):
+        if msg is not None:
+            self._logger.error(msg)
+
+    def critical(self,msg):
+        if msg is not None:
+            self._logger.critical(msg)
diff --git a/configure.ac b/configure.ac
deleted file mode 100644 (file)
index e04ff99..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright (C) 2012 Intel Corporation
-# 
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-#
-# Authors:
-#              Zhang, Huihui <huihuix.zhang@intel.com>
-#              Wendong,Sui  <weidongx.sun@intel.com>
-
-AC_INIT([testkit-lite], [2.3.0], [huihuix.zhang@intel.com])
-AM_INIT_AUTOMAKE([-Wall -Werror foreign])
-
-# Checks for programs.
-AC_PROG_CC
-
-AC_CONFIG_FILES([
-Makefile
-doc/Makefile
-man/Makefile
-testkitlite/Makefile
-testkitlite/common/Makefile
-testkitlite/engines/Makefile
-testkitlite/engines/default/Makefile
-web/Makefile
-xsd/Makefile
-])
-AC_OUTPUT
diff --git a/debian/changelog b/debian/changelog
new file mode 100644 (file)
index 0000000..10ce64a
--- /dev/null
@@ -0,0 +1,5 @@
+testkit-lite (2.3.4) unstable; urgency=low
+
+  * TCT2.1 Release.
+
+ -- Cathy Shen <cathy.shen@intel.com>  Fri, 29 Mar 2013 11:13:11 +0800
diff --git a/debian/compat b/debian/compat
new file mode 100644 (file)
index 0000000..45a4fb7
--- /dev/null
@@ -0,0 +1 @@
+8
diff --git a/debian/control b/debian/control
new file mode 100644 (file)
index 0000000..a30c031
--- /dev/null
@@ -0,0 +1,16 @@
+Source: testkit-lite
+Section: utils
+Priority: standard
+Maintainer: Cathy Shen <cathy.shen@intel.com>
+Build-Depends: debhelper (>= 8.0.0), python-setuptools, python-support (>= 0.8.4)
+Standards-Version: 3.9.3
+Homepage: https://github.com/testkit/testkit-lite
+#Vcs-Git: git://git.debian.org/collab-maint/testkit-manager.git
+#Vcs-Browser: http://git.debian.org/?p=collab-maint/testkit-manager.git;a=summary
+
+Package: testkit-lite
+Architecture: all
+Depends: ${misc:Depends}, ${python:Depends}
+XB-Python-Version: ${python:Versions}
+Description: Test runner for test execution.
+
diff --git a/debian/copyright b/debian/copyright
new file mode 100644 (file)
index 0000000..71edd1c
--- /dev/null
@@ -0,0 +1,27 @@
+Format: http://dep.debian.net/deps/dep5
+Source: https://github.com/testkit/testkit-lite
+
+Files: *
+Copyright: 2012-2013 Intel Corp. 
+License: GPL-2.0
+
+Files: debian/*
+Copyright: 2012-2013 Intel Corp.
+License: GPL-2.0
+
+License: GPL-2.0
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License
+ .
+ This package is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ .
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ .
+ On Debian systems, the complete text of the GNU General
+ Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".
+
diff --git a/debian/docs b/debian/docs
new file mode 100644 (file)
index 0000000..e845566
--- /dev/null
@@ -0,0 +1 @@
+README
diff --git a/debian/files b/debian/files
new file mode 100644 (file)
index 0000000..b4ecbc0
--- /dev/null
@@ -0,0 +1 @@
+testkit-lite_2.3.4_all.deb utils standard
diff --git a/debian/postinst b/debian/postinst
new file mode 100644 (file)
index 0000000..31e0101
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+# Set permissions
+chmod ugo+rwx /opt/testkit/lite
+
diff --git a/debian/rules b/debian/rules
new file mode 100755 (executable)
index 0000000..abde6ef
--- /dev/null
@@ -0,0 +1,5 @@
+#!/usr/bin/make -f
+
+%:
+       dh $@
+
diff --git a/doc/Testkit-Lite_Quick_Start.pdf b/doc/Testkit-Lite_Quick_Start.pdf
deleted file mode 100644 (file)
index e9dd7e4..0000000
Binary files a/doc/Testkit-Lite_Quick_Start.pdf and /dev/null differ
index 9880873..d1284c7 100644 (file)
Binary files a/doc/Testkit-Lite_User_Guide.pdf and b/doc/Testkit-Lite_User_Guide.pdf differ
diff --git a/man/testkit-lite.1 b/man/testkit-lite.1
deleted file mode 100644 (file)
index 31a71c0..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-    Installation:
-    =================
-   
-    Before installation, please make sure basic packages of python have been installed;
-    
-        Build RPM from source code: 
-            ./pack.sh
-            
-        Install testkit-lite RPM:
-            rpm -ivh testkit-lite-x.x.x-x.noarch.rpm
-            
-            if your system doesn't support 'rpm -ivh', you can install it as follows:
-                1): Copy 'testkit-lite-x.x.x-x.noarch.rpm' to <somewhere>
-                2): Execute 'rpm2cpio <somewhere>/testkit-lite-x.x.x-x.noarch.rpm | cpio Â¨Cidmv'
-                3): Execute 'cp -r <somewhere>/usr/* /usr/'
-                4): Execute 'cp -r <somewhere>/opt/* /opt/'
-
-    Quick Start:
-    =================
-    
-    At first, prepare one tests.xml file aligned with schema files: /opt/testkit/lite/xsd/testdefinition-syntax.xsd.
-    
-    And then,
-    
-        1) You can select on parser engine to simply conduct one or more tests.xml:
-            testkit-lite -f <somewhere>/tests.xml
-            
-        2) If you just want to get the statistic (such as the testcase number or the structure), dryrun could help:
-            testkit-lite -f tests.xml -D
-            
-        3) If you want to execute both auto and manual tests:
-            testkit-lite -f tests.xml
-            
-        4) If you just want to execute manual tests:
-            testkit-lite -f tests.xml -M
-            
-        5) If you just want to execute auto tests:
-            testkit-lite -f tests.xml -A
-            
-        6) If you want to save test result to another file, by default it'll be under /opt/testkit/lite/latest:
-            testkit-lite -f tests.xml -o <somewhere>
-            
-        7) If you want to choose some filters:
-            testkit-lite -f tests.xml --status level1 --type type1 ...
-            
-        8) If you want to run Web API test:
-            testkit-lite -f /usr/share/webapi-webkit-tests/tests.xml -e "WRTLauncher webapi-webkit-tests" -o /tmp/wekit-tests-result.xml
-            
-        9) If you want to run Web API test in full screen mode:
-            testkit-lite -f /usr/share/webapi-webkit-tests/tests.xml -e "WRTLauncher webapi-webkit-tests" -o /tmp/wekit-tests-result.xml --fullscreen
-            
-        10) At last, you can freely compose the above parameters together:
-             testkit-lite -f <somewhere1>/tests.xml <somewhere2>/tests.xml -A --priority P1 --type type1 ...
-
-    Get Results:
-    =================
-    
-    Test report will be generated as bellow:
-        tests.result.xml
-            xml result files aligned with schema files: /opt/testkit/lite/xsd/
-        example: <ignore>
-        
-    The result will be under /opt/testkit/lite/latest after execution, you can also check the history results in /opt/testkit/lite/yyyy-mm-dd-HH:MM:SS.NNNNNN.
-
-    View Results:
-    =================
-    
-    Test report can be viewed in HTML format, so the data in the xml result file looks more human friendly.
-    
-    Please follow the following steps to view test report:
-        1) copy files: application.js back_top.png jquery.min.js testresult.xsl tests.css under directory /opt/testkit/lite/xsd/
-        2) put the files from step 1) under the same directory as the xml result file
-        3) open xml result file with a web browser(IE, Chrome or Firefox)
-
-    Notes:
-    =================
-    
-    1) One testxml should contains only one <suite> tag, multiple tags are not supported
-    2) testkit-lite's TestLog is stored to /opt/testkit/lite/latest
-    3) testkit-lite enables both automatic and manual tests by default
-    4) Obviously -A and -M are conflict options
-    5) -e option does not support -D mode
-    6) The test cases' order in the result files might be arbitrary, when running same tests.xml with same options. This is caused by python's API 'getiterator' from module 'xml.etree.ElementTree'
-    7) run command 'testkit-lite', it might not be able to locate module 'testkitlite.engines.default.runner', run command 'export PYTHONPATH=/usr/lib/python2.7/site-packages' to resolve this issue
-
-    Known Issues:
-    =================
-    
-    1) testkit-lite might crash when running test package which contains more than 1000 test cases on portable devices(launch box, PR3)
-     workaround for 1): Split the test package's xml into smaller xml files, which contain less than 1000 test cases. And run them one by one
-
-    Detail Options:
-    =================
-    Options:
-
-      Common options:
-        -f, --testxml             Specify the test.xml. If run more the one testxml, just list them all and separate with a whitespace
-        -D, --dryrun              Dry-run the selected test cases
-        -A, --auto-only           Enable only auto tests
-        -M, --manual-only         Enable only manual tests
-        -E  <engine name>         Specify a test engine
-        -o RESULTFILE, --output=RESULTFILE
-                                  Specify output file for result xml. If more than one testxml provided, results will be merged together to this output file
-        -e                        Launch external test with an executable file
-        --fullscreen              Run Web API test in full screen mode
-        --non-active              Disable the ability to set the result of core manual cases from the console
-        --enable-memory-collection
-                                  Enable the ability to release memory when the free memory is less than 100M
-        --version                 Show version information
-        -h, --help                Show this help message and exit
-
-      Filters options:
-        All filters options are multiple-valued and optional
-         --suite                  Select the specified white-rules
-         --set                    Select the specified white-rules
-         --id                     Select the specified white-rules
-         --component              Select the specified white-rules
-         --status                 Select the specified white-rules
-         --type                   Select the specified white-rules
-         --priority               Select the specified white-rules
-         --category               Select the specified white-rules
-
-    Examples:
-    =================
-    
-    run a webapi package:
-      1) testkit-lite -f /usr/share/webapi-webkit-tests/tests.xml -e 'WRTLauncher webapi-webkit-tests' -o /tmp/wekit-tests-result.xml --priority P0 --status ready
-    run both core and webapi packages:
-      2) testkit-lite -f /usr/share/webapi-webkit-tests/tests.xml /usr/share/tts-bluez-tests/tests.xml -e 'WRTLauncher webapi-webkit-tests' -o /tmp/wekit-tests-result.xml
diff --git a/pack.sh b/pack.sh
deleted file mode 100755 (executable)
index 93318d1..0000000
--- a/pack.sh
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/bin/bash
-#
-# Copyright (C) 2012 Intel Corporation
-# 
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-#
-# Authors:
-#              Zhang, Huihui <huihuix.zhang@intel.com>
-#              Wendong,Sui  <weidongx.sun@intel.com>
-
-
-# parse spec required name
-NAME=`grep "Name:" testkit-lite.spec | awk '{print $2}'`
-if [ -z "$NAME" ];then
-       echo "Name not specified in spec file"
-       exit 1
-fi
-
-# parse spec required version
-VERSION=`grep "Version:" testkit-lite.spec | awk '{print $2}'`
-if [ -z "$VERSION" ];then
-       echo "Version not specified in spec file"
-       exit 1
-fi
-
-SRC_ROOT=${PWD}
-RPM_ROOT=/tmp/${NAME}_pack
-ARCHIVE_TYPE=tar.gz    #tar.gz2
-ARCHIVE_OPTION=czvf    #czvf
-
-# check precondition
-check_precondition()
-{
-       which $1 > /dev/null 2>&1
-       if [ $? -ne 0 ]; then
-               echo "Error: no tool: $1"
-               exit 1
-       fi
-}
-check_precondition rpmbuild
-check_precondition make
-
-# clean
-echo "cleaning rpm workspace... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
-rm -rf $RPM_ROOT
-
-# create workspace
-echo "create rpm workspace... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
-mkdir -p $RPM_ROOT/RPMS $RPM_ROOT/SRPMS $RPM_ROOT/SPECS $RPM_ROOT/SOURCES $RPM_ROOT/BUILD $RPM_ROOT/src_tmp/$NAME-$VERSION
-
-# prepare
-echo "prepare workspace... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
-rm -rf *.rpm *.tar.bz2 *.tar.gz
-cp -a $SRC_ROOT/* $RPM_ROOT/src_tmp/$NAME-$VERSION
-# create Makefile in top src folder
-#cp $SRC_ROOT/top_Makefile $RPM_ROOT/src_tmp/$NAME-$VERSION/Makefile
-cp $PWD/testkit-lite.spec $RPM_ROOT/SPECS
-cd $RPM_ROOT/src_tmp
-tar $ARCHIVE_OPTION $RPM_ROOT/SOURCES/$NAME-$VERSION.$ARCHIVE_TYPE $NAME-$VERSION
-cd -
-
-# build
-echo "build from workspace... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
-cd  $RPM_ROOT/SPECS
-rpmbuild -ba testkit-lite.spec --clean --define "_topdir $RPM_ROOT" --target=noarch
-cd -
-
-# copy rpm
-echo "copy from workspace... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
-echo "get rpm packages......"
-find $RPM_ROOT -name "$NAME*.rpm" | grep -v debuginfo | xargs -n1 -I {} mv {} $PWD -f
-echo "get $NAME-$VERSION.$ARCHIVE_TYPE......"
-mv $RPM_ROOT/SOURCES/$NAME-$VERSION.$ARCHIVE_TYPE $PWD -f
-
-# clean
-echo "cleaning rpm workspace... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
-#rm -rf $RPM_ROOT
-
-# validate
-echo "checking result... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
-if [ -z "`ls | grep "\.rpm"`" ] || [ -z "`ls | grep "\.$ARCHIVE_TYPE"`" ];then
-       echo "------------------------------ FAILED to build $NAME RPM packages --------------------------"
-       exit 1
-else
-       echo "------------------------------ Done to build $NAME RPM packages --------------------------"
-       ls *.rpm *.$ARCHIVE_TYPE 2>/dev/null
-fi
diff --git a/packaging/Makefile b/packaging/Makefile
new file mode 100644 (file)
index 0000000..24da850
--- /dev/null
@@ -0,0 +1,21 @@
+PKG_NAME := testkit-lite
+SPECFILE = $(addsuffix .spec, $(PKG_NAME))
+PKG_VERSION := $(shell grep '^Version: ' $(SPECFILE)|awk '{print $$2}')
+
+TARBALL := $(PKG_NAME)_$(PKG_VERSION).tar.gz
+
+dsc: $(TARBALL)
+               $(eval MD5=$(shell md5sum $(TARBALL) | sed "s/  / $(shell stat -c '%s' $(TARBALL)) /"))
+                       @sed  -i 's/^Version:.*/Version: $(PKG_VERSION)/' $(PKG_NAME).dsc
+                       @sed  -i 's/ [a-f0-9]\+ [0-9]\+ $(PKG_NAME).*tar.*/ $(MD5)/' $(PKG_NAME).dsc
+
+$(TARBALL):
+               cd "$$(git rev-parse --show-toplevel)" \
+                       && git archive --prefix $(PKG_NAME)-$(PKG_VERSION)/ HEAD \
+                       | gzip > "$(CURDIR)/$(TARBALL)"
+
+clean:
+               rm -f $(PKG_NAME)*.tar.gz
+
+all: clean dsc
+
diff --git a/packaging/testkit-lite.dsc b/packaging/testkit-lite.dsc
new file mode 100644 (file)
index 0000000..bc65561
--- /dev/null
@@ -0,0 +1,11 @@
+Source: testkit-lite
+Section: utils
+Priority: standard
+Maintainer: Lei Yang <lei.a.yang@intel.com>
+Build-Depends: debhelper (>= 8.0.0), python-setuptools, python-support (>= 0.8.4)
+Standards-Version: 3.9.2
+Homepage: https://github.com/testkit/testkit-manager
+Version: 2.3.4
+Files:
+ 82c2118d146839ec9139559f5049d2bf 6361871 testkit-lite_2.3.4.tar.gz
+
diff --git a/packaging/testkit-lite.spec b/packaging/testkit-lite.spec
new file mode 100644 (file)
index 0000000..14b993d
--- /dev/null
@@ -0,0 +1,47 @@
+Summary: TCT-Lite
+Name: testkit-lite
+Version: 2.3.4
+Release: 1
+License: GPLv2
+Group: Applications/System
+Source: %{name}_%{version}.tar.gz
+
+BuildRequires: python-distribute
+
+%{!?python_sitelib: %define python_sitelib %(python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")}
+
+%description
+testkit-lite is a test runner with command-line interface.It has the following functions 
+1. Accepts .xml test case descriptor files as input. 
+2. drives automatic test execution. 
+3. provide multiple options to meet various test requirements. 
+
+%prep
+%setup -q
+
+%build
+
+%install
+python setup.py install --prefix=%{_prefix} --root=%{buildroot}
+# remove tests
+rm -rf %{buildroot}/%{python_sitelib}/tests
+
+%clean
+rm -rf %{buildroot}
+
+%post
+# Set permissions
+chmod ugo+rwx /opt/testkit/lite
+
+%files
+%{python_sitelib}/testkitlite/*
+%{python_sitelib}/commodule/*
+%{python_sitelib}/testkit_lite-*.egg-info/*
+/opt/testkit/lite/VERSION
+%{_bindir}/testkit-lite
+%defattr(-,root,root)
+
+%doc
+/opt/testkit/lite/Testkit-Lite_User_Guide.pdf
+
+%changelog
diff --git a/setup.py b/setup.py
new file mode 100644 (file)
index 0000000..d5ff245
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,17 @@
+#!/usr/bin/python
+
+from setuptools import setup, find_packages
+
+setup(
+    name = "testkit-lite",
+    description = "Test runner for test execution",
+    url = "https://github.com/testkit/testkit-lite",
+    author = "Cathy Shen",
+    author_email = "cathy.shen@intel.com",
+    version = "2.3.4",
+    include_package_data = True,
+    data_files = [('/opt/testkit/lite/',
+                 ('VERSION', 'doc/Testkit-Lite_User_Guide.pdf'))],
+    scripts = ('testkit-lite',),
+    packages = find_packages(),
+)
index 15ddbd5..5e668c7 100755 (executable)
@@ -1,7 +1,7 @@
 #!/usr/bin/python
 #
 # Copyright (C) 2012 Intel Corporation
-# 
+#
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
 # as published by the Free Software Foundation; either version 2
 #
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+# USA.
 #
 # Authors:
 #              Zhang, Huihui <huihuix.zhang@intel.com>
 #              Wendong,Sui  <weidongx.sun@intel.com>
+#              Yuanyuan,Zou  <zouyuanx@intel.com>
+""" testkit lite tools"""
 
 import os
-import re
 import sys
-import time
+import traceback
 import platform
-import ctypes
+import ConfigParser
 import xml.etree.ElementTree as etree
-from optparse import *
-from shutil import copyfile
-from tempfile import mktemp 
+from optparse import OptionParser, make_option
 from datetime import datetime
+
+# check if '/usr/lib/python2.7/dist-packages' in sys path
+if '/usr/lib/python2.7/dist-packages' not in sys.path:
+    sys.path.append('/usr/lib/python2.7/dist-packages/')
+if '/usr/share/pyshared' not in sys.path:
+    sys.path.append('/usr/share/pyshared/')
 try:
-    exec "from testkitlite.common.killall import killall"
+    from testkitlite.common.process_killall import kill_testkit_lite
 except ImportError, e:
     print "[ Error: loading module killall failed, error: %s ]\n" % e
-    print "try to run command 'export PYTHONPATH=/usr/lib/python2.7/site-packages' to resolve this issue"
+    print "try to run command 'export PYTHONPATH=/usr/lib/python2.7/dist-packages' to resolve this issue"
     sys.exit(1)
 
-_j = os.path.join
-_e = os.path.exists
-_d = os.path.dirname
-_b = os.path.basename
-_abspath = os.path.abspath
 
-testkit_dir = "/opt/testkit/lite"
+JOIN = os.path.join
+EXISTS = os.path.exists
+DIRNAME = os.path.dirname
+BASENAME = os.path.basename
+ABSPATH = os.path.abspath
+
+TESTKIT_DIR = "/opt/testkit/lite"
 if not platform.system() == "Linux":
-    testkit_dir = _d(_abspath(__file__))
-    sys.path += [_j(testkit_dir)]
-    testkit_dir = _j(testkit_dir , "results")
+    TESTKIT_DIR = DIRNAME(ABSPATH(__file__))
+    sys.path += [JOIN(TESTKIT_DIR)]
+    TESTKIT_DIR = JOIN(TESTKIT_DIR, "results")
 
-LOG_DIR = testkit_dir
-PID_FILE = _j(LOG_DIR , "pid.log")
+LOG_DIR = TESTKIT_DIR
+PID_FILE = JOIN(LOG_DIR, "pid.log")
+TEST_PACKAGES_DIR = JOIN(TESTKIT_DIR, "test_packages")
 COMMON_FILTERS = {
-        "suite":          [],
-        "set":            [],
-        "id":             [],
-        "type":           [],
-        "priority":       [],
-        "category":       [],
-        "status":         [],
-        "component":      []}
+    "suite": [],
+    "set": [],
+    "id": [],
+    "type": [],
+    "priority": [],
+    "category": [],
+    "status": [],
+    "component": []}
 
 # start testkit-lite in Singleton mode
 try:
-    with open(PID_FILE, "r") as fd:
-        pid = fd.readline().rstrip("\n")
-        if pid:
-            killall(pid)
+    kill_testkit_lite(PID_FILE)
 except Exception, e:
-    pattern = re.compile('No such file or directory|No such process')
-    match = pattern.search(str(e))
-    if not match:
-        print "[ Error: fail to kill existing testkit-lite, error: %s ]\n" % e
+    print "[ Error: fail to kill existing testkit-lite, error: %s ]\n" % e
 
 if not platform.system() == "Linux":
     try:
         if not os.path.exists(LOG_DIR):
             os.makedirs(LOG_DIR)
-    except Exception, e:
-        print "[ Error: create results directory: %s failed, error: %s ]\n" % (LOG_DIR, e)
+    except OSError, e:
+        print "[ Error: create results directory: %s failed, \
+        error: %s ]\n" % (LOG_DIR, e)
 
 try:
     with open(PID_FILE, "w") as fd:
-        pid = str(os.getpid())
-        fd.writelines(pid + '\n')
-except Exception, e:
-    print "[ Error: can't create pid log file: %s, error: %s ]\n" % (PID_FILE, e)
+        PID = str(os.getpid())
+        fd.writelines(PID + '\n')
+except OSError, e:
+    print "[ Error: can't create pid log file: %s, \
+    error: %s ]\n" % (PID_FILE, e)
     sys.exit(1)
 
 try:
     os.chmod(PID_FILE, 0666)
-except Exception, e:
+except OSError, e:
     pass
 
+try:
+    if not EXISTS(TEST_PACKAGES_DIR):
+        os.makedirs(TEST_PACKAGES_DIR)
+except OSError, e:
+    print "[ Error: can't create test package directory: %s, \
+    error: %s ]\n" % (TEST_PACKAGES_DIR, e)
+    sys.exit(1)
+
 # detect version option
 if "--version" in sys.argv:
-    print "[ testkit-lite v2.3.0-2 ]"
+    try:
+        CONFIG = ConfigParser.ConfigParser()
+        if platform.system() == "Linux":
+            CONFIG.read('/opt/testkit/lite/VERSION')
+        else:
+            VERSION_FILE = os.path.join(sys.path[0], 'VERSION')
+            CONFIG.read(VERSION_FILE)
+        VERSION = CONFIG.get('public_version', 'version')
+        print "V%s" % VERSION
+    except Exception, e:
+        print "[ Error: fail to parse version info, error: %s ]\n" % e
     sys.exit(1)
 
-# get test engine, now we only got default engine
-if "-E" in sys.argv:
-    index = sys.argv.index("-E")
+# detect internal version option
+if "--internal-version" in sys.argv:
     try:
-        engine = sys.argv[index + 1]
-        engine = str(engine.strip()).lower()
-    except IndexError:
-        engine = "default"
-else:
-    engine = "default"
+        CONFIG = ConfigParser.ConfigParser()
+        if platform.system() == "Linux":
+            CONFIG.read('/opt/testkit/lite/VERSION')
+        else:
+            VERSION_FILE = os.path.join(sys.path[0], 'VERSION')
+            CONFIG.read(VERSION_FILE)
+        VERSION = CONFIG.get('internal_version', 'version')
+        print VERSION
+    except Exception, e:
+        print "[ Error: fail to parse version info, error: %s ]\n" % e
+    sys.exit(1)
+
 
 # init test engine here
 try:
-    exec "from testkitlite.engines.%s.runner import TRunner" % engine
-    print "[ loading %s test engine ]" % engine
+    from testkitlite.engines.default.runner import TRunner
+    from commodule.connector import Connector
 except ImportError, e:
-    print "[ Error: loading test engine: %s failed, error: %s ]\n" % (engine, e)
-    print "try to run command 'export PYTHONPATH=/usr/lib/python2.7/site-packages' to resolve this issue"
+    print "[ Error: loading test engine failed, error: %s ]\n" % e
+    print "try to run command \
+    'export PYTHONPATH=/usr/lib/python2.7/dist-packages' to resolve this issue"
     sys.exit(1)
 
+
 def varnarg(option, opt_str, value, parser):
+    """ parser srg"""
     value = []
     import re
     for arg in parser.rargs:
         if re.search('^--.+', arg) or \
-           re.search('^-[\D]', arg):
+                re.search('^-[\D]', arg):
             break
         value.append(arg)
-        
+
     del parser.rargs[:len(value)]
     setattr(parser.values, option.dest, value)
 
 try:
     option_list = [
-                    make_option("-f", "--testxml", dest="testxml",
-                                action="callback", callback=varnarg,
-                                help="Specify the test.xml. If run more the one testxml, just list them all and separate with a whitespace"),
-                    make_option("-D", "--dryrun", dest="bdryrun",
-                                action="store_true",
-                                help="Dry-run the selected test cases"),
-                    make_option("-M", "--manual-only", dest="bmanualonly",
-                                action="store_true",
-                                help="Enable only manual tests"),
-                    make_option("-A", "--auto-only", dest="bautoonly",
-                                action="store_true",
-                                help="Enable only auto tests"),
-                    make_option("-o", "--output", dest="resultfile",
-                                help="Specify output file for result xml. If more than one testxml provided, results will be merged together to this output file"),
-                    make_option("-E", dest="engine", help="Specific test engine"),
-                    make_option("-e", dest="exttest", action="store",
-                                help="Launch external test with an executable file"),
-                    make_option("--fullscreen", dest="fullscreen", action="store_true",
-                                help="Run web API test in full screen mode"),
-                    make_option("--non-active", dest="non_active", action="store_true",
-                                help="Disable the ability to set the result of core manual cases from the console"),
-                    make_option("--enable-memory-collection", dest="enable_memory_collection", action="store_true",
-                                help="Enable the ability to release memory when the free memory is less than 100M"),
-                    make_option("--version", dest="version_info", action="store_true",
-                                help="Show version information"),
-                  ]
-    
-    option_list.extend(map(lambda flt: \
-                    make_option("--%s" % flt, dest="w%s" % flt, \
-                                action="callback", callback=varnarg, \
-                                help="Select the specified filter-rules : %s" % flt), COMMON_FILTERS))
+        make_option("-f", "--testxml", dest="testxml",
+                    action="callback", callback=varnarg,
+                    help="Specify the test.xml.If run more the one testxml,just list them all and separate with a whitespace"),
+        make_option("-D", "--dryrun", dest="bdryrun",
+                    action="store_true",
+                    help="Dry-run the selected test cases"),
+        make_option("-M", "--manual-only", dest="bmanualonly",
+                    action="store_true",
+                    help="Enable only manual tests"),
+        make_option("-A", "--auto-only", dest="bautoonly",
+                    action="store_true",
+                    help="Enable only auto tests"),
+        make_option("-o", "--output", dest="resultfile",
+                    help="Specify output file for result xml. \
+                    If more than one testxml provided, \
+                    results will be merged together to this output file"),
+        make_option("-e", dest="exttest", action="store",
+                    help="Launch external test with an executable file"),
+        make_option("--fullscreen", dest="fullscreen",
+                    action="store_true",
+                    help="Run web API test in full screen mode"),
+        make_option("--non-active", dest="non_active",
+                    action="store_true",
+                    help="Disable the ability to set the result of \
+                    core manual cases from the console"),
+        make_option("--enable-memory-collection",
+                    dest="enable_memory_collection", action="store_true",
+                    help="Enable the ability to release memory \
+                    when the free memory is less than 100M"),
+        make_option("--version", dest="version_info", action="store_true",
+                    help="Show version information"),
+        make_option("--internal-version", dest="internal_version_info",
+                    action="store_true",
+                    help="Show internal version information"),
+        make_option("--deviceid", dest="device_serial", action="store",
+                    help="set sdb device serial information"),
+        make_option("--comm", dest="commodule", action="store",
+                    help="set commodule type: \"tizenmobile\" by default, \"localhost\" for single mode"),
+        make_option("--capability", dest="capability", action="store",
+                    help="get capability file"),
+        make_option("--quit", dest="quit", action="store_true",
+                    help="quit testkit-lite"),
+        make_option("--debug", dest="debug", action="store_true",
+                    help="run in debug mode,more log information print out")
+
+    ]
+
+    option_list.extend(map(lambda flt:
+                           make_option("--%s" % flt, dest="w%s" % flt,
+                                       action="callback", callback=varnarg,
+                                       help="Select the specified filter-rules : %s" % flt),
+                           COMMON_FILTERS))
 
     try:
         # untrusted behaviour of %%prog
-        usage = "%%prog [options] -f <somewhere/test.xml>\n\
-examples: %%prog  -f  <somewhere>/test.xml\n\
-          %%prog  -f test.xml -D\n\
-          %%prog  -f test.xml -A\n\
-          %%prog  -f test.xml -M\n\
-          %%prog  -f test1.xml test2.xml test3.xml ...\n\
-          %%prog  -f test.xml -D -A --type type1 ...\n\
-          %%prog  -f test.xml -D -A --type type1 --status ready ...\n\
+        USAGE = "%%prog [options] -f device:\"<somewhere/test.xml>\"\n\
+examples: %%prog  -f device:\"<somewhere>/test.xml\"\n\
+          %%prog  -f device:\"test.xml\" -D\n\
+          %%prog  -f device:\"test.xml\" -A\n\
+          %%prog  -f device:\"test.xml\" -M\n\
+          %%prog  -f device:\"test.xml\" --capability <capability file>\n\
+          %%prog  -f device:\"test1.xml test2.xml test3.xml\" ...\n\
+          %%prog  -f device:\"test.xml\" -D -A --type type1 --capability <capability file> --comm <commoduletype>...\n\
+          %%prog  -f device:\"test.xml\" -D -A --type type1 --status ready ...\n\
 \n\
     run a webapi package: \n\
-          %%prog -f /usr/share/webapi-webkit-tests/tests.xml -e 'WRTLauncher webapi-webkit-tests' -o /tmp/wekit-tests-result.xml --priority P0 --status ready ...\n\
+          %%prog -f device:\"/usr/share/webapi-webkit-tests/tests.xml\" -e 'WRTLauncher webapi-webkit-tests' -o /tmp/wekit-tests-result.xml --priority P0 --status ready ...\n\
     run both core and webapi packages: \n\
-          %%prog -f /usr/share/webapi-webkit-tests/tests.xml /usr/share/tts-bluez-tests/tests.xml -e 'WRTLauncher webapi-webkit-tests' -o /tmp/wekit-tests-result.xml ...\n\
+          %%prog -f device:\"/usr/share/webapi-webkit-tests/tests.xml /usr/share/tts-bluez-tests/tests.xml\" -e 'WRTLauncher webapi-webkit-tests' -o /tmp/wekit-tests-result.xml ...\n\
+    run in single mode: \n\
+          %%prog -f device:\"/usr/share/webapi-webkit-tests/tests.xml\" -e 'WRTLauncher webapi-webkit-tests' --comm localhost \n\
 \n\
 Note: \n\
           1) Proxy settings should be disabled when execute webapi packages\n\
@@ -189,74 +243,109 @@ Note: \n\
           5) -e option does not support -D mode\n\
           6) The test cases' order in the result files might be arbitrary, when running same tests.xml with same options. This is caused by python's API 'getiterator' from module 'xml.etree.ElementTree'\n\
           7) run command 'testkit-lite', it might not be able to locate module 'testkitlite.engines.default.runner', run command 'export PYTHONPATH=/usr/lib/python2.7/site-packages' to resolve this issue" % (LOG_DIR)
-    except:
-        usage = None
+    except Exception:
+        USAGE = None
 
     # detect non-params
     if len(sys.argv) == 1:
         sys.argv.append("-h")
 
-    parser = OptionParser(option_list=option_list, usage=usage)
+    PARSERS = OptionParser(option_list=option_list, usage=USAGE)
 
-    (options, args) = parser.parse_args()
+    (options, args) = PARSERS.parse_args()
+    # detect quit action
+    if options.quit:
+        try:
+            print "[ Quit testkit-lite now ]"
+            kill_testkit_lite(PID_FILE)
+        except Exception, e:
+            print "[ Error: fail to kill existing testkit-lite, error: %s ]\n" % e
+        sys.exit(1)
 
     # detect conflict
     if options.bautoonly and options.bmanualonly:
         raise ValueError("-A and -M are conflict")
+    if options.commodule:
+        COMMODULE_TYPE = options.commodule
+    else:
+        COMMODULE_TYPE = "tizenmobile"
+
+    CONNECTOR = Connector({"testremote": COMMODULE_TYPE}).get_connector()
+    if CONNECTOR == None:
+        print "[ Error: init commodule error... ]\n"
+        sys.exit(1)
 
     # create runner
-    runner = TRunner()
+    runner = TRunner(CONNECTOR)
     runner.set_pid_log(PID_FILE)
+    # apply all options
 
-    # apply dryrun
-    if options.bdryrun:
-        runner.set_dryrun(options.bdryrun)
+    runner.set_global_parameters(options)
 
-    # apply non-active
-    if options.non_active:
-        runner.set_non_active(options.non_active)
+    # set capability
+    if options.capability:
+        get_capability_status = runner.get_capability(options.capability)
+        if not get_capability_status:
+            sys.exit(1)
 
-    # apply enable-memory-collection
-    if options.enable_memory_collection:
-        runner.set_enable_memory_collection(options.enable_memory_collection)
+    if "device:" in options.testxml[0]:
+        print 'remote file'
+        remote_testlits = options.testxml[0]
+        remote_testlits = remote_testlits.split(':')[1]
+        testlistarrary = remote_testlits.split()
+        localarry = []
 
-    # apply user specify test result file
-    if options.resultfile:
-        runner.set_resultfile(options.resultfile)
+        for remote_file in testlistarrary:
+            tmp_remote_file = os.path.split(remote_file)
+            tmp_remote_folder = os.path.basename(tmp_remote_file[0])
+            tmp_remote_test_xml = os.path.join(
+                tmp_remote_folder, tmp_remote_file[1])
+            local_test_package = os.path.join(
+                TEST_PACKAGES_DIR, tmp_remote_test_xml)
+            down_status = runner.connector.download_file(
+                runner.deviceid, remote_file, local_test_package)
+            if not down_status:
+                print 'remote file can not find,pls check the install test packages:%s' % remote_file
+                sys.exit(1)
+            localarry.append(local_test_package)
+        options.testxml = localarry
+    else:
+        print 'local file'
+        if len(options.testxml) == 1:
+            local_testlists = options.testxml[0]
+            testlistarrary = local_testlists.split(' ')
+            options.testxml = testlistarrary
+            print options.testxml
 
     # apply filter
     wfilters = {}
     for flt in COMMON_FILTERS:
         if eval('options.w%s' % flt):
             wfilters[flt] = eval('options.w%s' % flt)
-
-    if options.fullscreen:
-        runner.set_fullscreen(True)
-
     runner.add_filter_rules(**wfilters)
 
-    if options.exttest:
-        runner.set_external_test(options.exttest)
-
     if not options.testxml:
         print "[ Error: not specify a test xml... ]\n"
         sys.exit(1)
 
     # 1) prepare log dir
     if platform.system() == "Linux":
-        session = datetime.today().isoformat('-')
+        SESSION = datetime.today().isoformat('-')
     else:
-        session = datetime.today().strftime("%Y-%m-%d_%H_%M_%S")
-    log_dir = _j(LOG_DIR, session)
-    latest_dir = _j(LOG_DIR, "latest")
+        SESSION = datetime.today().strftime("%Y-%m-%d_%H_%M_%S")
+    CURRENT_LOG_DIR = JOIN(LOG_DIR, SESSION)
+    LATEST_DIR = JOIN(LOG_DIR, "latest")
     try:
-        if _e(latest_dir):
-            os.remove(latest_dir)
-        os.makedirs(log_dir)
+        if EXISTS(LATEST_DIR):
+            os.remove(LATEST_DIR)
+        if os.path.islink(LATEST_DIR):
+            os.remove(LATEST_DIR)
+        os.makedirs(CURRENT_LOG_DIR)
         if os.name == "posix":
-            os.symlink(log_dir, latest_dir)
-    except Exception, e:
-        print "[ Error: create session log directory: %s failed, error: %s ]\n" % (log_dir, e)
+            os.symlink(CURRENT_LOG_DIR, LATEST_DIR)
+    except IOError, e:
+        print "[ Error: create session log directory: \
+        %s failed, error: %s ]\n" % (CURRENT_LOG_DIR, e)
 
     # 2) run test
     # run more than one tests.xml
@@ -267,10 +356,22 @@ Note: \n\
         for t in testxmls:
             filename = t
             filename = os.path.splitext(filename)[0]
-            filename = filename.split('/')[3]
-            filename = "%s.total" % _b(filename)
+            if platform.system() == "Linux":
+                if not filename.startswith('/'):
+                    print "[ Error: xml file %s should start \
+                    with '/' ]" % filename
+                    sys.exit(1)
+                else:
+                    filename = filename.split('/')[-2]
+                    if filename == "":
+                        print "[ Error: unable to find package name info \
+                        from %s ]" % t
+                        sys.exit(1)
+            else:
+                filename = filename.split('\\')[-2]
+            filename = "%s.total" % BASENAME(filename)
             resultfile = "%s.xml" % filename
-            resultfile = _j(log_dir, resultfile)
+            resultfile = JOIN(CURRENT_LOG_DIR, resultfile)
             ep = etree.parse(t)
             suiteparent = ep.getroot()
             no_test_definition = 1
@@ -291,62 +392,75 @@ Note: \n\
             runner.apply_filter(suiteparent)
             # just leave suite and set for merge result
             for suite in ep.getiterator('suite'):
-                for set in suite.getiterator('set'):
-                    for testcase in set.getiterator('testcase'):
-                        set.remove(testcase)
+                for tset in suite.getiterator('set'):
+                    for testcase in tset.getiterator('testcase'):
+                        tset.remove(testcase)
             try:
                 with open(resultfile, 'w') as output:
                     tree = etree.ElementTree(element=suiteparent)
                     tree.write(output)
-            except Exception, e:
-                print "[ Error: create filtered total result file: %s failed, error: %s ]\n" % (resultfile, e)
-        start_time = datetime.today().strftime("%Y-%m-%d_%H_%M_%S")
+            except IOError, e:
+                print "[ Error: create filtered total result file: \
+                %s failed, error: %s ]\n" % (resultfile, e)
+        START_TIME = datetime.today().strftime("%Y-%m-%d_%H_%M_%S")
         if not options.bautoonly:
             if options.bmanualonly:
                 for t in testxmls:
                     try:
                         wfilters['execution_type'] = ["manual"]
                         runner.add_filter_rules(**wfilters)
-                        runner.prepare_run(t, resultdir=log_dir)
-                    except Exception, e:
-                        print "[ Error: prepare_run test xml: %s from testkit-lite failed, error: %s ]\n" % (t, e)
+                        runner.prepare_run(t, resultdir=CURRENT_LOG_DIR)
+                    except IOError, e:
+                        print "[ Error: prepare_run test xml: \
+                        %s from testkit-lite failed, error: %s ]\n" % (t, e)
             else:
                 for t in testxmls:
                     try:
                         wfilters['execution_type'] = ["auto"]
                         runner.add_filter_rules(**wfilters)
-                        runner.prepare_run(t, resultdir=log_dir)
-                    except Exception, e:
-                        print "[ Error: prepare_run test xml: %s from testkit-lite failed, error: %s ]\n" % (t, e)
+                        runner.prepare_run(t, resultdir=CURRENT_LOG_DIR)
+                    except IOError, e:
+                        print "[ Error: prepare_run test xml: \
+                        %s from testkit-lite failed, error: %s ]\n" % (t, e)
                 for t in testxmls:
                     try:
                         wfilters['execution_type'] = ["manual"]
                         runner.add_filter_rules(**wfilters)
-                        runner.prepare_run(t, resultdir=log_dir)
-                    except Exception, e:
-                        print "[ Error: prepare_run test xml: %s from testkit-lite failed, error: %s ]\n" % (t, e)
+                        runner.prepare_run(t, resultdir=CURRENT_LOG_DIR)
+                    except IOError, e:
+                        print "[ Error: prepare_run test xml: \
+                        %s from testkit-lite failed, error: %s ]\n" % (t, e)
         else:
             for t in testxmls:
                 try:
                     wfilters['execution_type'] = ["auto"]
                     runner.add_filter_rules(**wfilters)
-                    runner.prepare_run(t, resultdir=log_dir)
-                except Exception, e:
-                    print "[ Error: prepare_run test xml: %s from testkit-lite failed, error: %s ]\n" % (t, e)
+                    runner.prepare_run(t, resultdir=CURRENT_LOG_DIR)
+                except IOError, e:
+                    print "[ Error: prepare_run test xml: \
+                    %s from testkit-lite failed, error: %s ]\n" % (t, e)
     # run only one tests.xml
     # 1. run all auto cases from the xml
     # 2. run all manual cases from the xml
     else:
         testxml = (options.testxml)[0]
-        filename = testxml
-        filename = os.path.splitext(filename)[0]
+        FILENAME = testxml
+        filename = os.path.splitext(FILENAME)[0]
         if platform.system() == "Linux":
-            filename = filename.split('/')[3]
+            if not filename.startswith('/'):
+                print "[ Error: xml file %s should start with '/' ]" % filename
+                sys.exit(1)
+            else:
+                filename = filename.split('/')[-2]
+                if filename == "":
+                    print "[ Error: unable to find package name info \
+                    from %s ]" % testxml
+                    sys.exit(1)
         else:
             filename = filename.split('\\')[-2]
-        filename = "%s.total" % _b(filename)
+        filename = "%s.total" % BASENAME(filename)
         resultfile = "%s.xml" % filename
-        resultfile = _j(log_dir, resultfile)
+        resultfile = JOIN(CURRENT_LOG_DIR, resultfile)
         ep = etree.parse(testxml)
         suiteparent = ep.getroot()
         no_test_definition = 1
@@ -367,76 +481,59 @@ Note: \n\
         runner.apply_filter(suiteparent)
         # just leave suite and set for merge result
         for suite in ep.getiterator('suite'):
-                for set in suite.getiterator('set'):
-                    for testcase in set.getiterator('testcase'):
-                        set.remove(testcase)
+            for tset in suite.getiterator('set'):
+                for testcase in tset.getiterator('testcase'):
+                    tset.remove(testcase)
         try:
             with open(resultfile, 'w') as output:
-                tree = etree.ElementTree(element=suiteparent)
-                tree.write(output)
+                TREE = etree.ElementTree(element=suiteparent)
+                TREE.write(output)
         except IOError, e:
-            print "[ Error: create filtered result file: %s failed, error: %s ]\n" % (resultfile, e)
-            
-        start_time = datetime.today().strftime("%Y-%m-%d_%H_%M_%S")
+            print "[ Error: create filtered result file: \
+            %s failed, error: %s ]\n" % (resultfile, e)
+
+        START_TIME = datetime.today().strftime("%Y-%m-%d_%H_%M_%S")
         if not options.bautoonly:
             if options.bmanualonly:
                 try:
                     wfilters['execution_type'] = ["manual"]
                     runner.add_filter_rules(**wfilters)
-                    runner.prepare_run(testxml, resultdir=log_dir)
-                except Exception, e:
-                    print "[ Error: prepare_run test xml: %s from testkit-lite failed, error: %s ]\n" % (testxml, e)
+                    runner.prepare_run(testxml, resultdir=CURRENT_LOG_DIR)
+                except IOError, e:
+                    print "[ Error: prepare_run test xml: \
+                    %s from testkit-lite failed, error: %s ]\n" % (testxml, e)
             else:
                 try:
                     wfilters['execution_type'] = ["auto"]
                     runner.add_filter_rules(**wfilters)
-                    runner.prepare_run(testxml, resultdir=log_dir)
+                    runner.prepare_run(testxml, resultdir=CURRENT_LOG_DIR)
                     wfilters['execution_type'] = ["manual"]
                     runner.add_filter_rules(**wfilters)
-                    runner.prepare_run(testxml, resultdir=log_dir)
-                except Exception, e:
-                    print "[ Error: prepare_run test xml: %s from testkit-lite failed, error: %s ]\n" % (testxml, e)
+                    runner.prepare_run(testxml, resultdir=CURRENT_LOG_DIR)
+                except IOError, e:
+                    print "[ Error: prepare_run test xml: \
+                    %s from testkit-lite failed, error: %s ]\n" % (testxml, e)
         else:
             try:
                 wfilters['execution_type'] = ["auto"]
                 runner.add_filter_rules(**wfilters)
-                runner.prepare_run(testxml, resultdir=log_dir)
-            except Exception, e:
-                print "[ Error: prepare_run test xml: %s from testkit-lite failed, error: %s ]\n" % (testxml, e)
+                runner.prepare_run(testxml, resultdir=CURRENT_LOG_DIR)
+            except IOError, e:
+                print "[ Error: prepare_run test xml: \
+                %s from testkit-lite failed, error: %s ]\n" % (testxml, e)
     try:
-        runner.run_and_merge_resultfile(start_time, log_dir)
-        # kill open windows
-        print "[ clean up unfinished process ]"
-        try:
-            with open(PID_FILE, "r") as fd:
-                main_pid = 1
-                for line in fd.readlines():
-                    if main_pid:
-                        main_pid = 0
-                    else:
-                        pid = line.rstrip("\n")
-                        if pid:
-                            killall(pid)
-        except Exception, e:
-            pattern = re.compile('No such file or directory|No such process')
-            match = pattern.search(str(e))
-            if not match:
-                print "[ Error: fail to kill client process, error: %s ]\n" % e
-        fi, fo, fe = os.popen3("netstat -tpa | grep 8000")
-        for line in fo.readlines():
-            pattern = re.compile('([0-9]*)\/python')
-            match = pattern.search(line)
-            if match:
-                http_server_pid = match.group(1)
-                print "[ kill http server, pid: %s ]" % http_server_pid
-                killall(http_server_pid)
+        runner.run_case(CURRENT_LOG_DIR)
+        runner.merge_resultfile(START_TIME, CURRENT_LOG_DIR)
         print "[ all tasks for testkit lite are accomplished, goodbye ]"
     except Exception, e:
-        print "[ Error: run_and_merge_resultfile from testkit-lite failed, error: %s ]\n" % (testxml, e)
+        print "[ Error: run_and_merge_resultfile from testkit-lite failed, \
+        error: %s ]\n" % e
 
 except KeyboardInterrupt, e:
     print "\n[ exiting testkit-lite on user cancel ]\n"
     sys.exit(1)
 except Exception, e:
-    print "\n[ Error: exiting testkit-lite by catching a critical error: %s ]\n" % e
+    print "\n[ Error: exiting testkit-lite by catching \
+    a critical error: %s ]\n" % e
+    traceback.print_exc()
     sys.exit(1)
diff --git a/testkit-lite.spec b/testkit-lite.spec
deleted file mode 100644 (file)
index 221e81e..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-%define _unpackaged_files_terminate_build 0
-
-Summary: Testkit Lite
-Name: testkit-lite
-Version: 2.3.0
-Release: 2
-License: GPLv2
-Group: System/Libraries
-Source: %name-%version.tar.gz
-BuildRoot: %_tmppath/%name-%version-buildroot
-Requires: python python-lxml
-
-%description
-command line test execution framework
-
-%prep
-%setup -q
-
-%build
-./autogen
-./configure
-make
-
-%install
-[ "\$RPM_BUILD_ROOT" != "/" ] && rm -rf "\$RPM_BUILD_ROOT"
-make install DESTDIR=$RPM_BUILD_ROOT
-
-%clean
-[ "\$RPM_BUILD_ROOT" != "/" ] && rm -rf "\$RPM_BUILD_ROOT"
-
-%files
-/opt/testkit/lite
-/usr/share/man/man1
-/usr/lib/python2.7/site-packages/testkitlite
-/opt/testkit/web
-%attr(755,root,root)
-/usr/bin/testkit-lite
-
-%pre
-if [ `echo $(uname) | grep -c "^Linux"` -eq 1 ];then
-       if [ -f "/etc/sudoers" ];then
-               if [ -f "/etc/login.defs" ];then
-                       #get first user name 
-                       min_uid=$(cat /etc/login.defs|grep -v '#'|awk '/UID_MIN/ {print $2;}')
-                       cur_user=$(cat /etc/passwd|grep -v '#'|awk -F: -v userid="${min_uid:=500}" '{ if ($3 == userid) print $1; }' /etc/passwd)
-                       if [ ${cur_user:="root"} != "root" ];then
-                               echo "Update sudoers configuration, it will take some mins"
-                               sed -i "/$cur_user/d" /etc/sudoers
-                               #append line into sudoers to configure switch to root without password
-                               sed -i "\$a$cur_user\tALL=(ALL)\tNOPASSWD: ALL" /etc/sudoers
-                       fi
-               fi
-       fi
-fi
-
-%post
-if [ `echo $(uname) | grep -c "^Linux"` -eq 1 ];then
-       chmod a+wx /opt/testkit/lite
-       if [ ! -x /usr/bin/testkit-lite ];then
-               find /usr -name 'testkit-lite' -exec cp -af {} /usr/bin/ \; 
-       fi
-fi
index c05394d..e619983 100644 (file)
@@ -20,5 +20,5 @@
 
 SUBDIRS = common engines
 
-testkitlitedir = /usr/lib/python2.7/site-packages/testkitlite
+testkitlitedir = /usr/lib/python2.7/dist-packages/testkitlite
 dist_testkitlite_SCRIPTS = __init__.py
index e142a6f..0cafaad 100644 (file)
@@ -18,5 +18,5 @@
 #              Zhang, Huihui <huihuix.zhang@intel.com>
 #              Wendong,Sui  <weidongx.sun@intel.com>
 
-testkitlitecommondir = /usr/lib/python2.7/site-packages/testkitlite/common
+testkitlitecommondir = /usr/lib/python2.7/dist-packages/testkitlite/common
 dist_testkitlitecommon_SCRIPTS = *.py
diff --git a/testkitlite/common/process_killall.py b/testkitlite/common/process_killall.py
new file mode 100755 (executable)
index 0000000..12e772f
--- /dev/null
@@ -0,0 +1,84 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+#
+# Authors:
+#              Zhang, Huihui <huihuix.zhang@intel.com>
+#              Wendong,Sui  <weidongx.sun@intel.com>
+
+import os
+import platform
+import signal
+import re
+import ctypes
+
+
+def killall(ppid):
+    """Kill all children process by parent process ID"""
+    OS = platform.system()
+    try:
+        if OS == "Linux":
+            ppid = str(ppid)
+            pidgrp = []
+
+            def getchildpids(ppid):
+                """Return a list of children process"""
+                command = "ps -ef | awk '{if ($3 == %s) print $2;}'" % str(ppid)
+                pids = os.popen(command).read()
+                pids = pids.split()
+                return pids
+
+            pidgrp.extend(getchildpids(ppid))
+            for pid in pidgrp:
+                pidgrp.extend(getchildpids(pid))
+            # Insert self process ID to PID group list
+            pidgrp.insert(0, ppid)
+            while len(pidgrp) > 0:
+                pid = pidgrp.pop()
+                try:
+                    os.kill(int(pid), signal.SIGKILL)
+                except Exception, e:
+                    pattern = re.compile('No such process')
+                    match = pattern.search(str(e))
+                    if not match:
+                        print "[ Error: fail to kill pid: %s, error: %s ]\n" % (int(pid), e)
+        # kill for windows platform
+        else:
+            kernel32 = ctypes.windll.kernel32
+            handle = kernel32.OpenProcess(1, 0, int(ppid))
+            kill_result = kernel32.TerminateProcess(handle, 0)
+    except Exception, e:
+        pattern = re.compile('No such process')
+        match = pattern.search(str(e))
+        if not match:
+            print "[ Error: fail to kill pid: %s, error: %s ]\n" % (int(ppid), e)
+    return None
+
+
+def kill_testkit_lite(PID_FILE):
+    """ kill testkit lite"""
+    try:
+        with open(PID_FILE, "r") as fd:
+            pid = fd.readline().rstrip("\n")
+            if pid:
+                killall(pid)
+    except Exception, e:
+        pattern = re.compile('No such file or directory|No such process')
+        match = pattern.search(str(e))
+        if not match:
+            print "[ Error: fail to kill existing testkit-lite, error: %s ]\n" % e
+    return None
index 3c58d11..5517455 100644 (file)
@@ -1,7 +1,7 @@
 #!/usr/bin/python
 #
 # Copyright (C) 2012 Intel Corporation
-# 
+#
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
 # as published by the Free Software Foundation; either version 2
 #              Wendong,Sui  <weidongx.sun@intel.com>
 
 from types import *
-import sys
 import string
 
 STRENCODE = "utf8"
 
+
 def str2str(s):
     # unify str and unicode to str
     if isinstance(s, unicode):
@@ -35,6 +35,7 @@ def str2str(s):
         return s
     return ""
 
+
 def str2val(s):
     ret = None
     try:
@@ -43,6 +44,7 @@ def str2val(s):
         pass
     return ret
 
+
 def str2bool(s):
     if "TRUE" == str2str(s).upper():
         return True
@@ -50,6 +52,7 @@ def str2bool(s):
         return False
     return None
 
+
 def str2number(s):
     val = str2val(str2str(s))
     if type(val) in [IntType, FloatType, LongType]:
index 3967640..b360a3f 100644 (file)
@@ -20,5 +20,5 @@
 
 SUBDIRS = default
 
-testkitliteenginesdir = /usr/lib/python2.7/site-packages/testkitlite/engines
+testkitliteenginesdir = /usr/lib/python2.7/dist-packages/testkitlite/engines
 dist_testkitliteengines_SCRIPTS = __init__.py
index 466fa6a..0591520 100644 (file)
@@ -18,5 +18,5 @@
 #              Zhang, Huihui <huihuix.zhang@intel.com>
 #              Wendong,Sui  <weidongx.sun@intel.com>
 
-testkitliteenginesdefaultdir = /usr/lib/python2.7/site-packages/testkitlite/engines/default
+testkitliteenginesdefaultdir = /usr/lib/python2.7/dist-packages/testkitlite/engines/default
 dist_testkitliteenginesdefault_SCRIPTS = *.py
index d9bab3e..d3245c9 100644 (file)
@@ -1,7 +1,7 @@
 #!/usr/bin/python
 #
 # Copyright (C) 2012 Intel Corporation
-# 
+#
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
 # as published by the Free Software Foundation; either version 2
 #
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+# Foundation, Inc.,
+# 51 Franklin Street,
+# Fifth Floor,
+# Boston, MA  02110-1301, USA.
 #
 # Authors:
 #              Zhang, Huihui <huihuix.zhang@intel.com>
 #              Wendong,Sui  <weidongx.sun@intel.com>
+#              Yuanyuan,Zou  <zouyuanx@intel.com>
+""" prepare run , split xml ,run case , merge result """
 
 import os
 import platform
 import time
+import sys
+import traceback
+import collections
 from datetime import datetime
 from shutil import copyfile
 import xml.etree.ElementTree as etree
 import ConfigParser
-from xml.dom import minidom
 from tempfile import mktemp
-from testkitlite.common.str2 import *
-from testkitlite.common.autoexec import shell_exec
-from testkitlite.common.killall import killall
 from shutil import move
 from os import remove
-import re
-import subprocess
 
-_j = os.path.join
-_d = os.path.dirname
-_b = os.path.basename
-_e = os.path.exists
-_abs = os.path.abspath
+
+JOIN = os.path.join
+DIRNAME = os.path.dirname
+BASENAME = os.path.basename
+EXISTS = os.path.exists
+ABSPATH = os.path.abspath
+
 
 class TRunner:
+
     """
     Parse the testdefinition.xml files.
     Apply filter for each run.
     Conduct tests execution.
     """
-    def __init__(self):
+    def __init__(self, connector):
+        """ init all self parameters here """
         # dryrun
         self.bdryrun = False
         # non_active
@@ -58,38 +64,66 @@ class TRunner:
         self.enable_memory_collection = False
         # result file
         self.resultfile = None
-        # external test    
+        # external test
         self.external_test = None
         # filter rules
         self.filter_rules = None
         self.fullscreen = False
+        self.debug = False
         self.resultfiles = set()
         self.core_auto_files = []
         self.core_manual_files = []
         self.skip_all_manual = False
         self.testsuite_dict = {}
         self.exe_sequence = []
-        self.testresult_dict = {"pass" : 0, "fail" : 0, "block" : 0, "not_run" : 0}
+        self.testresult_dict = {"pass": 0, "fail": 0,
+                                "block": 0, "not_run": 0}
         self.current_test_xml = "none"
         self.first_run = True
+        self.deviceid = None
+        self.session_id = None
+        self.pid_log = None
+        self.set_parameters = {}
+        self.connector = connector
+        self.stub_name = "httpserver"
+        self.capabilities = {}
+        self.has_capability = False
 
-    def set_pid_log(self, pid_log):
-        self.pid_log = pid_log
-
-    def set_dryrun(self, bdryrun):
-        self.bdryrun = bdryrun
-
-    def set_non_active(self, non_active):
-        self.non_active = non_active
+    def set_global_parameters(self, options):
+        "get all options "
+        # apply dryrun
+        if options.bdryrun:
+            self.bdryrun = options.bdryrun
+        # release memory when the free memory is less than 100M
+        if options.enable_memory_collection:
+            self.enable_memory_collection = options.enable_memory_collection
+        # Disable set the result of core manual cases from the console
+        if options.non_active:
+            self.non_active = options.non_active
+        # apply user specify test result file
+        if options.resultfile:
+            self.resultfile = options.resultfile
+        # set device_id
+        if options.device_serial:
+            self.deviceid = options.device_serial
 
-    def set_enable_memory_collection(self, enable_memory_collection):
-        self.enable_memory_collection = enable_memory_collection
+        if not options.device_serial:
+            if len(self.connector.get_device_ids()) > 0:
+                self.deviceid = self.connector.get_device_ids()[0]
+            else:
+                raise Exception("[ No devices connected ]")
 
-    def set_resultfile(self, resultfile):
-        self.resultfile = resultfile
+        if options.fullscreen:
+            self.fullscreen = True
+        # set the external test WRTLauncher
+        if options.exttest:
+            self.external_test = options.exttest
+        if options.debug:
+            self.debug = options.debug
 
-    def set_external_test(self, exttest):
-        self.external_test = exttest
+    def set_pid_log(self, pid_log):
+        """ get pid_log file """
+        self.pid_log = pid_log
 
     def add_filter_rules(self, **kargs):
         """
@@ -97,8 +131,14 @@ class TRunner:
         """
         self.filter_rules = kargs
 
-    def set_fullscreen(self, state):
-        self.fullscreen = state
+    def set_session_id(self, session_id):
+        """ set the set test session id which is get form com_module """
+        self.session_id = session_id
+
+    def set_capability(self, capabilities):
+        """ set capabilitys  """
+        self.capabilities = capabilities
+        self.has_capability = True
 
     def prepare_run(self, testxmlfile, resultdir=None):
         """
@@ -109,126 +149,131 @@ class TRunner:
         # resultdir is set to current directory by default
         if not resultdir:
             resultdir = os.getcwd()
-        ok = True
-        if ok:
+        ok_prepare = True
+        if ok_prepare:
             try:
                 filename = testxmlfile
                 filename = os.path.splitext(filename)[0]
                 if platform.system() == "Linux":
-                    filename = filename.split('/')[3]
+                    filename = filename.split('/')[-2]
                 else:
                     filename = filename.split('\\')[-2]
                 if self.filter_rules["execution_type"] == ["manual"]:
                     resultfile = "%s.manual.xml" % filename
                 else:
                     resultfile = "%s.auto.xml" % filename
-                resultfile = _j(resultdir, resultfile)
-                if not _e(resultdir):
+                resultfile = JOIN(resultdir, resultfile)
+                if not EXISTS(resultdir):
                     os.mkdir(resultdir)
                 print "[ analysis test xml file: %s ]" % resultfile
-                try:
-                    ep = etree.parse(testxmlfile)
-                    suiteparent = ep.getroot()
-                    no_test_definition = 1
-                    for tf in ep.getiterator('test_definition'):
-                        no_test_definition = 0
-                    if no_test_definition:
-                        suiteparent = etree.Element('test_definition')
-                        suiteparent.tail = "\n"
-                        for suite in ep.getiterator('suite'):
-                            suite.tail = "\n"
-                            suiteparent.append(suite)
-                    self.apply_filter(suiteparent)
-                    try:
-                        with open(resultfile, 'w') as output:
-                            tree = etree.ElementTree(element=suiteparent)
-                            tree.write(output)
-                    except IOError, e:
-                        print "[ Error: create filtered result file: %s failed, error: %s ]" % (resultfile, e)
-                except Exception, e:
-                    print e
-                    return False
-                casefind = etree.parse(resultfile).getiterator('testcase')
-                if casefind:
-                    file = "%s" % _b(resultfile)
-                    file = os.path.splitext(file)[0]
-                    testsuite_dict_value_list = []
-                    testsuite_dict_add_flag = 0
-                    execute_suite_one_way = 1
-                    if self.external_test:
-                        parser = etree.parse(resultfile)
-                        no_wrtlauncher = 1
-                        suite_total_count = 0 
-                        suite_wrt_launcher_count = 0
-                        for tsuite in parser.getiterator('suite'):
-                            suite_total_count += 1
-                            if tsuite.get('launcher'):
-                                if not tsuite.get('launcher').find('WRTLauncher'):
-                                    no_wrtlauncher = 0
-                                    suite_wrt_launcher_count += 1
-                        if no_wrtlauncher:
-                            if self.filter_rules["execution_type"] == ["auto"]:
-                                self.core_auto_files.append(resultfile)
-                            else:
-                                self.core_manual_files.append(resultfile)
-                        elif suite_total_count == suite_wrt_launcher_count:
-                            testsuite_dict_value_list.append(resultfile) 
-                            testsuite_dict_add_flag = 1
-                            self.exe_sequence.append(file)
-                        else:
-                            filename_diff = 1
-                            execute_suite_one_way = 0
-                            for tsuite in parser.getiterator('suite'):
-                                root = etree.Element('test_definition')
-                                suitefilename = os.path.splitext(resultfile)[0]
-                                suitefilename += ".suite_%s.xml" % filename_diff
-                                suitefilename = _j(resultdir, suitefilename)
-                                tsuite.tail = "\n"
-                                root.append(tsuite)
-                                try:
-                                    with open(suitefilename, 'w') as output:
-                                        tree = etree.ElementTree(element=root)
-                                        tree.write(output)
-                                except IOError, e:
-                                    print "[ Error: create filtered result file: %s failed, error: %s ]" % (suitefilename, e)
-                                case_suite_find = etree.parse(suitefilename).getiterator('testcase')
-                                if case_suite_find:
-                                    if tsuite.get('launcher'):
-                                        if tsuite.get('launcher').find('WRTLauncher'):
-                                            if self.filter_rules["execution_type"] == ["auto"]:
-                                                self.core_auto_files.append(suitefilename)
-                                            else:
-                                                self.core_manual_files.append(suitefilename)
-                                            self.resultfiles.add(suitefilename)
-                                        else:
-                                            testsuite_dict_value_list.append(suitefilename) 
-                                            if testsuite_dict_add_flag == 0:
-                                                self.exe_sequence.append(file)
-                                            testsuite_dict_add_flag = 1
-                                            self.resultfiles.add(suitefilename)
-                                    else:
-                                        if self.filter_rules["execution_type"] == ["auto"]:
-                                            self.core_auto_files.append(suitefilename)
-                                        else:
-                                            self.core_manual_files.append(suitefilename)
-                                        self.resultfiles.add(suitefilename)
-                                filename_diff += 1
-                        if testsuite_dict_add_flag:
-                            self.testsuite_dict[file] = testsuite_dict_value_list 
+                self.__prepare_result_file(testxmlfile, resultfile)
+                self.__split_test_xml(resultfile, resultdir)
+            except IOError, error:
+                traceback.print_exc()
+                print error
+                ok_prepare &= False
+        return ok_prepare
+
+    def __split_test_xml(self, resultfile, resultdir):
+        """ split_test_xml into auto and manual"""
+        casefind = etree.parse(resultfile).getiterator('testcase')
+        if casefind:
+            test_file_name = "%s" % BASENAME(resultfile)
+            test_file_name = os.path.splitext(test_file_name)[0]
+            self.__splite_external_test(
+                resultfile, test_file_name, resultdir)
+
+    def __splite_core_test(self, resultfile):
+        """select core test"""
+        if self.filter_rules["execution_type"] == ["auto"]:
+            self.core_auto_files.append(resultfile)
+        else:
+            self.core_manual_files.append(resultfile)
+        self.resultfiles.add(resultfile)
+
+    def __splite_external_test(self, resultfile, test_file_name, resultdir):
+        """select external_test"""
+        testsuite_dict_value_list = []
+        testsuite_dict_add_flag = 0
+        filename_diff = 1
+
+        parser = etree.parse(resultfile)
+        for tsuite in parser.getiterator('suite'):
+            root = etree.Element('test_definition')
+            suitefilename = os.path.splitext(resultfile)[0]
+            suitefilename += ".suite_%s.xml" % filename_diff
+            suitefilename = JOIN(resultdir, suitefilename)
+            tsuite.tail = "\n"
+            root.append(tsuite)
+            try:
+                with open(suitefilename, 'w') as output:
+                    tree = etree.ElementTree(element=root)
+                    tree.write(output)
+            except IOError, error:
+                print "[ Error: create filtered result file: %s failed,\
+                 error: %s ]" % (suitefilename, error)
+            case_suite_find = etree.parse(
+                suitefilename).getiterator('testcase')
+            if case_suite_find:
+                if tsuite.get('launcher'):
+                    if tsuite.get('launcher').find('WRTLauncher'):
+                        self.__splite_core_test(suitefilename)
+                    else:
+                        testsuite_dict_value_list.append(suitefilename)
+                        if testsuite_dict_add_flag == 0:
+                            self.exe_sequence.append(test_file_name)
+                        testsuite_dict_add_flag = 1
+                        self.resultfiles.add(suitefilename)
+                else:
+                    if self.filter_rules["execution_type"] == ["auto"]:
+                        self.core_auto_files.append(suitefilename)
                     else:
-                        if self.filter_rules["execution_type"] == ["auto"]:
-                            self.core_auto_files.append(resultfile)
-                        else:
-                            self.core_manual_files.append(resultfile)
-                    if execute_suite_one_way:
-                        self.resultfiles.add(resultfile)
-            except Exception, e:
-                print e
-                ok &= False
-        return ok
-
-    def run_and_merge_resultfile(self, start_time, latest_dir):
+                        self.core_manual_files.append(suitefilename)
+                    self.resultfiles.add(suitefilename)
+            filename_diff += 1
+        if testsuite_dict_add_flag:
+            self.testsuite_dict[test_file_name] = testsuite_dict_value_list
+
+    def __prepare_result_file(self, testxmlfile, resultfile):
+        """ write the test_xml content to resultfile"""
+        try:
+            parse_tree = etree.parse(testxmlfile)
+            suiteparent = parse_tree.getroot()
+            no_test_definition = 1
+            if parse_tree.getiterator('test_definition'):
+                no_test_definition = 0
+            if no_test_definition:
+                suiteparent = etree.Element('test_definition')
+                suiteparent.tail = "\n"
+                for suite in parse_tree.getiterator('suite'):
+                    suite.tail = "\n"
+                    suiteparent.append(suite)
+            self.apply_filter(suiteparent)
+            try:
+                with open(resultfile, 'w') as output:
+                    tree = etree.ElementTree(element=suiteparent)
+                    tree.write(output)
+            except IOError, error:
+                print "[ Error: create filtered result file: %s failed,\
+                    error: %s ]" % (resultfile, error)
+        except IOError, error:
+            print error
+            return False
+
+    def run_case(self, latest_dir):
+        """ run case """
         # run core auto cases
+        self.__run_core_auto()
+
+        # run webAPI cases
+        self.__run_webapi_test(latest_dir)
+
+        # run core manual cases
+        self.__run_core_manual()
+
+    def __run_core_auto(self):
+        """ core auto cases run"""
+        self.core_auto_files.sort()
         for core_auto_file in self.core_auto_files:
             temp_test_xml = os.path.splitext(core_auto_file)[0]
             temp_test_xml = os.path.splitext(temp_test_xml)[0]
@@ -239,90 +284,11 @@ class TRunner:
                 time.sleep(3)
                 print "\n[ testing xml: %s.xml ]" % temp_test_xml
                 self.current_test_xml = temp_test_xml
-            self.execute(core_auto_file, core_auto_file)
-            
-        # run webAPI cases
-        for webapi_total_file in self.exe_sequence:
-            for webapi_file in self.testsuite_dict[webapi_total_file]:
-                # print identical xml file name
-                if self.current_test_xml != _j(latest_dir, webapi_total_file):
-                    time.sleep(3)
-                    print "\n[ testing xml: %s.xml ]\n" % _j(latest_dir, webapi_total_file)
-                    self.current_test_xml = _j(latest_dir, webapi_total_file)
-                try:
-                    # split xml by <set>
-                    print "[ split xml: %s by <set> ]" % webapi_file
-                    print "[ this might take some time, please wait ]"
-                    set_number = 1
-                    test_xml_set_list = []
-                    self.resultfiles.discard(webapi_file)
-                    test_xml_temp = etree.parse(webapi_file)
-                    for test_xml_temp_suite in test_xml_temp.getiterator('suite'):
-                        for test_xml_temp_set in test_xml_temp_suite.getiterator('set'):
-                            copy_url = os.path.splitext(webapi_file)[0]
-                            copy_url += "_set_%s.xml" % set_number
-                            copyfile(webapi_file, copy_url)
-                            test_xml_set_list.append(copy_url)
-                            self.resultfiles.add(copy_url)
-                            set_number += 1
-                    time.sleep(3)
-                    set_number -= 1
-                    print "[ total set number is: %s ]" % set_number
-                    # only keep one set in each xml file and remove empty set
-                    test_xml_set_list_empty = []
-                    for test_xml_set in test_xml_set_list:
-                        test_xml_set_tmp = etree.parse(test_xml_set)
-                        set_keep_number = 1
-                        print "[ process set: %s ]" % test_xml_set
-                        for test_xml_set_temp_suite in test_xml_set_tmp.getiterator('suite'):
-                            for test_xml_set_temp_set in test_xml_set_temp_suite.getiterator('set'):
-                                if set_keep_number != set_number:
-                                    test_xml_set_temp_suite.remove(test_xml_set_temp_set)
-                                else:
-                                    temp_case = test_xml_set_temp_set.getiterator('testcase')
-                                    if not temp_case:
-                                        test_xml_set_list_empty.append(test_xml_set)
-                                set_keep_number += 1
-                        set_number -= 1
-                        with open(test_xml_set, 'w') as output:
-                            root = test_xml_set_tmp.getroot()
-                            tree = etree.ElementTree(element=root)
-                            tree.write(output)
-                    for empty_set in test_xml_set_list_empty:
-                        print "[ remove empty set: %s ]" % empty_set
-                        test_xml_set_list.remove(empty_set)
-                        self.resultfiles.discard(empty_set)
-                    # create temporary parameter
-                    from testkithttpd import check_server_running
-                    for test_xml_set in test_xml_set_list:
-                        print "\n[ run set: %s ]" % test_xml_set
-                        if self.first_run:
-                            exe_sequence_tmp = []
-                            exe_sequence_tmp.append(webapi_total_file)
-                            testresult_dict_tmp = {}
-                            testresult_dict_item_tmp = []
-                            testresult_dict_item_tmp.append(test_xml_set)
-                            testresult_dict_tmp[webapi_total_file] = testresult_dict_item_tmp
-                            # start server with temporary parameter
-                            self.execute_external_test(testresult_dict_tmp, exe_sequence_tmp, test_xml_set)
-                        else:
-                            xml_package = (test_xml_set, webapi_total_file, test_xml_set)
-                            self.reload_xml_to_server(xml_package)
-                        while True:
-                            time.sleep(5)
-                            if check_server_running():
-                                break
-                except Exception, e:
-                    print "[ Error: fail to run webapi test xml, error: %s ]" % e
-        # shut down server
-        try:
-            if not self.first_run:
-                from testkithttpd import shut_down_server
-                shut_down_server()
-        except Exception, e:
-            print "[ Error: fail to close webapi http server, error: %s ]" % e
-        
-        # run core manual cases
+            self.__run_with_commodule(core_auto_file)
+
+    def __run_core_manual(self):
+        """ core manual cases run """
+        self.core_manual_files.sort()
         for core_manual_file in self.core_manual_files:
             temp_test_xml = os.path.splitext(core_manual_file)[0]
             temp_test_xml = os.path.splitext(temp_test_xml)[0]
@@ -335,153 +301,276 @@ class TRunner:
                 self.current_test_xml = temp_test_xml
             if self.non_active:
                 self.skip_all_manual = True
-            self.execute(core_manual_file, core_manual_file)
-            
+            else:
+                self.__run_with_commodule(core_manual_file)
+
+    def __run_webapi_test(self, latest_dir):
+        """ run webAPI test"""
+        if self.bdryrun:
+            print "[ WRTLauncher mode does not support dryrun ]"
+            return True
+
+        list_auto = []
+        list_manual = []
+        for i in self.exe_sequence:
+            if i[-4::1] == "auto":
+                list_auto.append(i)
+            if i[-6::1] == "manual":
+                list_manual.append(i)
+        list_auto.sort()
+        list_manual.sort()
+        self.exe_sequence = []
+        self.exe_sequence.extend(list_auto)
+        self.exe_sequence.extend(list_manual)
+
+        for webapi_total_file in self.exe_sequence:
+            for webapi_file in self.testsuite_dict[webapi_total_file]:
+                # print identical xml file name
+                if self.current_test_xml != JOIN(latest_dir, webapi_total_file):
+                    time.sleep(3)
+                    print "\n[ testing xml: %s.xml ]\n" \
+                        % JOIN(latest_dir, webapi_total_file)
+                    self.current_test_xml = JOIN(latest_dir, webapi_total_file)
+
+                self.__run_with_commodule(webapi_file)
+
+    def __run_with_commodule(self, webapi_file):
+        """run_with_commodule,Initialization,check status,get result"""
+        try:
+            # prepare test set list
+            test_xml_set_list = self.__split_xml_to_set(webapi_file)
+            # create temporary parameter
+            for test_xml_set in test_xml_set_list:
+                print "\n[ run set: %s ]" % test_xml_set
+                # prepare the test JSON
+                self.__prepare_external_test_json(test_xml_set)
+
+                # init test here
+                init_status = self.__init_com_module(test_xml_set)
+                if not init_status:
+                    continue
+                # send set JSON Data to com_module
+                self.connector.run_test(
+                    self.session_id, self.set_parameters)
+                while True:
+                    time.sleep(1)
+                    # check the test status ,if the set finished,get
+                    # the set_result,and finalize_test
+                    if self.__check_test_status():
+                        set_result = self.connector.get_test_result(
+                            self.session_id)
+                        # write_result to set_xml
+                        self.__write_set_result(
+                            test_xml_set, set_result)
+                        # shut down server
+                        self.__shut_down_server(self.session_id)
+                        break
+        except IOError, error:
+            print "[ Error: fail to run webapi test xml, \
+            error: %s ]" % error
+
+    def __split_xml_to_set(self, webapi_file):
+        """split xml by <set>"""
+
+        print "[ split xml: %s by <set> ]" % webapi_file
+        print "[ this might take some time, please wait ]"
+        set_number = 1
+        test_xml_set_list = []
+        self.resultfiles.discard(webapi_file)
+        test_xml_temp = etree.parse(webapi_file)
+        for test_xml_temp_suite in test_xml_temp.getiterator('suite'):
+            while set_number <= len(test_xml_temp_suite.getiterator('set')):
+                copy_url = os.path.splitext(webapi_file)[0]
+                copy_url += "_set_%s.xml" % set_number
+                copyfile(webapi_file, copy_url)
+                test_xml_set_list.append(copy_url)
+                self.resultfiles.add(copy_url)
+                set_number += 1
+        time.sleep(3)
+        set_number -= 1
+        print "[ total set number is: %s ]" % set_number
+
+        # only keep one set in each xml file and remove empty set
+        test_xml_set_list_empty = []
+        for test_xml_set in test_xml_set_list:
+            test_xml_set_tmp = etree.parse(test_xml_set)
+            set_keep_number = 1
+            print "[ process set: %s ]" % test_xml_set
+            for temp_suite in test_xml_set_tmp.getiterator('suite'):
+                for test_xml_set_temp_set in temp_suite.getiterator('set'):
+                    if set_keep_number != set_number:
+                        temp_suite.remove(test_xml_set_temp_set)
+                    else:
+                        if not test_xml_set_temp_set.getiterator('testcase'):
+                            test_xml_set_list_empty.append(test_xml_set)
+                    set_keep_number += 1
+            set_number -= 1
+            test_xml_set_tmp.write(test_xml_set)
+            # with open(test_xml_set, 'w') as output:
+            #     root = test_xml_set_tmp.getroot()
+            #     tree = etree.ElementTree(element=root)
+            #     tree.write(output)
+        for empty_set in test_xml_set_list_empty:
+            print "[ remove empty set: %s ]" % empty_set
+            test_xml_set_list.remove(empty_set)
+            self.resultfiles.discard(empty_set)
+
+        return test_xml_set_list
+
+    def merge_resultfile(self, start_time, latest_dir):
+        """ merge_result_file """
         mergefile = mktemp(suffix='.xml', prefix='tests.', dir=latest_dir)
         mergefile = os.path.splitext(mergefile)[0]
         mergefile = os.path.splitext(mergefile)[0]
-        mergefile = "%s.result" % _b(mergefile)
+        mergefile = "%s.result" % BASENAME(mergefile)
         mergefile = "%s.xml" % mergefile
-        mergefile = _j(latest_dir, mergefile)
+        mergefile = JOIN(latest_dir, mergefile)
         end_time = datetime.today().strftime("%Y-%m-%d_%H_%M_%S")
         print "\n[ test complete at time: %s ]" % end_time
-        print "[ start merging test result xml files, this might take some time, please wait ]"
+        print "[ start merging test result xml files, \
+        this might take some time, please wait ]"
         print "[ merge result files into %s ]" % mergefile
         root = etree.Element('test_definition')
         root.tail = "\n"
         totals = set()
-        # create core and webapi set
-        resultfiles_core = set()
-        for auto_file in self.core_auto_files:
-            resultfiles_core.add(auto_file)
-        for manual_file in self.core_manual_files:
-            resultfiles_core.add(manual_file)
-        resultfiles_webapi = self.resultfiles
-        for resultfile_core in resultfiles_core:
-            resultfiles_webapi.discard(resultfile_core)
-        # merge core result files
-        for resultfile_core in resultfiles_core:
-            totalfile = os.path.splitext(resultfile_core)[0]
-            totalfile = os.path.splitext(totalfile)[0]
-            totalfile = os.path.splitext(totalfile)[0]
-            totalfile = "%s.total" % totalfile
-            totalfile = "%s.xml" % totalfile
-            total_xml = etree.parse(totalfile)
-            
-            result_xml = etree.parse(resultfile_core)
-            print "|--[ merge core result file: %s ]" % resultfile_core
-                    
-            for total_suite in total_xml.getiterator('suite'):
-                for total_set in total_suite.getiterator('set'):
-                    for result_suite in result_xml.getiterator('suite'):
-                        for result_set in result_suite.getiterator('set'):
-                            # when total xml and result xml have same suite name and set name
-                            if result_set.get('name') == total_set.get('name') and result_suite.get('name') == total_suite.get('name'):
-                                # set cases that doesn't have result in result set to N/A
-                                # append cases from result set to total set
-                                result_case_iterator = result_set.getiterator('testcase')
-                                if result_case_iterator:
-                                    print "`----[ suite: %s, set: %s, time: %s ]" % (result_suite.get('name'), result_set.get('name'), datetime.today().strftime("%Y-%m-%d_%H_%M_%S"))
-                                    for result_case in result_case_iterator:
-                                        try:
-                                            if not result_case.get('result'):
-                                                result_case.set('result', 'N/A')
-                                            if result_case.get('result') == "PASS":
-                                                self.testresult_dict["pass"] += 1
-                                            if result_case.get('result') == "FAIL":
-                                                self.testresult_dict["fail"] += 1
-                                            if result_case.get('result') == "BLOCK":
-                                                self.testresult_dict["block"] += 1
-                                            if result_case.get('result') == "N/A":
-                                                self.testresult_dict["not_run"] += 1
-                                            total_set.append(result_case)
-                                        except Exception, e:
-                                            print "[ Error: fail to append %s, error: %s ]" % (result_case.get('id'), e)
-            total_xml.write(totalfile)
-            totals.add(totalfile)
-        # merge webapi result files
-        for resultfile_webapi in resultfiles_webapi:
-            totalfile = os.path.splitext(resultfile_webapi)[0]
+
+        # merge result files
+        resultfiles = self.resultfiles
+        totals = self.__merge_result(resultfiles, totals)
+
+        for total in totals:
+            result_xml = etree.parse(total)
+            for suite in result_xml.getiterator('suite'):
+                suite.tail = "\n"
+                root.append(suite)
+        # print test summary
+        self.__print_summary()
+        # generate actual xml file
+        print "[ generate result xml: %s ]" % mergefile
+        if self.skip_all_manual:
+            print "[ some results of core manual cases are N/A, \
+            please refer to the above result file ]"
+        print "[ merge complete, write to the result file, \
+        this might take some time, please wait ]"
+        # get useful info for xml
+        # add environment node
+        # add summary node
+        root.insert(0, self.__get_summary(start_time, end_time))
+        root.insert(0, self.__get_environment())
+        # add XSL support to testkit-lite
+        declaration_text = """<?xml version="1.0" encoding="UTF-8"?>
+        <?xml-stylesheet type="text/xsl" href="testresult.xsl"?>\n"""
+        try:
+            with open(mergefile, 'w') as output:
+                output.write(declaration_text)
+                tree = etree.ElementTree(element=root)
+                tree.write(output, xml_declaration=False, encoding='utf-8')
+        except IOError, error:
+            print "[ Error: merge result file failed, error: %s ]" % error
+        # change &lt;![CDATA[]]&gt; to <![CDATA[]]>
+        replace_cdata(mergefile)
+        # copy result to -o option
+        try:
+            if self.resultfile:
+                if os.path.splitext(self.resultfile)[-1] == '.xml':
+                    if not os.path.exists(os.path.dirname(self.resultfile)):
+                        os.makedirs(os.path.dirname(self.resultfile))
+                    print "[ copy result xml to output file: %s ]" % self.resultfile
+                    copyfile(mergefile, self.resultfile)
+                else:
+                    print "[ Please specify and xml file for result output, not:%s ]" % self.resultfile
+        except IOError, error:
+            print "[ Error: fail to copy the result file to: %s, \
+            please check if you have created its parent directory, \
+            error: %s ]" % (self.resultfile, error)
+
+    def __merge_result(self, setresultfiles, totals):
+        """ merge set result to total"""
+        resultfiles = setresultfiles
+        for resultfile in resultfiles:
+            totalfile = os.path.splitext(resultfile)[0]
             totalfile = os.path.splitext(totalfile)[0]
             totalfile = os.path.splitext(totalfile)[0]
             totalfile = "%s.total" % totalfile
             totalfile = "%s.xml" % totalfile
             total_xml = etree.parse(totalfile)
-            
-            print "|--[ merge webapi result file: %s ]" % resultfile_webapi
-            result_xml = etree.parse(resultfile_webapi)
+
+            print "|--[ merge webapi result file: %s ]" % resultfile
+            result_xml = etree.parse(resultfile)
             for total_suite in total_xml.getiterator('suite'):
                 for total_set in total_suite.getiterator('set'):
                     for result_suite in result_xml.getiterator('suite'):
                         for result_set in result_suite.getiterator('set'):
-                            # when total xml and result xml have same suite name and set name
+                            # when total xml and result xml have same suite
+                            # name and set name
                             if result_set.get('name') == total_set.get('name') and result_suite.get('name') == total_suite.get('name'):
                                 # set cases that doesn't have result in result set to N/A
                                 # append cases from result set to total set
-                                result_case_iterator = result_set.getiterator('testcase')
+                                result_case_iterator = result_set.getiterator(
+                                    'testcase')
                                 if result_case_iterator:
-                                    print "`----[ suite: %s, set: %s, time: %s ]" % (result_suite.get('name'), result_set.get('name'), datetime.today().strftime("%Y-%m-%d_%H_%M_%S"))
+                                    print "----[ suite: %s, set: %s, time: %s ]" % (result_suite.get('name'), result_set.get('name'), datetime.today().strftime("%Y-%m-%d_%H_%M_%S"))
                                     for result_case in result_case_iterator:
                                         try:
-                                            if not result_case.get('result'):
-                                                result_case.set('result', 'N/A')
-                                            if result_case.get('result') == "PASS":
-                                                self.testresult_dict["pass"] += 1
-                                            if result_case.get('result') == "FAIL":
-                                                self.testresult_dict["fail"] += 1
-                                            if result_case.get('result') == "BLOCK":
-                                                self.testresult_dict["block"] += 1
-                                            if result_case.get('result') == "N/A":
-                                                self.testresult_dict["not_run"] += 1
+                                            self.__count_result(result_case)
                                             total_set.append(result_case)
-                                        except Exception, e:
-                                            print "[ Error: fail to append %s, error: %s ]" % (result_case.get('id'), e)
+                                        except IOError, error:
+                                            print "[ Error: fail to append %s, error: %s ]" % (result_case.get('id'), error)
             total_xml.write(totalfile)
             totals.add(totalfile)
-        for total in totals:
-            result_xml = etree.parse(total)
-            for suite in result_xml.getiterator('suite'):
-                suite.tail = "\n"
-                root.append(suite)
-        try:
-            with open(mergefile, 'w') as output:
-                tree = etree.ElementTree(element=root)
-                tree.write(output)
-        except IOError, e:
-            print "[ Error: merge result file failed, error: %s ]" % e
-        # report the result using xml mode
-        print "[ generate result xml: %s ]" % mergefile
-        if self.skip_all_manual:
-            print "[ some results of core manual cases are N/A, the result file is at %s ]" % mergefile
-        print "[ test summary ]"
-        total_case_number = int(self.testresult_dict["pass"]) + int(self.testresult_dict["fail"]) + int(self.testresult_dict["block"]) + int(self.testresult_dict["not_run"])
-        print "  [ total case number: %s ]" % (total_case_number)
-        if total_case_number == 0:
-            print "[Warning: found 0 case from the result files, if it's not right, please check the test xml files, or the filter values ]"
-        else:
-            print "  [ pass rate: %.2f%% ]" % (int(self.testresult_dict["pass"]) * 100 / int(total_case_number))
-            print "  [ PASS case number: %s ]" % self.testresult_dict["pass"]
-            print "  [ FAIL case number: %s ]" % self.testresult_dict["fail"]
-            print "  [ BLOCK case number: %s ]" % self.testresult_dict["block"]
-            print "  [ N/A case number: %s ]" % self.testresult_dict["not_run"]
-        print "[ merge complete, write to the result file, this might take some time, please wait ]"
-        
-        ep = etree.parse(mergefile)
-        rt = ep.getroot()
-        device_info = self.get_device_info()
+        return totals
+
+    def __count_result(self, result_case):
+        """ record the pass,failed,block,N/A case number"""
+
+        if not result_case.get('result'):
+            result_case.set('result', 'N/A')
+            # add empty result node structure for N/A case
+            resinfo_elm = etree.Element('result_info')
+            res_elm = etree.Element('actual_result')
+            start_elm = etree.Element('start')
+            end_elm = etree.Element('end')
+            stdout_elm = etree.Element('stdout')
+            stderr_elm = etree.Element('stderr')
+            resinfo_elm.append(res_elm)
+            resinfo_elm.append(start_elm)
+            resinfo_elm.append(end_elm)
+            resinfo_elm.append(stdout_elm)
+            resinfo_elm.append(stderr_elm)
+            result_case.append(resinfo_elm)
+            res_elm.text = 'N/A'
+        if result_case.get('result') == "PASS":
+            self.testresult_dict["pass"] += 1
+        if result_case.get('result') == "FAIL":
+            self.testresult_dict["fail"] += 1
+        if result_case.get('result') == "BLOCK":
+            self.testresult_dict["block"] += 1
+        if result_case.get('result') == "N/A":
+            self.testresult_dict["not_run"] += 1
+
+    def __get_environment(self):
+        """ get environment """
+        device_info = self.connector.get_device_info(self.deviceid)
+        # add environment node
         environment = etree.Element('environment')
-        environment.attrib['device_id'] = "Empty device_id"
+        environment.attrib['device_id'] = ""
         environment.attrib['device_model'] = device_info["device_model"]
         environment.attrib['device_name'] = device_info["device_name"]
-        environment.attrib['firmware_version'] = "Empty firmware_version"
-        environment.attrib['host'] = "Empty host"
+        environment.attrib['firmware_version'] = ""
+        environment.attrib['host'] = ""
         environment.attrib['os_version'] = device_info["os_version"]
         environment.attrib['resolution'] = device_info["resolution"]
         environment.attrib['screen_size'] = device_info["screen_size"]
+        environment.attrib['cts_version'] = get_version_info()
         other = etree.Element('other')
-        other.text = "Here is a String for testing"
+        other.text = ""
         environment.append(other)
         environment.tail = "\n"
+
+        return environment
+
+    def __get_summary(self, start_time, end_time):
+        """ set summary node """
         summary = etree.Element('summary')
         summary.attrib['test_plan_name'] = "Empty test_plan_name"
         start_at = etree.Element('start_at')
@@ -491,305 +580,417 @@ class TRunner:
         summary.append(start_at)
         summary.append(end_at)
         summary.tail = "\n  "
-        rt.insert(0, summary)
-        rt.insert(0, environment)
-        # add XSL support to testkit-lite
-        DECLARATION = """<?xml version="1.0" encoding="UTF-8"?>
-<?xml-stylesheet type="text/xsl" href="testresult.xsl"?>\n"""
-        with open(mergefile, 'w') as output:
-            output.write(DECLARATION)
-            ep.write(output, xml_declaration=False, encoding='utf-8')
-        # change &lt;![CDATA[]]&gt; to <![CDATA[]]>
-        self.replace_cdata(mergefile)
-        
-        try:
-            if self.resultfile:
-                copyfile(mergefile, self.resultfile)
-        except Exception, e:
-            print "[ Error: fail to copy the result file to: %s, please check if you have created its parent directory, error: %s ]" % (self.resultfile, e)
-
-    def get_device_info(self):
-        device_info = {}
-        resolution_str = "Empty resolution"
-        screen_size_str = "Empty screen_size"
-        device_model_str = "Empty device_model"
-        device_name_str = "Empty device_name"
-        os_version_str = ""
-        # get resolution and screen size
-        fi, fo, fe = os.popen3("xrandr")
-        for line in fo.readlines():
-            pattern = re.compile('connected (\d+)x(\d+).* (\d+mm) x (\d+mm)')
-            match = pattern.search(line)
-            if match:
-                resolution_str = "%s x %s" % (match.group(1), match.group(2))
-                screen_size_str = "%s x %s" % (match.group(3), match.group(4))
-        # get architecture
-        fi, fo, fe = os.popen3("uname -m")
-        device_model_str_tmp = fo.readline()
-        if len(device_model_str_tmp) > 1:
-            device_model_str = device_model_str_tmp[0:-1]
-        # get hostname
-        fi, fo, fe = os.popen3("uname -n")
-        device_name_str_tmp = fo.readline()
-        if len(device_name_str_tmp) > 1:
-            device_name_str = device_name_str_tmp[0:-1]
-        # get os version
-        fi, fo, fe = os.popen3("cat /etc/issue")
-        for line in fo.readlines():
-            if len(line) > 1:
-                os_version_str = "%s %s" % (os_version_str, line)
-        os_version_str = os_version_str[0:-1]
-        
-        device_info["resolution"] = resolution_str
-        device_info["screen_size"] = screen_size_str
-        device_info["device_model"] = device_model_str
-        device_info["device_name"] = device_name_str
-        device_info["os_version"] = os_version_str
-        
-        return device_info
-
-    def pretty_print(self, ep, resultfile):
-        rawstr = etree.tostring(ep.getroot(), 'utf-8')
-        t = minidom.parseString(rawstr)
-        open(resultfile, 'w+').write(t.toprettyxml(indent="  "))
-
-    def execute_external_test(self, testsuite, exe_sequence, resultfile):
+        return summary
+
+    def __print_summary(self):
+        """ print test summary infomation"""
+        print "[ test summary ]"
+        total_case_number = int(self.testresult_dict["pass"]) \
+            + int(self.testresult_dict["fail"]) \
+            + int(self.testresult_dict["block"]) \
+            + int(self.testresult_dict["not_run"])
+        print "  [ total case number: %s ]" % (total_case_number)
+        if total_case_number == 0:
+            print "[Warning: found 0 case from the result files, \
+            if it's not right, please check the test xml files, or the filter values ]"
+        else:
+            print "  [ pass rate: %.2f%% ]" % (int(self.testresult_dict["pass"]) * 100 / int(total_case_number))
+            print "  [ PASS case number: %s ]" % self.testresult_dict["pass"]
+            print "  [ FAIL case number: %s ]" % self.testresult_dict["fail"]
+            print "  [ BLOCK case number: %s ]" % self.testresult_dict["block"]
+            print "  [ N/A case number: %s ]" % self.testresult_dict["not_run"]
+
+    def __prepare_external_test_json(self, resultfile):
         """Run external test"""
-        from testkithttpd import startup
-        if self.bdryrun:
-            print "[ WRTLauncher mode does not support dryrun ]"
-            return True
-        # start http server in here
+        parameters = {}
+        xml_set_tmp = resultfile
+        # split set_xml by <case> get case parameters
+        print "[ split xml: %s by <case> ]" % xml_set_tmp
+        print "[ this might take some time, please wait ]"
         try:
-            parameters = {}
-            parameters.setdefault("pid_log", self.pid_log)
-            parameters.setdefault("testsuite", testsuite)
-            parameters.setdefault("exe_sequence", exe_sequence)
-            parameters.setdefault("client_command", self.external_test)
-            if self.fullscreen:
-                parameters.setdefault("hidestatus", "1")
-            else:
-                parameters.setdefault("hidestatus", "0")
-            parameters.setdefault("resultfile", resultfile)
-            parameters.setdefault("enable_memory_collection", self.enable_memory_collection)
-            # kill existing http server
-            http_server_pid = "none"
-            fi, fo, fe = os.popen3("netstat -tpa | grep 8000")
-            for line in fo.readlines():
-                pattern = re.compile('([0-9]*)\/python')
-                match = pattern.search(line)
-                if match:
-                    http_server_pid = match.group(1)
-                    print "[ kill existing http server, pid: %s ]" % http_server_pid
-                    killall(http_server_pid)
-            if http_server_pid == "none":
-                print "[ start new http server ]"
-            else:
-                print "[ start new http server in 3 seconds ]"
-                time.sleep(3)
-            self.first_run = False
-            startup(parameters)
-        except Exception, e:
-            print "[ Error: fail to start http server, error: %s ]\n" % e
-        return True
+            parse_tree = etree.parse(xml_set_tmp)
+            root_em = parse_tree.getroot()
+            case_tmp = []
+            for tset in root_em.getiterator('set'):
+                case_order = 1
+                parameters.setdefault(
+                    "casecount", str(len(tset.getiterator('testcase')))
+                )
+                parameters.setdefault("current_set_name", xml_set_tmp)
 
-    def reload_xml_to_server(self, xml_package):
-        from testkithttpd import reload_xml
-        try:
-            print "[ reload xml file to the http server ]"
-            reload_xml(xml_package)
-        except Exception, e:
-            print "[ Error: fail to reload xml to the http server, error: %s ]\n" % e
+                for tcase in tset.getiterator('testcase'):
+                    case_detail_tmp = {}
+                    step_tmp = []
+                    parameters.setdefault(
+                        "exetype", tcase.get('execution_type')
+                    )
+
+                    parameters.setdefault("type", tcase.get('type'))
+                    case_detail_tmp.setdefault("case_id", tcase.get('id'))
+                    case_detail_tmp.setdefault("purpose", tcase.get('purpose'))
+                    case_detail_tmp.setdefault("order", str(case_order))
+                    case_detail_tmp.setdefault("onload_delay", "3")
+
+                    if tcase.find('description/test_script_entry') is not None:
+                        case_detail_tmp["entry"] = tcase.find(
+                            'description/test_script_entry').text
+                        if tcase.find('description/test_script_entry').get('timeout'):
+                            case_detail_tmp["timeout"] = tcase.find(
+                                'description/test_script_entry').get('timeout')
+                        if tcase.find('description/test_script_entry').get('test_script_expected_result'):
+                            case_detail_tmp["expected_result"] = tcase.find(
+                                'description/test_script_entry').get('test_script_expected_result')
+                    for this_step in tcase.getiterator("step"):
+                        step_detail_tmp = {}
+                        step_detail_tmp.setdefault("order", "1")
+                        step_detail_tmp["order"] = str(this_step.get('order'))
+
+                        if this_step.find("step_desc") is not None:
+                            text = this_step.find("step_desc").text
+                            if text is not None:
+                                step_detail_tmp["step_desc"] = text
+
+                        if this_step.find("expected") is not None:
+                            text = this_step.find("expected").text
+                            if text is not None:
+                                step_detail_tmp["expected"] = text
+
+                        step_tmp.append(step_detail_tmp)
+
+                    case_detail_tmp['steps'] = step_tmp
+
+                    if tcase.find('description/pre_condition') is not None:
+                        text = tcase.find('description/pre_condition').text
+                        if text is not None:
+                            case_detail_tmp["pre_condition"] = text
+
+                    if tcase.find('description/post_condition') is not None:
+                        text = tcase.find('description/post_condition').text
+                        if text is not None:
+                            case_detail_tmp['post_condition'] = text
+
+                    if tcase.get('onload_delay') is not None:
+                        case_detail_tmp[
+                            'onload_delay'] = tcase.get('onload_delay')
+                    # Check performance test
+                    if tcase.find('measurement') is not None:
+                        measures = tcase.getiterator('measurement')
+                        measures_array = []
+                        for m in measures:
+                            measure_json = {}
+                            measure_json['name'] = m.get('name')
+                            measure_json['file'] = m.get('file')
+                            measures_array.append(measure_json)
+                        case_detail_tmp['measures'] = measures_array
+                    case_tmp.append(case_detail_tmp)
+                    case_order += 1
+            parameters.setdefault("cases", case_tmp)
+            if self.bdryrun:
+                parameters.setdefault("dryrun", True)
+            self.set_parameters = parameters
+
+        except IOError, error:
+            print "[ Error: fail to prepare cases parameters, \
+            error: %s ]\n" % error
+            return False
         return True
 
-    def apply_filter(self, rt):
-        def case_check(tc):
-            rules = self.filter_rules
-            for key in rules.iterkeys():
-                if key in ["suite", "set"]:
-                    continue
-                # Check attribute
-                t_val = tc.get(key)
-                if t_val:
-                    if not t_val in rules[key]:
-                        return False
-                else:
-                    # Check sub-element
-                    items = tc.getiterator(key)
-                    if items: 
-                        t_val = []
-                        for i in items:
-                            t_val.append(i.text)
-                        if len(set(rules[key]) & set(t_val)) == 0:
-                            return False
-            return True
-        
+    def apply_filter(self, root_em):
+        """ apply filter """
         rules = self.filter_rules
-        for tsuite in rt.getiterator('suite'):
+        for tsuite in root_em.getiterator('suite'):
             if rules.get('suite'):
                 if tsuite.get('name') not in rules['suite']:
-                    rt.remove(tsuite)
+                    root_em.remove(tsuite)
             for tset in tsuite.getiterator('set'):
                 if rules.get('set'):
                     if tset.get('name') not in rules['set']:
                         tsuite.remove(tset)
-                       
-        for tset in rt.getiterator('set'):
-            for tc in tset.getiterator('testcase'):
-                if not case_check(tc):
-                    tset.remove(tc)
-
-    def execute(self, testxmlfile, resultfile):
-        def exec_testcase(case, total_number, current_number):
-            case_result = "BLOCK"
-            return_code = None
-            stderr = "none"
-            stdout = "none"
-            # print case info
-            test_script_entry = "none"
-            expected_result = "0"
-            actual_result = "none"
-            testentry_elm = case.find('description/test_script_entry')
-            if testentry_elm is not None:
-                test_script_entry = testentry_elm.text
-                expected_result = testentry_elm.get('test_script_expected_result', "0")
-            print "\n[case] execute case:\nTestCase: %s\nTestEntry: %s\nExpected Result: %s\nTotal: %s, Current: %s" % (case.get("id"), test_script_entry, expected_result, total_number, current_number)
-            # execute test script
-            if testentry_elm is not None:
-                if self.bdryrun:
-                    return_code, stderr, stdout = "none", "Dryrun error info", "Dryrun output"
-                else:
-                    print "[ execute test script, this might take some time, please wait ]"
-                    if testentry_elm.text is None:
-                        print "[ Warnning: test script is empty, please check your test xml file ]"
-                    else:
-                        try:
-                            if testentry_elm.get('timeout'):
-                                return_code, stdout, stderr = \
-                                shell_exec(testentry_elm.text, "no_log", str2number(testentry_elm.get('timeout')), False)
-                            else:
-                                return_code, stdout, stderr = \
-                                shell_exec(testentry_elm.text, "no_log", 90, False)
-                            if return_code is not None:
-                                actual_result = str(return_code)
-                            print "Script Return Code: %s" % actual_result
-                        except Exception, e:
-                            print "[ Error: fail to execute test script, error: %s ]\n" % e
-            # Construct result info node
-            resinfo_elm = etree.Element('result_info')
-            res_elm = etree.Element('actual_result')
-            start_elm = etree.Element('start')
-            end_elm = etree.Element('end')
-            stdout_elm = etree.Element('stdout')
-            stderr_elm = etree.Element('stderr')
-            resinfo_elm.append(res_elm)
-            resinfo_elm.append(start_elm)
-            resinfo_elm.append(end_elm)
-            resinfo_elm.append(stdout_elm)
-            resinfo_elm.append(stderr_elm)
-            case.append(resinfo_elm)
-            start_elm.text = datetime.today().strftime("%Y-%m-%d_%H_%M_%S")
-            res_elm.text = actual_result
-            stdout_elm.text = stdout
-            stderr_elm.text = stderr
-            # handle manual core cases
-            if case.get('execution_type') == 'manual':
-                case.set('result', 'BLOCK')
-                try:
-                    # print pre-condition info
-                    precondition_elm = case.find('description/pre_condition')
-                    if precondition_elm is not None:
-                        print "\n********************\nPre-condition: %s\n********************\n" % precondition_elm.text
-                    # print step info
-                    for this_step in case.getiterator("step"):
-                        step_desc = "none"
-                        expected = "none"
-                        order = this_step.get("order")
-                        stepdesc_elm = this_step.find("step_desc")
-                        expected_elm = this_step.find("expected")
-                        if stepdesc_elm is not None:
-                            step_desc = stepdesc_elm.text
-                        if expected_elm is not None:
-                            expected = expected_elm.text
-                        print "********************\nStep Order: %s" % order
-                        print "Step Desc: %s" % step_desc
-                        print "Expected: %s\n********************\n" % expected
-                    if self.skip_all_manual:
-                        case_result = "N/A"
-                    else:
-                        while True:
-                            test_result = raw_input('[ please input case result ](p^PASS, f^FAIL, b^BLOCK, n^Next, d^Done):')
-                            if test_result == 'p':
-                                case_result = "PASS"
-                                break
-                            elif test_result == 'f':
-                                case_result = "FAIL"
-                                break
-                            elif test_result == 'b':
-                                case_result = "BLOCK"
-                                break
-                            elif test_result == 'n':
-                                case_result = "N/A"
-                                break
-                            elif test_result == 'd':
-                                case_result = "N/A"
-                                self.skip_all_manual = True
-                                break
-                            else:
-                                print "[ Warnning: you input: '%s' is invalid, please try again ]" % test_result
-                except Exception, e:
-                    print "[ Error: fail to get core manual test step, error: %s ]\n" % e
-            # handle auto core cases
+
+            for tsuite in root_em.getiterator('suite'):
+                for tset in tsuite.getiterator('set'):
+                    # if there are capabilities ,do filter
+                    if self.has_capability:
+                        tset_status = self.__apply_capability_filter_set(tset)
+                        if not tset_status:
+                            tsuite.remove(tset)
+                            continue
+                    for tcase in tset.getiterator('testcase'):
+                        if not self.__apply_filter_case_check(tcase):
+                            tset.remove(tcase)
+
+    def __apply_filter_case_check(self, tcase):
+        """filter cases"""
+        rules = self.filter_rules
+        for key in rules.iterkeys():
+            if key in ["suite", "set"]:
+                continue
+            # Check attribute
+            t_val = tcase.get(key)
+            if t_val:
+                if not t_val in rules[key]:
+                    return False
             else:
-                case_result = "BLOCK"
-                end_elm.text = datetime.today().strftime("%Y-%m-%d_%H_%M_%S")
-                # set test result
-                if return_code is not None:
-                    if actual_result == "time_out":
-                        case_result = "BLOCK"
-                    else:
-                        if expected_result == actual_result:
-                            case_result = "PASS"
-                        else:
-                            case_result = "FAIL"
-            case.set('result', case_result)
-            end_elm.text = datetime.today().strftime("%Y-%m-%d_%H_%M_%S")
-            print "Case Result: %s" % case_result
-            # Check performance test
-            measures = case.getiterator('measurement')
-            for m in measures:
-                ind = m.get('name')
-                fname = m.get('file')
-                if fname and _e(fname):
-                    try:
-                        config = ConfigParser.ConfigParser()
-                        config.read(fname)
-                        val = config.get(ind, 'value')
-                        m.set('value', val)
-                    except Exception, e:
-                        print "[ Error: fail to parse performance value, error: %s ]\n" % e
-        # execute cases
+                # Check sub-element
+                items = tcase.getiterator(key)
+                if items:
+                    t_val = []
+                    for i in items:
+                        t_val.append(i.text)
+                    if len(set(rules[key]) & set(t_val)) == 0:
+                        return False
+        return True
+
+    def __apply_capability_filter_set(self, tset):
+        """ check the set required capability with  self.capabilities """
+
+        for tcaps in tset.getiterator('capabilities'):
+            for tcap in tcaps.getiterator('capability'):
+                capname = None
+                capvalue = None
+                capname = tcap.get('name').lower()
+                if tcap.find('value') is not None:
+                    capvalue = tcap.find('value').text
+
+                if capname in self.capabilities:
+                    if capvalue is not None:
+                        if capvalue != self.capabilities[capname]:
+                            # if capability value is not equal ,remove the case
+                            return False
+                else:
+                    # if does not hava this capability ,remove case
+                    return False
+        return True
+
+    # sdx@kooltux.org: parse measures returned by test script
+    # and insert in XML result
+    # see xsd/test_definition.xsd: measurementType
+    _MEASURE_ATTRIBUTES = ['name', 'value', 'unit',
+                           'target', 'failure', 'power']
+
+    def __insert_measures(self, case, buf, pattern="###[MEASURE]###"):
+        """ get measures """
+        measures = self.__extract_measures(buf, pattern)
+        for measure in measures:
+            m_elm = etree.Element('measurement')
+            for key in measure:
+                m_elm.attrib[key] = measure[key]
+            case.append(m_elm)
+
+    def __extract_measures(self, buf, pattern):
+        """
+        This function extracts lines from <buf> containing the defined <pattern>.
+        For each line containing the pattern, it extracts the string to the end of line
+        Then it splits the content in multiple fields using the defined separator <field_sep>
+        and maps the fields to measurement attributes defined in xsd
+        Finally, a list containing all measurement objects found in input buffer is returned
+        """
+        out = []
+        for line in buf.split("\n"):
+            pos = line.find(pattern)
+            if pos < 0:
+                continue
+
+            measure = {}
+            elts = collections.deque(line[pos + len(pattern):].split(':'))
+            for k in self._MEASURE_ATTRIBUTES:
+                if len(elts) == 0:
+                    measure[k] = ''
+                else:
+                    measure[k] = elts.popleft()
+
+            # don't accept unnamed measure
+            if measure['name'] != '':
+                out.append(measure)
+        return out
+
+    def __init_com_module(self, testxml):
+        """
+            send init test to com_module
+            if webapi test,com_module will start httpserver
+            else com_module send the test case to devices
+        """
+        starup_prms = self.__prepare_starup_parameters(testxml)
+        # init stub and get the session_id
+        session_id = self.connector.init_test(self.deviceid, starup_prms)
+        if session_id == None:
+            print "[ Error: Initialization Error]"
+            return False
+        else:
+            self.set_session_id(session_id)
+            return True
+
+    def __prepare_starup_parameters(self, testxml):
+        """ prepare_starup_parameters """
+
+        starup_parameters = {}
+        print "[ prepare_starup_parameters ]"
         try:
-            ep = etree.parse(testxmlfile)
-            rt = ep.getroot()
-            total_number = 0
-            current_number = 0
-            for tsuite in rt.getiterator('suite'):
-                for tset in tsuite.getiterator('set'):
-                    for tc in tset.getiterator('testcase'):
-                        total_number += 1
-            for tsuite in rt.getiterator('suite'):
-                for tset in tsuite.getiterator('set'):
-                    for tc in tset.getiterator('testcase'):
-                        current_number += 1
-                        exec_testcase(tc, total_number, current_number)
-            ep.write(resultfile)
+            parse_tree = etree.parse(testxml)
+            tsuite = parse_tree.getroot().getiterator('suite')[0]
+            starup_parameters['client-command'] = tsuite.get("launcher")
+            starup_parameters['testsuite-name'] = tsuite.get("name")
+            starup_parameters['stub-name'] = self.stub_name
+            starup_parameters['external-test'] = self.external_test
+            starup_parameters['debug'] = self.debug
+            if len(self.capabilities) > 0:
+                starup_parameters['capability'] = self.capabilities
+        except IOError, error:
+            print "[ Error: prepare starup parameters, error: %s ]" % error
+        return starup_parameters
+
+    def __write_set_result(self, testxmlfile, result):
+        '''
+            get the result JSON form com_module,
+            write them to orignal testxmlfile
+
+        '''
+        # write the set_result to set_xml
+        set_result_json = result
+        set_result_xml = testxmlfile
+        # covert JOSN to python dict string
+        set_result = set_result_json
+        case_results = set_result["cases"]
+        try:
+            parse_tree = etree.parse(set_result_xml)
+            root_em = parse_tree.getroot()
+            for tset in root_em.getiterator('set'):
+                for tcase in tset.getiterator('testcase'):
+                    for case_result in case_results:
+                        if tcase.get("id") == case_result['case_id']:
+                            tcase.set('result', case_result['result'].upper())
+                            # Check performance test
+                            if tcase.find('measurement') is not None:
+                                for m in tcase.getiterator('measurement'):
+                                    if 'measures' in case_result:
+                                        m_results = case_result['measures']
+                                        for m_result in m_results:
+                                            if m.get('name') == m_result['name']:
+                                                m.set('value', m_result[
+                                                      'value'])
+                            if tcase.find("./result_info") is not None:
+                                tcase.remove(tcase.find("./result_info"))
+                            result_info = etree.SubElement(tcase, "result_info")
+                            actual_result = etree.SubElement(
+                                result_info, "actual_result")
+                            actual_result.text = case_result['result'].upper()
+
+                            start = etree.SubElement(result_info, "start")
+                            end = etree.SubElement(result_info, "end")
+                            stdout = etree.SubElement(result_info, "stdout")
+                            stderr = etree.SubElement(result_info, "stderr")
+                            if 'start_time' in case_result:
+                                start.text = case_result['start_time']
+                            if 'end_time' in case_result:
+                                end.text = case_result['end_time']
+                            if 'stdout' in case_result:
+                                stdout.text = case_result['stdout']
+                            if 'stderr' in case_result:
+                                stderr.text = case_result['stderr']
+            parse_tree.write(set_result_xml)
+
+            print "[ cases result saved to resultfile ]\n"
+        except IOError, error:
+            print "[ Error: fail to write cases result, error: %s ]\n" % error
+
+    def __check_test_status(self):
+        '''
+            get_test_status from com_module
+            check the status
+            if end ,return ture; else return False
+        '''
+        # check test running or end
+        # if the status id end return True ,else return False
+
+        session_status = self.connector.get_test_status(self.session_id)
+        # session_status["finished"] == "0" is running
+        # session_status["finished"] == "1" is end
+        if not session_status == None:
+            if session_status["finished"] == "0":
+                progress_msg_list = session_status["msg"]
+                for line in progress_msg_list:
+                    print line,
+                return False
+            elif session_status["finished"] == "1":
+                return True
+        else:
+            print "[ session status error ,pls finalize test ]\n"
+            # return True to finished this set  ,becasue server error
+            return True
+
+    def __shut_down_server(self, sessionid):
+        try:
+            print '[ show down server ]'
+            self.connector.finalize_test(sessionid)
+        except Exception, error:
+            print "[ Error: fail to close webapi http server, error: %s ]" % error
+
+    def get_capability(self, file_name):
+        """get_capability from file """
+
+        capability_xml = file_name
+        capabilities = {}
+        try:
+            parse_tree = etree.parse(capability_xml)
+            root_em = parse_tree.getroot()
+            for tcap in root_em.getiterator('capability'):
+                capability = get_capability_form_node(tcap)
+                capabilities = dict(capabilities, **capability)
+
+            self.set_capability(capabilities)
             return True
-        except Exception, e:
-            print "[ Error: fail to run core test case, error: %s ]\n" % e
+        except IOError, error:
+            print "[ Error: fail to parse capability xml, error: %s ]" % error
             return False
 
-    def replace_cdata(self, file_name):
+
+def get_capability_form_node(capability_em):
+    ''' splite capability key and value form element tree'''
+    tmp_key = ''
+    capability = {}
+    tcap = capability_em
+    if tcap.get("name"):
+        tmp_key = tcap.get("name").lower()
+
+    if tcap.get("type").lower() == 'boolean':
+        if tcap.get("support").lower() == 'true':
+            capability[tmp_key] = True
+
+    if tcap.get("type").lower() == 'integer':
+        if tcap.get("support").lower() == 'true':
+            if tcap.getiterator("value") and tcap.find("value").text is not None:
+                capability[tmp_key] = int(tcap.find("value").text)
+
+    if tcap.get("type").lower() == 'string':
+        if tcap.get("support").lower() == 'true':
+            if tcap.getiterator("value") and tcap.find("value").text is not None:
+                capability[tmp_key] = tcap.find("value").text
+
+    return capability
+
+
+def get_version_info():
+    """
+        get testkit tool version ,just read the version in VERSION file
+        VERSION file must put in /opt/testkit/lite/
+    """
+    try:
+        config = ConfigParser.ConfigParser()
+        if platform.system() == "Linux":
+            config.read('/opt/testkit/lite/VERSION')
+        else:
+            version_file = os.path.join(sys.path[0], 'VERSION')
+            config.read(version_file)
+        version = config.get('public_version', 'version')
+        return version
+    except KeyError, error:
+        print "[ Error: fail to parse version info, error: %s ]\n" % error
+        return ""
+
+
+def replace_cdata(file_name):
+    """ replace some character"""
+    try:
         abs_path = mktemp()
         new_file = open(abs_path, 'w')
         old_file = open(file_name)
@@ -800,3 +1001,35 @@ class TRunner:
         old_file.close()
         remove(file_name)
         move(abs_path, file_name)
+    except IOError, error:
+        print "[ Error: fail to replace cdata in the result file, \
+            error: %s ]\n" % error
+
+
+def extract_notes(buf, pattern):
+    """util func to split lines in buffer, search for pattern on each line
+    then concatenate remaining content in output buffer"""
+    out = ""
+    for line in buf.split("\n"):
+        pos = line.find(pattern)
+        if pos >= 0:
+            out += line[pos + len(pattern):] + "\n"
+    return out
+
+# sdx@kooltux.org: parse notes in buffer and insert them in XML result
+
+
+def insert_notes(case, buf, pattern="###[NOTE]###"):
+    """ insert notes"""
+    desc = case.find('description')
+    if desc is None:
+        return
+
+    notes_elm = desc.find('notes')
+    if notes_elm is None:
+        notes_elm = etree.Element('notes')
+        desc.append(notes_elm)
+    if notes_elm.text is None:
+        notes_elm.text = extract_notes(buf, pattern)
+    else:
+        notes_elm.text += "\n" + extract_notes(buf, pattern)
diff --git a/testkitlite/engines/default/testkithttpd.py b/testkitlite/engines/default/testkithttpd.py
deleted file mode 100644 (file)
index 82b02da..0000000
+++ /dev/null
@@ -1,759 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-# 
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-#
-# Authors:
-#              Zhang, Huihui <huihuix.zhang@intel.com>
-#              Wendong,Sui  <weidongx.sun@intel.com>
-
-import os
-import time
-import threading
-from datetime import datetime
-import cgi
-import json
-from urlparse import urlparse, parse_qs
-from xml.etree import ElementTree
-from testkitlite.common.str2 import *
-from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
-from testkitlite.common.killall import killall
-import subprocess
-import signal
-import urllib2
-import re
-import platform
-import gc
-
-import sys
-reload(sys)
-sys.setdefaultencoding('utf-8')
-
-class TestStep:
-    def __init__(self, step_desc, expected, order):
-        self.step_desc = step_desc
-        self.expected = expected
-        self.order = order
-        
-    def to_json(self):
-        return {"step_desc": self.step_desc, "expected": self.expected, "order": self.order}
-
-class TestCase:
-    """Test Case Model"""
-    def __init__(self, case_node, case_order, xml_name, package_name):
-        self.purpose = case_node.get("purpose")
-       
-        script_node = case_node.find("./description/test_script_entry")
-        if script_node is not None:
-            self.entry = script_node.text
-            self.e_result = script_node.get("test_script_expected_result")
-            if self.e_result is None:
-                self.e_result = ""
-        else:
-            self.entry = ""
-            self.e_result = ""
-        self.result = ""
-        self.msg = ""
-        self.xml_node = case_node
-        self.start_at = datetime.now()
-        self.end_at = None
-        self.is_executed = False
-        self.time_task = None
-        self.order = case_order
-        self.case_id = case_node.get("id")
-        self.xml_name = xml_name
-        self.package_name = package_name
-        
-        pre_con_node  = case_node.find("./description/pre_condition")
-        post_con_node = case_node.find("./description/post_condition")
-
-        self.pre_con = ""
-        self.post_con = ""
-        if pre_con_node is not None:
-            self.pre_con = pre_con_node.text
-        if self.pre_con is None:
-            self.pre_con = ""
-
-        if post_con_node is not None:
-            self.post_con = post_con_node.text
-        if self.post_con is None:
-            self.post_con = ""
-
-        self.steps = []
-
-        step_nodes = case_node.findall("./description/steps/step")
-        for step_node in step_nodes:
-            order = step_node.get("order")
-            desc = ""
-            expected = ""
-            if step_node.find("./step_desc") is not None:
-                desc = step_node.find("./step_desc").text
-            if step_node.find("./expected") is not None:
-                expected = step_node.find("./expected").text
-            test_step = TestStep(desc, expected, order)
-            self.steps.append(test_step.to_json())
-
-        if case_node.get("execution_type") is None:
-            self.e_type = "auto"
-        else:
-            self.e_type = case_node.get("execution_type")
-        
-        if (script_node is None) or (script_node.get("timeout") is None):
-            self.timeout = 90
-        else:
-            self.timeout = int(script_node.get("timeout"))
-    
-    def print_info_string(self):
-        try:
-            print "\n[case] execute case:\nTestCase: %s\nTestEntry: %s" % (self.purpose, self.entry)
-        except Exception, e:
-            print "\n[case] execute case:\nTestCase: %s\nTestEntry: %s" % (str2str(self.purpose), str2str(self.entry))
-            print "[ Error: found unprintable character in case purpose, error: %s ]\n" % e
-    
-    def is_manual(self):
-        return self.e_type != "auto"
-    
-    def to_json(self):
-        return {"purpose": self.purpose, "entry": self.entry, "expected": self.e_result, "case_id": self.case_id, "pre_condition": self.pre_con, "post_condition": self.post_con, "steps": self.steps, "order": self.order}
-    
-    def get_xml_name(self):
-        return self.xml_name
-    
-    def set_result(self, test_result, test_msg):
-        self.is_executed = True
-        self.cancel_time_check()
-        self.result = test_result
-        self.msg = test_msg
-        self.xml_node.set("result", test_result)
-        if self.xml_node.find("./result_info") is not None:
-            self.xml_node.remove(self.xml_node.find("./result_info"))
-
-        result_info = ElementTree.SubElement(self.xml_node, "result_info")
-        actual_result = ElementTree.SubElement(result_info, "actual_result")
-        actual_result.text = str(test_result)
-        
-        start  = ElementTree.SubElement(result_info, "start")
-        end    = ElementTree.SubElement(result_info, "end")
-        stdout = ElementTree.SubElement(result_info, "stdout") 
-
-        start.text  = str(self.start_at)
-        end.text    = str(datetime.now())
-        stdout.text = self.msg 
-        
-    def set_start_at(self, start_at):
-        self.start_at = start_at
-        if self.timeout > 0:
-           self.time_task = threading.Timer(self.timeout, checkResult, (self,))
-           self.time_task.start()
-    
-    def toXmlNode(self):
-        return self.xml_node
-    
-    def cancel_time_check(self):
-        if self.time_task is not None:
-            self.time_task.cancel()
-
-def checkResult(case):
-    if not case.is_executed:
-        try:
-            print "[ Warning: time is out, test case \"%s\" is timeout, set the result to \"BLOCK\", and restart the client ]" % case.purpose
-        except Exception, e:
-            print "[ Warning: time is out, test case \"%s\" is timeout, set the result to \"BLOCK\", and restart the client ]" % str2str(case.purpose)
-            print "[ Error: found unprintable character in case purpose, error: %s ]\n" % e
-        case.set_result("BLOCK", "Time is out")
-        TestkitWebAPIServer.start_auto_test = 0
-        print "[ kill existing client, pid: %s ]" % TestkitWebAPIServer.client_process.pid
-        try:
-            TestkitWebAPIServer.client_process.terminate()
-        except:
-            killall(TestkitWebAPIServer.client_process.pid)
-        killAllWidget()
-        print "[ start new client in 5sec ]"
-        time.sleep(5)
-        TestkitWebAPIServer.start_auto_test = 1
-        client_command = TestkitWebAPIServer.default_params["client_command"]
-        start_client(client_command)
-    else:
-        try:
-            print "[ test case \"%s\" is executed in time, and the result is %s ]" % (case.purpose, case.result)
-        except Exception, e:
-            print "[ test case \"%s\" is executed in time, and the result is %s ]" % (str2str(case.purpose), str2str(case.result))
-            print "[ Error: found unprintable character in case purpose, error: %s ]\n" % e
-
-def killAllWidget():
-    OS = platform.system()
-    if OS == "Linux":
-        # release memory in the cache
-        fi_c, fo_c, fe_c = os.popen3("echo 3 > /proc/sys/vm/drop_caches")
-        # kill widget
-        fi, fo, fe = os.popen3("wrt-launcher -l")
-        for line in fo.readlines():
-            package_id = "none"
-            pattern = re.compile('\s+([a-zA-Z0-9]*?)\s*$')
-            match = pattern.search(line)
-            if match:
-                package_id = match.group(1)
-            if package_id != "none":
-                pid_cmd = "ps aux | grep %s | sed -n '1,1p'" % package_id
-                fi_pid, fo_pid, fe_pid = os.popen3(pid_cmd)
-                for line_pid in fo_pid.readlines():
-                    pattern_pid = re.compile('app\s*(\d+)\s*')
-                    match_pid = pattern_pid.search(line_pid)
-                    if match_pid:
-                        widget_pid = match_pid.group(1)
-                        print "[ kill existing widget, pid: %s ]" % widget_pid
-                        killall(widget_pid)
-
-class TestkitWebAPIServer(BaseHTTPRequestHandler):
-    default_params = {"hidestatus":"0"}
-    auto_test_cases = {}
-    manual_test_cases = {}
-    iter_params = {}
-    auto_case_id_array = []
-    auto_index_key = "auto_index"
-    xml_dom_root = None
-    this_server = None
-    running_session_id = None
-    client_process = None
-    current_test_xml = "none"
-    last_test_result = "none"
-    start_auto_test = 1
-    neet_restart_client = 0
-    is_finished = False
-  
-    def clean_up_server(self):
-        TestkitWebAPIServer.auto_test_cases.clear()
-        TestkitWebAPIServer.manual_test_cases.clear()
-        TestkitWebAPIServer.iter_params.clear()
-        del TestkitWebAPIServer.auto_case_id_array[:]
-        TestkitWebAPIServer.xml_dom_root = None
-        TestkitWebAPIServer.running_session_id = None
-        TestkitWebAPIServer.start_auto_test = 1 
-        TestkitWebAPIServer.is_finished = False
-        collected = gc.collect()
-        print "[ Garbage collector: collected %d objects. ]" % (collected)
-    
-    def read_test_definition(self):
-        if TestkitWebAPIServer.default_params.has_key("testsuite"):
-            try:
-              suites_dict = TestkitWebAPIServer.default_params["testsuite"]
-              exe_sequence = TestkitWebAPIServer.default_params["exe_sequence"]
-              index = 1
-              for package_name in exe_sequence:
-                  suites_array = suites_dict[package_name]
-                  for xml_name in suites_array:
-                      single_xml_tree = ElementTree.parse(xml_name)
-                      print "[XML name : %s] ------------------------------------------------------------------------------------------------------------" % xml_name
-                      tmp_xml_root = single_xml_tree.getroot()
-                      for tmp_suite in tmp_xml_root.findall('suite'):
-                          for tmp_set in tmp_suite.findall('set'):
-                              for node in tmp_set.findall('testcase'):
-                                  tc = TestCase(node, index, xml_name, package_name)
-                                  index = index + 1
-                                  if tc.is_manual():
-                                      TestkitWebAPIServer.manual_test_cases[tc.purpose] = tc
-                                  else:
-                                      TestkitWebAPIServer.auto_test_cases[tc.purpose] = tc
-                                      if tc.purpose in TestkitWebAPIServer.auto_case_id_array:
-                                          try:
-                                              print "[ Warning: the purpose '%s' is already in the list ]" % tc.purpose
-                                          except Exception, e:
-                                              print "[ Warning: the purpose '%s' is already in the list ]" % str2str(tc.purpose)
-                                              print "[ Error: found unprintable character in case purpose, error: %s ]\n" % e
-                                      else:
-                                          TestkitWebAPIServer.auto_case_id_array.append(tc.purpose)
-
-                      if TestkitWebAPIServer.xml_dom_root is None:
-                          TestkitWebAPIServer.xml_dom_root = tmp_xml_root
-                      else:
-                          for suite_node in tmp_xml_root.findall('suite'):
-                              definition_node = TestkitWebAPIServer.xml_dom_root
-                              if definition_node is None:
-                                  definition_node = ElementTree.Element("test_definition")
-                              definition_node.append(suite_node)
-              TestkitWebAPIServer.xml_dom_root = TestkitWebAPIServer.xml_dom_root
-              TestkitWebAPIServer.iter_params.update({TestkitWebAPIServer.auto_index_key: 0})
-            except Exception, e:
-              print "[ Error: reading test suite fail when loading test cases, error: %s ]\n" % e
-        else:
-            print "[ Error: test-suite file is not found in the parameter ]\n"
-        print "[ auto case number: %d, manual case number: %d ]" % (len(TestkitWebAPIServer.auto_test_cases), len(TestkitWebAPIServer.manual_test_cases))
-        collected = gc.collect()
-        print "[ Garbage collector: collected %d objects. ]" % (collected)
-
-        self.send_response(200)
-        self.send_header("Content-type", "application/json")
-        self.send_header("Content-Length", str(len(json.dumps({"OK": 1}))))
-        self.send_header("Access-Control-Allow-Origin", "*")
-        self.end_headers()
-        self.wfile.write(json.dumps({"OK": 1}))
-    
-    def save_RESULT(self, filecontent, filename):
-        """Save result xml to local disk"""
-        if filecontent is not None:
-            try:
-                with open(filename, "w") as fd:
-                    fd.write(filecontent)
-                return filename
-            except IOError, e:
-                print "[ Error: fail to save result xml, error: %s ]\n" % e
-        return None
-    
-    def generate_result_xml(self):
-        self.send_response(200)
-        self.send_header("Content-type", "application/json")
-        self.send_header("Content-Length", str(len(json.dumps({"OK": 1}))))
-        self.send_header("Access-Control-Allow-Origin", "*")
-        self.end_headers()
-        self.wfile.write(json.dumps({"OK": 1}))
-        # kill all client process to release memory
-        print "\n[ kill existing client, pid: %s ]" % TestkitWebAPIServer.client_process.pid
-        try:
-            TestkitWebAPIServer.client_process.terminate()
-        except:
-            killall(TestkitWebAPIServer.client_process.pid)
-        killAllWidget()
-        print "[ wait 5sec to release memory]"
-        time.sleep(5)
-        # write result to file
-        result_xml = ElementTree.tostring(TestkitWebAPIServer.xml_dom_root, "utf-8")
-        for key, value in self.auto_test_cases.iteritems():
-            value.cancel_time_check()
-        self.save_RESULT(result_xml, TestkitWebAPIServer.default_params["resultfile"])
-        print "[ set finished flag True ]"
-        TestkitWebAPIServer.is_finished = True
-        # close server
-        #TestkitWebAPIServer.this_server.socket.close()
-
-    def shut_down_server(self):
-        self.send_response(200)
-        self.send_header("Content-type", "application/json")
-        self.send_header("Content-Length", str(len(json.dumps({"OK": 1}))))
-        self.send_header("Access-Control-Allow-Origin", "*")
-        self.end_headers()
-        self.wfile.write(json.dumps({"OK": 1}))
-        
-        # close server
-        try:
-            TestkitWebAPIServer.this_server.socket.close()
-        except Exception, e:
-            print "[ Error: fail to close webapi http server, error: %s ]" % e
-    
-    def auto_test_task(self):
-        if TestkitWebAPIServer.start_auto_test:
-           parsed_path = urlparse(self.path)
-           parsed_query = parse_qs(parsed_path.query)
-           session_id = parsed_query['session_id'][0]
-           if TestkitWebAPIServer.running_session_id == session_id:
-               if self.iter_params[self.auto_index_key] < len(self.auto_test_cases):
-                   case_index = self.iter_params[self.auto_index_key]
-                   key = self.auto_case_id_array[case_index]
-                   self.iter_params.update({self.auto_index_key: (case_index + 1)})
-                   task = self.auto_test_cases[key]
-                   current = datetime.now()
-                   task.set_start_at(current)
-                   if TestkitWebAPIServer.current_test_xml != task.get_xml_name():
-                       TestkitWebAPIServer.current_test_xml = task.get_xml_name()
-                       time.sleep(3)
-                       #print "\n[ testing xml: %s ]" % task.get_xml_name()
-                   task.print_info_string()
-                   try:
-                       self.send_response(200)
-                       self.send_header("Content-type", "application/json")
-                       self.send_header("Content-Length", str(len(json.dumps(task.to_json()))))
-                       self.send_header("Access-Control-Allow-Origin", "*")
-                       self.end_headers()
-                       self.wfile.write(json.dumps(task.to_json()))
-                   except Exception, e:
-                       print "[ Error: lost connection to the client, a new client will be started when the current case is timeout ]"
-               else:
-                   print "\n[ no auto case is available any more ]"
-                   self.send_response(200)
-                   self.send_header("Content-type", "application/json")
-                   self.send_header("Content-Length", str(len(json.dumps({"none": 0}))))
-                   self.send_header("Access-Control-Allow-Origin", "*")
-                   self.end_headers()
-                   self.wfile.write(json.dumps({"none": 0}))
-           else:
-               print "[ sessionID: %s in auto_test_task(), on server side, the ID is %s ]" % (parsed_query['session_id'][0], TestkitWebAPIServer.running_session_id)
-               print "[ Error: invalid session ID ]\n"
-               self.send_response(200)
-               self.send_header("Content-type", "application/json")
-               self.send_header("Content-Length", str(len(json.dumps({"invalid": 0}))))
-               self.send_header("Access-Control-Allow-Origin", "*")
-               self.end_headers()
-               self.wfile.write(json.dumps({"invalid": 0}))
-        else:
-            print "\n[ restart client process is activated, exit current client ]"
-            self.send_response(200)
-            self.send_header("Content-type", "application/json")
-            self.send_header("Content-Length", str(len(json.dumps({"stop": 0}))))
-            self.send_header("Access-Control-Allow-Origin", "*")
-            self.end_headers()
-            self.wfile.write(json.dumps({"stop": 0}))
-    
-    def manual_test_task(self):
-       # load all manual test cases
-       self.send_response(200)
-       self.send_header("Content-type", "application/json")
-       
-       manual_test_xmls = set()
-       dictlist = []
-       for key, value in self.manual_test_cases.iteritems():
-          dictlist.append(value.to_json())
-          manual_test_xmls.add(value.get_xml_name())
-       self.send_header("Content-Length", str(len(json.dumps(dictlist))))
-       self.send_header("Access-Control-Allow-Origin", "*")
-       self.end_headers()
-       self.wfile.write(json.dumps(dictlist))
-       for manual_test_xml in manual_test_xmls:
-           TestkitWebAPIServer.current_test_xml = manual_test_xml
-           time.sleep(3)
-           #print "\n[ testing xml: %s ]\n" % manual_test_xml
-    
-    def check_execution_progress(self):
-       print "Total: %s, Current: %s\nLast Case Result: %s" % (len(self.auto_test_cases), self.iter_params[self.auto_index_key], self.last_test_result)
-       execution_progress = {"total": len(self.auto_test_cases), "current": self.iter_params[self.auto_index_key], "last_test_result": self.last_test_result}
-       self.send_response(200)
-       self.send_header("Content-type", "application/json")
-       self.send_header("Content-Length", str(len(json.dumps(execution_progress))))
-       self.send_header("Access-Control-Allow-Origin", "*")
-       self.end_headers()
-       self.wfile.write(json.dumps(execution_progress))
-       TestkitWebAPIServer.last_test_result = "BLOCK"
-    
-    def ask_next_step(self):
-        next_is_stop = 0
-        OS = platform.system()
-        enable_memory_collection = TestkitWebAPIServer.default_params["enable_memory_collection"]
-        if enable_memory_collection:
-            if OS == "Linux":
-                try:
-                    fi, fo, fe = os.popen3("free -m | grep \"Mem\" | awk '{print $4}'")
-                    free_memory = fo.readline()[0:-1]
-                    free_memory_delta = int(free_memory) - 100
-                    if free_memory_delta <= 0:
-                        print "[ Warning: free memory now is %sM, need to release memory ]" % free_memory
-                        # release memory in the cache
-                        next_is_stop = 1
-                        fi, fo, fe = os.popen3("echo 3 > /proc/sys/vm/drop_caches")
-                except Exception, e:
-                    print "[ Error: fail to check free memory, error: %s ]\n" % e
-                    print "[ Error: free memory now is critical low, need to release memory immediately ]"
-                    # release memory in the cache
-                    next_is_stop = 1
-                    fi, fo, fe = os.popen3("echo 3 > /proc/sys/vm/drop_caches")
-            else:
-                if self.iter_params[self.auto_index_key] % 200 == 0:
-                    print "[ Warning: the client has run %s cases, need to release memory ]" % self.iter_params[self.auto_index_key]
-                    next_is_stop = 1
-        if next_is_stop:
-            TestkitWebAPIServer.neet_restart_client = 1
-            next_step = {"step": "stop"}
-            self.send_response(200)
-            self.send_header("Content-type", "application/json")
-            self.send_header("Content-Length", str(len(json.dumps(next_step))))
-            self.send_header("Access-Control-Allow-Origin", "*")
-            self.end_headers()
-            self.wfile.write(json.dumps(next_step))
-        else:
-            next_step = {"step": "continue"}
-            self.send_response(200)
-            self.send_header("Content-type", "application/json")
-            self.send_header("Content-Length", str(len(json.dumps(next_step))))
-            self.send_header("Access-Control-Allow-Origin", "*")
-            self.end_headers()
-            self.wfile.write(json.dumps(next_step))
-    
-    def commit_result(self):
-       parsed_path = urlparse(self.path)
-       parsed_query = parse_qs(parsed_path.query)
-       
-       form = cgi.FieldStorage(
-            fp=self.rfile,
-            headers=self.headers,
-            environ={
-                'REQUEST_METHOD':'POST',
-                'CONTENT_TYPE':self.headers['Content-Type'],
-            }
-        )
-       
-       key = None
-       result = None
-       msg = None
-       session_id = None
-       for field in form.keys():
-           if "purpose" == field :
-               key = form[field].value
-           elif "result" == field:
-               result = form[field].value
-           elif "msg" == field:
-               msg = form[field].value
-               msg = msg[len("[Message]"):]
-           elif "session_id" == field:
-               session_id = form[field].value
-       if key is not None:
-           from xml.sax.saxutils import unescape
-           key = unescape(urllib2.unquote(key.decode("utf-8")))
-       if TestkitWebAPIServer.running_session_id == session_id:
-           try:
-               tested_task = self.auto_test_cases[key]
-               tested_task.set_result(result, msg)
-           except Exception, e:
-               print "[ Error: can't find any test case by key: %s, error: %s ]\n" % (key, e)
-           TestkitWebAPIServer.last_test_result = result
-       if TestkitWebAPIServer.neet_restart_client:
-           self.send_response(200)
-           self.send_header("Content-type", "application/json")
-           self.send_header("Content-Length", str(len(json.dumps({"OK": 1}))))
-           self.send_header("Access-Control-Allow-Origin", "*")
-           self.end_headers()
-           self.wfile.write(json.dumps({"OK": 1}))
-           # kill client
-           TestkitWebAPIServer.start_auto_test = 0
-           print "\n[ kill existing client, pid: %s to release memory ]" % TestkitWebAPIServer.client_process.pid
-           try:
-               TestkitWebAPIServer.client_process.terminate()
-           except:
-               killall(TestkitWebAPIServer.client_process.pid)
-           killAllWidget()
-           print "[ start new client in 5sec ]"
-           time.sleep(5)
-           TestkitWebAPIServer.start_auto_test = 1
-           TestkitWebAPIServer.neet_restart_client = 0
-           client_command = TestkitWebAPIServer.default_params["client_command"]
-           start_client(client_command)
-       else:
-           self.send_response(200)
-           self.send_header("Content-type", "application/json")
-           self.send_header("Content-Length", str(len(json.dumps({"OK": 1}))))
-           self.send_header("Access-Control-Allow-Origin", "*")
-           self.end_headers()
-           self.wfile.write(json.dumps({"OK": 1}))
-    
-    def commit_manual_result(self):
-       parsed_path = urlparse(self.path)
-       parsed_query = parse_qs(parsed_path.query)
-       
-       form = cgi.FieldStorage(
-            fp=self.rfile,
-            headers=self.headers,
-            environ={
-                'REQUEST_METHOD':'POST',
-                'CONTENT_TYPE':self.headers['Content-Type'],
-            }
-        )
-       
-       key = None
-       result = None
-       for field in form.keys():
-            if "purpose" == field :
-               key = form[field].value
-            elif "result" == field:
-               result = form[field].value
-       if key is not None:
-           from xml.sax.saxutils import unescape
-           key = unescape(urllib2.unquote(key.decode("utf-8")))
-           tested_task = self.manual_test_cases[key]
-           tested_task.set_result(result, "")
-       self.send_response(200)
-       self.send_header("Content-type", "application/json")
-       self.send_header("Content-Length", str(len(json.dumps({"OK": 1}))))
-       self.send_header("Access-Control-Allow-Origin", "*")
-       self.end_headers()
-       self.wfile.write(json.dumps({"OK": 1}))
-    
-    def init_session_id(self):
-       parsed_path = urlparse(self.path)
-       parsed_query = parse_qs(parsed_path.query)
-       print "[ sessionID: %s is gotten from the client ]" % parsed_query['session_id'][0]
-       TestkitWebAPIServer.running_session_id = parsed_query['session_id'][0]
-       
-       self.send_response(200)
-       self.send_header("Content-type", "application/json")
-       self.send_header("Content-Length", str(len(json.dumps({"OK": 1}))))
-       self.send_header("Access-Control-Allow-Origin", "*")
-       self.end_headers()
-       self.wfile.write(json.dumps({"OK": 1}))
-    
-    def check_server_status(self):
-       status = 0
-       if TestkitWebAPIServer.is_finished:
-           status = 1
-       self.send_response(200)
-       self.send_header("Content-type", "application/json")
-       self.send_header("Content-Length", str(len(json.dumps({"finished": status}))))
-       self.send_header("Access-Control-Allow-Origin", "*")
-       self.end_headers()
-       self.wfile.write(json.dumps({"finished": status}))
-
-    def do_POST(self):
-        """ POST request """
-        if self.path.strip() == "/load_definitions":
-            self.read_test_definition()
-        if self.path.strip() == "/reload_definitions":
-            self.clean_up_server()
-            self.read_test_definition()
-        if self.path.strip() == "/check_server_status":
-            self.check_server_status()
-        if self.path.strip() == "/shut_down_server":
-            self.shut_down_server()
-        if self.path.strip().startswith("/auto_test_task"):
-            self.auto_test_task()
-        elif self.path.strip().startswith("/check_execution_progress"):
-            self.check_execution_progress()
-        elif self.path.strip().startswith("/ask_next_step"):
-            self.ask_next_step()
-        elif self.path.strip().startswith("/init_session_id"):
-            self.init_session_id()
-        elif self.path.strip().startswith("/manual_cases"):
-            self.manual_test_task()
-        elif self.path.strip().startswith("/commit_result"):
-            self.commit_result()
-        elif self.path.strip().startswith("/commit_manual_result"):
-            self.commit_manual_result()
-        elif self.path.strip() == "/generate_xml":
-            self.generate_result_xml()
-        elif self.path.strip() == "/check_server":
-            print "[ checking server, and found the server is running ]"
-            self.send_response(200)
-            self.send_header("Content-type", "application/json")
-            self.send_header("Content-Length", str(len(json.dumps({"OK": 1}))))
-            self.send_header("Access-Control-Allow-Origin", "*")
-            self.end_headers()
-            self.wfile.write(json.dumps({"OK": 1}))
-        return None
-    
-    def do_GET(self):
-        """ Get request """
-        self.do_POST()
-
-def start_client(command):
-    try:
-        pid_log = TestkitWebAPIServer.default_params["pid_log"]
-        proc = subprocess.Popen(command, shell=True)
-        if pid_log is not "no_log":
-            try:
-                with open(pid_log, "a") as fd:
-                    pid = str(proc.pid)
-                    fd.writelines(pid + '\n')
-            except:
-                pass
-        TestkitWebAPIServer.client_process = proc
-        print "[ start client with pid: %s ]\n" % proc.pid
-    except Exception, e:
-        print "[ Error: exception occurs while invoking \"%s\", error: %s ]\n" % (command, e)
-        sys.exit(-1)
-
-def send_http_request_to_case_server(url):
-    import urllib, urllib2
-    print "[ sending reading request to %s]" % url
-    req = urllib2.Request(url, None)
-    response = urllib2.urlopen(req)
-    print response.geturl()
-    print response.info()
-
-def send_loading_definition_request(client_command):
-    send_http_request_to_case_server("http://127.0.0.1:8000/load_definitions")
-    print "[ client command %s ]" % client_command
-    start_client(client_command)
-
-def sub_task(client_command):
-    time_task = threading.Timer(3, send_loading_definition_request, (client_command, ))
-    time_task.start()
-
-def reload_xml(t):
-    xml_name = t[0]
-    package_name = t[1]
-    resultfile = t[2]
-    print "[ reloading test case definitions with the XML %s ]" % xml_name 
-    suites_dict = {}
-    exe_sequence = [package_name]
-    suite_array = [xml_name]
-    suites_dict[package_name] = suite_array
-
-    TestkitWebAPIServer.default_params["testsuite"] = suites_dict
-    print "[]"
-    TestkitWebAPIServer.default_params["exe_sequence"] = exe_sequence
-    TestkitWebAPIServer.default_params["resultfile"] = resultfile
-    
-    client_command = TestkitWebAPIServer.default_params["client_command"]
-    send_http_request_to_case_server("http://127.0.0.1:8000/reload_definitions")
-    print "[ client command %s ]" % client_command
-    start_client(client_command)
-
-def shut_down_server():
-    print "[ shutting down the server ]"
-    send_http_request_to_case_server("http://127.0.0.1:8000/shut_down_server")
-
-def check_server_running():
-    print "[ checking if the server task is finished ]"
-    import urllib, urllib2
-    req = urllib2.Request("http://127.0.0.1:8000/check_server_status", None)
-    response = urllib2.urlopen(req)
-    html = response.read()
-    status_json = json.loads(html)
-    if status_json["finished"] == 1:
-       print "[ The server finished tasks now]"
-       return True
-    else:
-       print "[ not yet ]"
-       return False
-
-def start_server_up(server):
-    try:
-        server.serve_forever()
-    except IOError:
-        print "\n[ warnning, a IO error is raised, if the server is shutting down, please ignore it. ]"
-
-def startup(parameters):
-    try:
-        TestkitWebAPIServer.default_params.update(parameters)
-        # print server parameters for user to check
-        server = HTTPServer(("127.0.0.1", 8000), TestkitWebAPIServer)
-        TestkitWebAPIServer.this_server = server
-        print "[ started http server at %s:%d ]" % ("127.0.0.1", 8000)
-        hidestatus = TestkitWebAPIServer.default_params["hidestatus"]
-        resultfile = TestkitWebAPIServer.default_params["resultfile"]
-        pid_log = TestkitWebAPIServer.default_params["pid_log"]
-        testsuite = TestkitWebAPIServer.default_params["testsuite"]
-        exe_sequence = TestkitWebAPIServer.default_params["exe_sequence"]
-        client_command = TestkitWebAPIServer.default_params["client_command"]
-        enable_memory_collection = TestkitWebAPIServer.default_params["enable_memory_collection"]
-        print "[ parameter hidestatus: %s ]" % hidestatus
-        print "[ parameter resultfile: %s ]" % resultfile
-        print "[ parameter pid_log: %s ]" % pid_log
-        print "[ parameter testsuite ]"
-        for key in testsuite:
-            print "  [ package name: %s ]" % key
-            print "  [ xml files: %s ]" % testsuite[key]
-        print "[ parameter exe_sequence: %s ]" % exe_sequence
-        print "[ parameter client_command: %s ]" % client_command
-        print "[ parameter enable_memory_collection: %s ]" % enable_memory_collection
-        # check read test definition done, before start client
-        print "[ analysis testsuite, this might take some time, please wait ]"
-        sub_task(client_command)
-        time_task = threading.Timer(1, start_server_up, (server, ))
-        time_task.start()
-
-        # start client
-        #start_client(client_command)
-        #server.serve_forever()
-    except KeyboardInterrupt:
-        print "\n[ existing http server on user cancel ]\n"
-        server.socket.close()
-    except:
-        pass
diff --git a/tests/__init__.py b/tests/__init__.py
new file mode 100644 (file)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
diff --git a/tests/testkitlite/Test_Runner.py b/tests/testkitlite/Test_Runner.py
new file mode 100644 (file)
index 0000000..8aa46f8
--- /dev/null
@@ -0,0 +1,113 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc.,
+# 51 Franklin Street, 
+# Fifth Floor,
+# Boston, MA  02110-1301, USA.
+#
+# Authors:
+#              Yuanyuan,Zou  <yuanyuan.zou@borqs.com>
+
+import sys
+sys.path.append("../../")
+from testkitlite.engines.default.runner import *
+from commodule.connector import Connector
+import unittest
+import json
+from optparse import OptionParser  
+
+#test Class 
+class RunnerTestCase(unittest.TestCase):
+    def setUp(self):
+        self.CONNECTOR = Connector({"testremote": "tizenMobile"}).get_connector()
+        self.runner = TRunner(self.CONNECTOR)
+        self.log_dir = os.path.join(os.path.expandvars('$HOME'),"testresult")
+        if not os.path.exists(self.log_dir):
+            os.makedirs(self.log_dir)
+
+    def tearDown(self):
+        self.runner = None
+
+    def test_set_pid_log(self):
+        self.runner.set_pid_log('/home/test/autotest')
+        self.assertEqual(self.runner.pid_log,'/home/test/autotest')
+
+    def test_set_global_parameters(self):
+        parser = OptionParser()
+        parser.add_option("-D", "--dryrun",dest="bdryrun",action="store_true",help="Dry-run")
+        parser.add_option("-o", "--output", dest="resultfile",
+                                help=""),
+        parser.add_option("-e", dest="exttest", action="store",
+                                help="")
+        parser.add_option("--fullscreen", dest="fullscreen", action="store_true",
+                                help="Run web API test in full screen mode")
+        parser.add_option("--non-active", dest="non_active", action="store_true",
+                                help="")
+        parser.add_option("--enable-memory-collection", dest="enable_memory_collection", action="store_true",
+                                help="")
+        parser.add_option("--deviceid",dest="device_serial", action="store",
+                                help="set sdb device serial information" )
+        parser.add_option("--stubname", dest="stubname",
+                    action="store",
+                    help="set stub name")
+
+        args = ["-D", "yes","--output","/home/test/","-e","WRTLauncher cts-webapi-tizen-alarm-tests",
+                "--fullscreen","none","--non-active","none","--enable-memory-collection","none",
+                "--deviceid","123"]  
+        (options, args) = parser.parse_args(args)  
+        print options
+        self.runner.set_global_parameters(options)
+        self.assertEqual(self.runner.bdryrun,True)
+
+    def test_set_session_id(self):
+        self.runner.set_session_id('12345')
+        self.assertEqual(self.runner.session_id,'12345')
+
+    def test_add_filter_rules(self):
+        wfilters = {}
+        wfilters['execution_type'] = ["manual"]
+        self.runner.add_filter_rules(**wfilters)  
+          
+    def test_prepare_run(self):
+        wfilters = {}
+        wfilters['execution_type'] = ["auto"]
+        self.runner.add_filter_rules(**wfilters)
+        a = self.runner.prepare_run('/usr/share/cts-webapi-tizen-alarm-tests/tests.xml',self.log_dir)
+        print a
+        self.assertEqual(a,True)
+
+    def test_run_case(self):
+        self.runner.exe_sequence = ['cts-webapi-tizen-alarm-tests.auto']
+        self.runner.testsuite_dict = {'cts-webapi-tizen-alarm-tests.auto': ['/home/test/autotest/2013-03-11-14:17:08.864498/cts-webapi-tizen-alarm-tests.auto.xml']}
+        self.runner.run_case(self.log_dir)
+
+    def test_merge_resultfile(self):
+        start_time = '2013-03-11-12:16:33.637293'#depend you start test time 
+        self.runner.merge_resultfile(start_time, self.log_dir)
+
+
+def suite():
+    suite = unittest.TestSuite()
+    suite.addTest(RunnerTestCase("test_set_global_parameters"))
+    return suite
+
+#run test
+if __name__ == "__main__":
+    #unittest.main(defaultTest = 'suite')
+    unittest.main()
+
+
diff --git a/tests/testkitlite/__init__.py b/tests/testkitlite/__init__.py
new file mode 100644 (file)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
index f5bbdb8..7da67a4 100644 (file)
@@ -36,6 +36,7 @@
        var defTime = 2000;
        var timeout;
        var winCloseTimeout = 5000;
+       var blockCheckTime = 10;
 
        var server = "http://127.0.0.1:8000";
        var need_ajax = true;
@@ -744,7 +745,7 @@ table#results td {\
                                print_error_log("ask_generate_xml", e);
                        }
                });
-               setTimeout("window.open('','_self','');window.close()", winCloseTimeout);
+               setTimeout("window.open('','_self','');window.close()", 2000);
        }
 
        function extract_all_manual() {
@@ -874,6 +875,14 @@ table#results td {\
                                test_page = current_page_uri.substring(0, index);
                        else
                                test_page = current_page_uri;
+                       // Get how many times to check BLOCK result
+                       if (json_task.onload_delay) {
+                               calculate_block_check_time(parseInt(json_task.onload_delay) * 1000);
+                       } else {
+                               print_error_log("execute_test_task",
+                                               "can't get attribute onload_delay from task: "
+                                                               + json_task.purpose);
+                       }
                        // Don't load the same test page again
                        if (test_page == last_test_page) {
                                print_error_log("test page url is the same as the last one",
@@ -903,12 +912,16 @@ table#results td {\
                }
        }
 
+       function calculate_block_check_time(onload_delay) {
+               blockCheckTime = Math.ceil((Math.sqrt(onload_delay * 4 + 25) - 5) / 10);
+       }
+
        function check_block_result_again(time) {
-               if (time == 10) {
-                       setTimeout("extract_case_result('no', 10)", 500);
+               sleep_time = time * 50;
+               if (time == blockCheckTime) {
+                       setTimeout("extract_case_result('no', " + time + ")", sleep_time);
                        return;
                }
-               sleep_time = time * 50;
                setTimeout("extract_case_result('yes', " + time + ")", sleep_time);
        }
 
@@ -921,7 +934,7 @@ table#results td {\
 
                oPass = $(oTestDoc).find(".pass");
                oFail = $(oTestDoc).find(".fail");
-               case_uri = oTestFrame.src.toString();
+               case_uri = current_page_uri;
 
                total_num = getTestPageParam(case_uri, "total_num");
                locator_key = getTestPageParam(case_uri, "locator_key");
@@ -1036,7 +1049,8 @@ table#results td {\
        function execute_manual_test() {
                manualcaseslist = new Array();
                tasks = extract_all_manual();
-               for ( var i = 0; i < tasks.length; i++) {
+               if (tasks != null){
+                       for ( var i = 0; i < tasks.length; i++) {
                        parent.document.getElementById("statusframe").height = 385 + "px";
                        manualcaseslist[i] = new manual_cases();
                        manualcaseslist[i].casesid = tasks[i].case_id;
@@ -1055,12 +1069,13 @@ table#results td {\
                                        manualcaseslist[i].steps[this_manual_step.order - 1] = this_manual_step;
                                }
                        }
+                       }
+                       if (tasks.length > 0) {
+                               statusFrame.src = "./manual_harness.html";
+                               $($($('#main')).get(0)).attr('rows', "100,*");
+                       } 
                }
-
-               if (tasks.length > 0) {
-                       statusFrame.src = "./manual_harness.html";
-                       $($($('#main')).get(0)).attr('rows', "100,*");
-               } else {
+               else {
                        // No manual cases, generate the result.
                        ask_generate_xml();
                }
index d2f5629..3e7574a 100644 (file)
@@ -173,7 +173,7 @@ function submitTest(){
           dataType: "json",
           beforeSend: function(x) {
             if (x && x.overrideMimeType) {
-              x.overrideMimeType("application/j-son;charset=UTF-8");
+              x.overrideMimeType("application/json;charset=UTF-8");
             }
           },
           success: function(result) {
index a87a6d0..2040274 100644 (file)
@@ -1,53 +1,53 @@
-= XSLT style for Test Case and Test Result =
-
-== Files structure ==
-
-        readme.txt
-        test_definition.xsd   //The schema of test definition
-        tests.css             // CSS style for showing test cases and results
-        testresult.xsl
-        testcase.xsl
-        tests.xml             //example of test cases
-        result.xml            //example of test result
-        
- == Applying the style ==
- === Update in definition and result XML ===
- For applying this style for the definition XML of test cases, please add below statement before the root element of XML (the tag "test_definition").
- <?xml-stylesheet type="text/xsl"  href="./testcase.xsl"?>
- as below: 
-<?xml version="1.0" encoding="UTF-8"?>
-<?xml-stylesheet type="text/xsl"  href="./testcase.xsl"?>
-<test_definition>
-
-For applying this style for the test-result XML, please add below statement before the root element of XML (the tag "test_definition").
-<?xml-stylesheet type="text/xsl"  href="./testresult.xsl"?>
-
-as below:
-
-<?xml version="1.0" encoding="UTF-8"?>
-<?xml-stylesheet type="text/xsl"  href="./testresult.xsl"?>
-<test_definition>
-
-=== Deploy XSLT and CSS style ===
-
-For our test package, below 3 files should be added in each test package. 
-
-        tests.css  
-        testresult.xsl
-        testcase.xsl
-        
-For instance, add them under the test package "webapi-tizen-alarm-tests".
- Â©Â¸Â©Â¤webapi-tizen-alarm-tests
-             Â©Â¸Â©Â¤...
-             Â©Â¸Â©Â¤...
-             Â©Â¸tests.css  
-             Â©Â¸testresult.xsl
-             Â©Â¸testcase.xsl
-             Â©Â¸tests.xml
-             Â©Â¸...
+= XSLT style for Test Case and Test Result =\r
+\r
+== Files structure ==\r
+\r
+        readme.txt\r
+        test_definition.xsd   //The schema of test definition\r
+        tests.css             // CSS style for showing test cases and results\r
+        testresult.xsl\r
+        testcase.xsl\r
+        tests.xml             //example of test cases\r
+        result.xml            //example of test result\r
+        \r
\r
+ == Applying the style ==\r
\r
+ === Update in definition and result XML ===\r
\r
+ For applying this style for the definition XML of test cases, please add below statement before the root element of XML (the tag "test_definition").\r
\r
+ <?xml-stylesheet type="text/xsl"  href="./testcase.xsl"?>\r
\r
+ as below: \r
\r
+<?xml version="1.0" encoding="UTF-8"?>\r
+<?xml-stylesheet type="text/xsl"  href="./testcase.xsl"?>\r
+<test_definition>\r
+\r
+For applying this style for the test-result XML, please add below statement before the root element of XML (the tag "test_definition").\r
+<?xml-stylesheet type="text/xsl"  href="./testresult.xsl"?>\r
+\r
+as below:\r
+\r
+<?xml version="1.0" encoding="UTF-8"?>\r
+<?xml-stylesheet type="text/xsl"  href="./testresult.xsl"?>\r
+<test_definition>\r
+\r
+=== Deploy XSLT and CSS style ===\r
+\r
+For our test package, below 3 files should be added in each test package. \r
+\r
+        tests.css  \r
+        testresult.xsl\r
+        testcase.xsl\r
+        \r
+For instance, add them under the test package "webapi-tizen-alarm-tests".\r
+ Â©Â¸Â©Â¤webapi-tizen-alarm-tests\r
+             Â©Â¸Â©Â¤...\r
+             Â©Â¸Â©Â¤...\r
+             Â©Â¸tests.css  \r
+             Â©Â¸testresult.xsl\r
+             Â©Â¸testcase.xsl\r
+             Â©Â¸tests.xml\r
+             Â©Â¸...\r
index ac14b68..2ef60c2 100644 (file)
@@ -58,3 +58,13 @@ In Xslt,
 
 related example and Xlst is also updated for above.
 
+-- version 1.0.1-9 --
+1\ add an attribute "cts_version" in the element "environment/BuildInfoType" for saving the version of CTS tool
+2\ add an attribute "file" in "measurement/simpleMeasurementType"
+3\ update the result XSLt for showing cts_version
+4\ update the result XSLt for showing Â¡Â°Test Blocked¡± instead of "Test N/A"
+5\ add a summary table for showing all FAIL cases.
+
+
+-- version 1.0.2-1 --
+1\ add a new int optional attribute "onload_delay" with default "3"
index 941e115..60dafda 100644 (file)
-<?xml version="1.0" encoding="UTF-8"?>
-<?xml-stylesheet type="text/xsl"  href="testresult.xsl"?>
-<test_definition name="http://tempuri.org" type=""
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:noNamespaceSchemaLocation="test_definition.xsd">
-       <environment device_id="generic/sdk/generic:4.0.4/MR1/302030:eng/test-keys"
-               device_model="unknown" device_name="MR8" firmware_version="4.0.4"
-               host="zhongqing-dev.sh.intel.com (Linux - 2.6.38.6-26.rc1.fc15.i686)"
-               os_version="4.0.4" resolution="1280*800" screen_size="250*150">
-               <other> Here is a Long String for testing ~~~~~~~~~~~~~~~~~~~
-               There's a fire starting in my heart
-                       Reaching a fever pitch, it's
-                       bringing me out the dark
-                       Finally I can see you crystal clear
-                       Go 'head
-                       and sell me out and I'll lay your ship [shit] bare
-                       See how I leave
-                       with every piece of you
-                       Don't underestimate the things that I will do
-
-                       There's a fire starting in my heart
-                       Reaching a fever pitch
-                       And it's
-                       bringing me out the dark
-
-                       The scars of your love remind me of us
-                       They
-                       keep me thinking that we almost had it all
-                       The scars of your love,
-                       they leave me breathless
-                       I can't help feeling
-                       We could have had it all
-                       (You're gonna wish you never had met me)
-                       Rolling in the deep
-                       (Tears are
-                       gonna fall, rolling in the deep)
-                       You had my heart inside of your hand
-                       (You're gonna wish you never had met me)
-                       And you played it, to the
-                       beat
-                       (Tears are gonna fall, rolling in the deep)
-
-                       Baby, I have no story
-                       to be told
-                       But I've heard one on you
-                       And I'm gonna make your head burn
-                       Think of me in the depths of your despair
-                       Make a home down there
-                       As
-                       mine sure won't be shared
-
-                       (You're gonna wish you never had met me)
-                       The
-                       scars of your love remind me of us
-                       (Tears are gonna fall, rolling in
-                       the deep)
-                       They keep me thinking that we almost had it all
-                       (You're gonna
-                       wish you never had met me)
-                       The scars of your love, they leave me
-                       breathless
-                       (Tears are gonna fall, rolling in the deep)
-                       I can't help
-                       feeling
-                       We could have had it all
-                       (You're gonna wish you never had met
-                       me)
-                       Rolling in the deep
-                       (Tears are gonna fall, rolling in the deep)
-                       You
-                       had my heart inside of your hand
-                       (You're gonna wish you never had met
-                       me)
-                       And you played it, to the beat
-                       (Tears are gonna fall, rolling in
-                       the deep)
-                       We could have had it all
-                       Rolling in the deep
-                       You had my heart
-                       inside of your hand
-                       But you played it, with a beating
-
-                       Throw your soul
-                       through every open door (woah)
-                       Count your blessings to find what you
-                       look for (woah)
-                       Turn my sorrow into treasured gold (woah)
-                       You'll pay me
-                       back in kind and reap just what you sow (woah)
-                       (You're gonna wish you
-                       never had met me)
-                       We could have had it all
-                       (Tears are gonna fall,
-                       rolling in the deep)
-                       We could have had it all
-                       (You're gonna wish you
-                       never had met me)
-                       It all, it all, it all
-                       (Tears are gonna fall, rolling
-                       in the deep)
-
-                       We could have had it all
-                       (You're gonna wish you never had
-                       met me)
-                       Rolling in the deep
-                       (Tears are gonna fall, rolling in the deep)
-                       You had my heart inside of your hand
-                       (You're gonna wish you never had
-                       met me)
-                       And you played it to the beat
-                       (Tears are gonna fall, rolling in
-                       the deep)
-
-                       We could have had it all
-                       (You're gonna wish you never had met
-                       me)
-                       Rolling in the deep
-                       (Tears are gonna fall, rolling in the deep)
-                       You
-                       had my heart inside of your hand
-                       (You're gonna wish you never had met
-                       me)
-
-                       But you played it
-                       You played it
-                       You played it
-                       You played it to the
-                       beat.
-               </other>
-       </environment>
-       <summary test_plan_name="tmp_test_1">
-               <start_at>Fri Jul 13 04:04:59 CST 2012</start_at>
-               <end_at>Fri Jul 13 05:01:53 CST 2012</end_at>
-       </summary>
-       <suite name="webapi-tizen-alarm-tests" type="">
-               <set name="Alarm1">
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmRelative_constructor_delay" priority="P1"
-                               purpose="check AlarmRelative attribute when create with delay"
-                               status="approved" type="compliance" result="PASS">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmRelative create constructor with delay
-                                                       </step_desc>
-                                                       <expected>AlarmRelative create succeed with constructor with
-                                                               delay
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_constructor_delay.htm
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>PASS</actual_result>
-                                       <start>Sat Jan 01 2000 13:43:44 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</end>
-                                       <stdout />
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmManager_get" priority="P1"
-                               purpose="check AlarmManager method removeAll: without input attribute"
-                               status="approved" type="compliance" result="BLOCK">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmManager method get: default check
-                                                       </step_desc>
-                                                       <expected>AlarmManager method get: default check succeed
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_get.htm
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>BLOCK</actual_result>
-                                       <start>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</end>
-                                       <stdout>Test time out</stdout>
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmAbsolute_attri_date_01" priority="P1"
-                               purpose="check AlarmAbsolute attribute when create with date"
-                               status="approved" type="compliance">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmAbsolute attribute when create with date
-                                                       </step_desc>
-                                                       <expected>AlarmAbsolute attribute return correct value when
-                                                               create with date
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=1
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>N/R</actual_result>
-                                       <start>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</end>
-                                       <stdout />
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmManager_add_rel" priority="P1"
-                               purpose="check AlarmManager method add: add relative alarm" status="approved"
-                               type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmManager method add: add relative alarm
-                                                       </step_desc>
-                                                       <expected>AlarmManager method add: add relative alarm succeed
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_rel.htm
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</end>
-                                       <stdout>Test time out</stdout>
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmRelative_attri_delay_02" priority="P1"
-                               purpose="check AlarmAbsolute attribute when create with period"
-                               status="approved" type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmRelative attribute when create with delay
-                                                       </step_desc>
-                                                       <expected>AlarmRelative attribute return correct value when
-                                                               create succeed with with delay
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=2
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</end>
-                                       <stdout />
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmManager_getAll" priority="P1"
-                               purpose="check AlarmManager method getAll: default check" status="approved"
-                               type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmManager method getAll: default check
-                                                       </step_desc>
-                                                       <expected>AlarmManager method getAll: default check succeed
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_getAll.htm
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:44:39 GMT+0900 (KST)</end>
-                                       <stdout>Test time out</stdout>
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmAbsolute_attri_date_03" priority="P1"
-                               purpose="check AlarmAbsolute attribute when create with date"
-                               status="approved" type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmAbsolute attribute when create with date
-                                                       </step_desc>
-                                                       <expected>AlarmAbsolute attribute return correct value when
-                                                               create with date
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=3
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:44:39 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:44:41 GMT+0900 (KST)</end>
-                                       <stdout />
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmAbsolute_getNextScheduledDate_date" priority="P1"
-                               purpose="check AlarmAbsolute method getNextScheduledDate when create with date"
-                               status="approved" type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmAbsolute method getNextScheduledDate when
-                                                               create with date
-                                                       </step_desc>
-                                                       <expected>AlarmAbsolute method getNextScheduledDate return
-                                                               correct value when create with date
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_getNextScheduledDate_date.htm
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:44:41 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:44:57 GMT+0900 (KST)</end>
-                                       <stdout>Test time out</stdout>
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmAbsolute_constructor_date" priority="P1"
-                               purpose="check AlarmAbsolute create constructor with date" status="approved"
-                               type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmAbsolute create constructor with date
-                                                       </step_desc>
-                                                       <expected>AlarmAbsolute create succeed with constructor with date
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_constructor_date.htm
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:44:57 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:45:13 GMT+0900 (KST)</end>
-                                       <stdout>Test time out</stdout>
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmRelative_getRemainingSeconds_delay" priority="P1"
-                               purpose="check AlarmRelative method getNextScheduleddelay when create with delay"
-                               status="approved" type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmRelative method getNextScheduleddelay when
-                                                               create with delay
-                                                       </step_desc>
-                                                       <expected>AlarmRelative method getNextScheduleddelay return
-                                                               correct value when create succeed with with delay
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_getRemainingSeconds_delay.htm
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:45:13 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:45:30 GMT+0900 (KST)</end>
-                                       <stdout>Test time out</stdout>
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmRelative_attri_delay_01" priority="P1"
-                               purpose="check AlarmAbsolute attribute when create with period"
-                               status="approved" type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmRelative attribute when create with delay
-                                                       </step_desc>
-                                                       <expected>AlarmRelative attribute return correct value when
-                                                               create succeed with with delay
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=1
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:45:30 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:45:32 GMT+0900 (KST)</end>
-                                       <stdout />
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmManager_add_abs" priority="P1"
-                               purpose="check AlarmManager method add: add absolute alarm" status="approved"
-                               type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmManager method add: add absolute alarm
-                                                       </step_desc>
-                                                       <expected>AlarmManager method add: add absolute alarm succeed
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_abs.htm
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:45:32 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:45:48 GMT+0900 (KST)</end>
-                                       <stdout>Test time out</stdout>
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmAbsolute_attri_date_02" priority="P1"
-                               purpose="check AlarmAbsolute attribute when create with date"
-                               status="approved" type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmAbsolute attribute when create with date
-                                                       </step_desc>
-                                                       <expected>AlarmAbsolute attribute return correct value when
-                                                               create with date
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=2
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:45:48 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:45:50 GMT+0900 (KST)</end>
-                                       <stdout />
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmManager_removeAll" priority="P1"
-                               purpose="check AlarmManager method removeAll: default check" status="approved"
-                               type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmManager method removeAll: default check
-                                                       </step_desc>
-                                                       <expected>AlarmManager method removeAll: default check succeed
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_removeAll.htm
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:45:50 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:46:06 GMT+0900 (KST)</end>
-                                       <stdout>Test time out</stdout>
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmManager_remove" priority="P1"
-                               purpose="check AlarmManager method remove: default check" status="approved"
-                               type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmManager method remove: default check
-                                                       </step_desc>
-                                                       <expected>AlarmManager method remove: default check succeed
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_remove.htm
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:46:06 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:46:22 GMT+0900 (KST)</end>
-                                       <stdout>Test time out</stdout>
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmManagerObject_exist" priority="P1"
-                               purpose="check AlarmManagerObject existance" status="approved" type="compliance"
-                               result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmManagerObject exist</step_desc>
-                                                       <expected>AlarmManagerObject exist</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManagerObject_exist.htm
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:46:22 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:46:38 GMT+0900 (KST)</end>
-                                       <stdout>Test time out</stdout>
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmManager_const_check_01" priority="P1"
-                               purpose="Check AlarmManager constants:PERIOD_MINUTE" status="approved"
-                               type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Check AlarmManager constants:</step_desc>
-                                                       <expected>AlarmManager constants value is correct:</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=1
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:46:38 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:46:40 GMT+0900 (KST)</end>
-                                       <stdout>Can't find variable: tizen</stdout>
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmManager_const_check_02" priority="P1"
-                               purpose="Check AlarmManager constants:PERIOD_HOUR" status="approved"
-                               type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Check AlarmManager constants:</step_desc>
-                                                       <expected>AlarmManager constants value is correct:</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=2
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:46:40 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:46:42 GMT+0900 (KST)</end>
-                                       <stdout>Can't find variable: tizen</stdout>
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmManager_const_check_03" priority="P1"
-                               purpose="Check AlarmManager constants:PERIOD_DAY" status="approved"
-                               type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Check AlarmManager constants:</step_desc>
-                                                       <expected>AlarmManager constants value is correct:</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=3
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:46:42 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:46:44 GMT+0900 (KST)</end>
-                                       <stdout>Can't find variable: tizen</stdout>
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmManager_const_check_04" priority="P1"
-                               purpose="Check AlarmManager constants:PERIOD_WEEK" status="approved"
-                               type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Check AlarmManager constants:</step_desc>
-                                                       <expected>AlarmManager constants value is correct:</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=4
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:46:44 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:46:46 GMT+0900 (KST)</end>
-                                       <stdout>Can't find variable: tizen</stdout>
-                               </result_info>
-                       </testcase>
-               </set>
-               <set name="Alarm">
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmRelative_constructor_delay" priority="P1"
-                               purpose="check AlarmRelative attribute when create with delay"
-                               status="approved" type="compliance" result="PASS">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmRelative create constructor with delay
-                                                       </step_desc>
-                                                       <expected>AlarmRelative create succeed with constructor with
-                                                               delay
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_constructor_delay.htm
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>PASS</actual_result>
-                                       <start>Sat Jan 01 2000 13:43:44 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</end>
-                                       <stdout />
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmManager_get" priority="P1"
-                               purpose="check AlarmManager method removeAll: without input attribute"
-                               status="approved" type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmManager method get: default check
-                                                       </step_desc>
-                                                       <expected>AlarmManager method get: default check succeed
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_get.htm
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</end>
-                                       <stdout>Test time out</stdout>
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmAbsolute_attri_date_01" priority="P1"
-                               purpose="check AlarmAbsolute attribute when create with date"
-                               status="approved" type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmAbsolute attribute when create with date
-                                                       </step_desc>
-                                                       <expected>AlarmAbsolute attribute return correct value when
-                                                               create with date
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=1
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</end>
-                                       <stdout />
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmManager_add_rel" priority="P1"
-                               purpose="check AlarmManager method add: add relative alarm" status="approved"
-                               type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmManager method add: add relative alarm
-                                                       </step_desc>
-                                                       <expected>AlarmManager method add: add relative alarm succeed
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_rel.htm
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</end>
-                                       <stdout>Test time out</stdout>
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmRelative_attri_delay_02" priority="P1"
-                               purpose="check AlarmAbsolute attribute when create with period"
-                               status="approved" type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmRelative attribute when create with delay
-                                                       </step_desc>
-                                                       <expected>AlarmRelative attribute return correct value when
-                                                               create succeed with with delay
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=2
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</end>
-                                       <stdout />
-                               </result_info>
-                       </testcase>
-               </set>
-       </suite>
-       <suite name="webapi-tizen-alarm-tests1" type="">
-               <set name="Alarm4">
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmRelative_constructor_delay" priority="P1"
-                               purpose="check AlarmRelative attribute when create with delay"
-                               status="approved" type="compliance" result="PASS">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmRelative create constructor with delay
-                                                       </step_desc>
-                                                       <expected>AlarmRelative create succeed with constructor with
-                                                               delay
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_constructor_delay.htm
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>PASS</actual_result>
-                                       <start>Sat Jan 01 2000 13:43:44 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</end>
-                                       <stdout />
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmManager_get" priority="P1"
-                               purpose="check AlarmManager method removeAll: without input attribute"
-                               status="approved" type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmManager method get: default check
-                                                       </step_desc>
-                                                       <expected>AlarmManager method get: default check succeed
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_get.htm
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</end>
-                                       <stdout>Test time out</stdout>
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmAbsolute_attri_date_01" priority="P1"
-                               purpose="check AlarmAbsolute attribute when create with date"
-                               status="approved" type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmAbsolute attribute when create with date
-                                                       </step_desc>
-                                                       <expected>AlarmAbsolute attribute return correct value when
-                                                               create with date
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=1
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</end>
-                                       <stdout />
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmManager_add_rel" priority="P1"
-                               purpose="check AlarmManager method add: add relative alarm" status="approved"
-                               type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmManager method add: add relative alarm
-                                                       </step_desc>
-                                                       <expected>AlarmManager method add: add relative alarm succeed
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_rel.htm
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</end>
-                                       <stdout>Test time out</stdout>
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmRelative_attri_delay_02" priority="P1"
-                               purpose="check AlarmAbsolute attribute when create with period"
-                               status="approved" type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmRelative attribute when create with delay
-                                                       </step_desc>
-                                                       <expected>AlarmRelative attribute return correct value when
-                                                               create succeed with with delay
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=2
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</end>
-                                       <stdout />
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmManager_getAll" priority="P1"
-                               purpose="check AlarmManager method getAll: default check" status="approved"
-                               type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmManager method getAll: default check
-                                                       </step_desc>
-                                                       <expected>AlarmManager method getAll: default check succeed
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_getAll.htm
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:44:39 GMT+0900 (KST)</end>
-                                       <stdout>Test time out</stdout>
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmAbsolute_attri_date_03" priority="P1"
-                               purpose="check AlarmAbsolute attribute when create with date"
-                               status="approved" type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmAbsolute attribute when create with date
-                                                       </step_desc>
-                                                       <expected>AlarmAbsolute attribute return correct value when
-                                                               create with date
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=3
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:44:39 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:44:41 GMT+0900 (KST)</end>
-                                       <stdout />
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmAbsolute_getNextScheduledDate_date" priority="P1"
-                               purpose="check AlarmAbsolute method getNextScheduledDate when create with date"
-                               status="approved" type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmAbsolute method getNextScheduledDate when
-                                                               create with date
-                                                       </step_desc>
-                                                       <expected>AlarmAbsolute method getNextScheduledDate return
-                                                               correct value when create with date
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_getNextScheduledDate_date.htm
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:44:41 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:44:57 GMT+0900 (KST)</end>
-                                       <stdout>Test time out</stdout>
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmAbsolute_constructor_date" priority="P1"
-                               purpose="check AlarmAbsolute create constructor with date" status="approved"
-                               type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmAbsolute create constructor with date
-                                                       </step_desc>
-                                                       <expected>AlarmAbsolute create succeed with constructor with date
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_constructor_date.htm
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:44:57 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:45:13 GMT+0900 (KST)</end>
-                                       <stdout>Test time out</stdout>
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmRelative_getRemainingSeconds_delay" priority="P1"
-                               purpose="check AlarmRelative method getNextScheduleddelay when create with delay"
-                               status="approved" type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmRelative method getNextScheduleddelay when
-                                                               create with delay
-                                                       </step_desc>
-                                                       <expected>AlarmRelative method getNextScheduleddelay return
-                                                               correct value when create succeed with with delay
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_getRemainingSeconds_delay.htm
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:45:13 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:45:30 GMT+0900 (KST)</end>
-                                       <stdout>Test time out</stdout>
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmRelative_attri_delay_01" priority="P1"
-                               purpose="check AlarmAbsolute attribute when create with period"
-                               status="approved" type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmRelative attribute when create with delay
-                                                       </step_desc>
-                                                       <expected>AlarmRelative attribute return correct value when
-                                                               create succeed with with delay
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=1
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:45:30 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:45:32 GMT+0900 (KST)</end>
-                                       <stdout />
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmManager_add_abs" priority="P1"
-                               purpose="check AlarmManager method add: add absolute alarm" status="approved"
-                               type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmManager method add: add absolute alarm
-                                                       </step_desc>
-                                                       <expected>AlarmManager method add: add absolute alarm succeed
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_abs.htm
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:45:32 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:45:48 GMT+0900 (KST)</end>
-                                       <stdout>Test time out</stdout>
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmAbsolute_attri_date_02" priority="P1"
-                               purpose="check AlarmAbsolute attribute when create with date"
-                               status="approved" type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmAbsolute attribute when create with date
-                                                       </step_desc>
-                                                       <expected>AlarmAbsolute attribute return correct value when
-                                                               create with date
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=2
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:45:48 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:45:50 GMT+0900 (KST)</end>
-                                       <stdout />
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmManager_removeAll" priority="P1"
-                               purpose="check AlarmManager method removeAll: default check" status="approved"
-                               type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmManager method removeAll: default check
-                                                       </step_desc>
-                                                       <expected>AlarmManager method removeAll: default check succeed
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_removeAll.htm
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:45:50 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:46:06 GMT+0900 (KST)</end>
-                                       <stdout>Test time out</stdout>
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmManager_remove" priority="P1"
-                               purpose="check AlarmManager method remove: default check" status="approved"
-                               type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmManager method remove: default check
-                                                       </step_desc>
-                                                       <expected>AlarmManager method remove: default check succeed
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_remove.htm
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:46:06 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:46:22 GMT+0900 (KST)</end>
-                                       <stdout>Test time out</stdout>
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmManagerObject_exist" priority="P1"
-                               purpose="check AlarmManagerObject existance" status="approved" type="compliance"
-                               result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmManagerObject exist</step_desc>
-                                                       <expected>AlarmManagerObject exist</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManagerObject_exist.htm
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:46:22 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:46:38 GMT+0900 (KST)</end>
-                                       <stdout>Test time out</stdout>
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmManager_const_check_01" priority="P1"
-                               purpose="Check AlarmManager constants:PERIOD_MINUTE" status="approved"
-                               type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Check AlarmManager constants:</step_desc>
-                                                       <expected>AlarmManager constants value is correct:</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=1
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:46:38 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:46:40 GMT+0900 (KST)</end>
-                                       <stdout>Can't find variable: tizen</stdout>
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmManager_const_check_02" priority="P1"
-                               purpose="Check AlarmManager constants:PERIOD_HOUR" status="approved"
-                               type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Check AlarmManager constants:</step_desc>
-                                                       <expected>AlarmManager constants value is correct:</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=2
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:46:40 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:46:42 GMT+0900 (KST)</end>
-                                       <stdout>Can't find variable: tizen</stdout>
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmManager_const_check_03" priority="P1"
-                               purpose="Check AlarmManager constants:PERIOD_DAY" status="approved"
-                               type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Check AlarmManager constants:</step_desc>
-                                                       <expected>AlarmManager constants value is correct:</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=3
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:46:42 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:46:44 GMT+0900 (KST)</end>
-                                       <stdout>Can't find variable: tizen</stdout>
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmManager_const_check_04" priority="P1"
-                               purpose="Check AlarmManager constants:PERIOD_WEEK" status="approved"
-                               type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Check AlarmManager constants:</step_desc>
-                                                       <expected>AlarmManager constants value is correct:</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=4
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:46:44 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:46:46 GMT+0900 (KST)</end>
-                                       <stdout>Can't find variable: tizen</stdout>
-                               </result_info>
-                       </testcase>
-               </set>
-               <set name="Alarm3">
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmRelative_constructor_delay" priority="P1"
-                               purpose="check AlarmRelative attribute when create with delay"
-                               status="approved" type="compliance" result="PASS">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmRelative create constructor with delay
-                                                       </step_desc>
-                                                       <expected>AlarmRelative create succeed with constructor with
-                                                               delay
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_constructor_delay.htm
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>PASS</actual_result>
-                                       <start>Sat Jan 01 2000 13:43:44 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</end>
-                                       <stdout />
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmManager_get" priority="P1"
-                               purpose="check AlarmManager method removeAll: without input attribute"
-                               status="approved" type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmManager method get: default check
-                                                       </step_desc>
-                                                       <expected>AlarmManager method get: default check succeed
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_get.htm
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</end>
-                                       <stdout>Test time out</stdout>
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmAbsolute_attri_date_01" priority="P1"
-                               purpose="check AlarmAbsolute attribute when create with date"
-                               status="approved" type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmAbsolute attribute when create with date
-                                                       </step_desc>
-                                                       <expected>AlarmAbsolute attribute return correct value when
-                                                               create with date
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=1
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</end>
-                                       <stdout />
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmManager_add_rel" priority="P1"
-                               purpose="check AlarmManager method add: add relative alarm" status="approved"
-                               type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmManager method add: add relative alarm
-                                                       </step_desc>
-                                                       <expected>AlarmManager method add: add relative alarm succeed
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_rel.htm
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</end>
-                                       <stdout>Test time out</stdout>
-                               </result_info>
-                       </testcase>
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"
-                               id="Alarm_AlarmRelative_attri_delay_02" priority="P1"
-                               purpose="check AlarmAbsolute attribute when create with period"
-                               status="approved" type="compliance" result="FAIL">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>check AlarmRelative attribute when create with delay
-                                                       </step_desc>
-                                                       <expected>AlarmRelative attribute return correct value when
-                                                               create succeed with with delay
-                                                       </expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=2
-                                       </test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                               <result_info>
-                                       <actual_result>FAIL</actual_result>
-                                       <start>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</start>
-                                       <end>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</end>
-                                       <stdout />
-                               </result_info>
-                       </testcase>
-               </set>
-       </suite>
-</test_definition>
+<?xml version="1.0" encoding="UTF-8"?>\r
+<?xml-stylesheet type="text/xsl"  href="testresult.xsl"?>\r
+<test_definition name="http://tempuri.org" type=""\r
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+       xsi:noNamespaceSchemaLocation="test_definition.xsd">\r
+       <environment device_id="generic/sdk/generic:4.0.4/MR1/302030:eng/test-keys"\r
+               device_model="unknown" device_name="MR8" firmware_version="4.0.4"\r
+               host="zhongqing-dev.sh.intel.com (Linux - 2.6.38.6-26.rc1.fc15.i686)"\r
+               os_version="4.0.4" resolution="1280*800" screen_size="250*150" cts_version="2.3.0-3">\r
+               <other> Here is a Long String for testing ~~~~~~~~~~~~~~~~~~~\r
+               Here is a Long String for testing ~~~~~~~~~~~~~~~~~~~\r
+               Here is a Long String for testing ~~~~~~~~~~~~~~~~~~~\r
+               </other>\r
+       </environment>\r
+       <summary test_plan_name="tmp_test_1">\r
+               <start_at>Fri Jul 13 04:04:59 CST 2012</start_at>\r
+               <end_at>Fri Jul 13 05:01:53 CST 2012</end_at>\r
+       </summary>\r
+       <suite name="webapi-tizen-alarm-tests" type="">\r
+               <set name="Alarm1">\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmRelative_constructor_delay" priority="P1"\r
+                               purpose="check AlarmRelative attribute when create with delay"\r
+                               status="approved" type="compliance" result="PASS">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmRelative create constructor with delay\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmRelative create succeed with constructor with\r
+                                                               delay\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_constructor_delay.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>PASS</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:43:44 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_get" priority="P1"\r
+                               purpose="check AlarmManager method removeAll: without input attribute"\r
+                               status="approved" type="compliance" result="BLOCK">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method get: default check\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method get: default check succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_get.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>BLOCK</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmAbsolute_attri_date_01" priority="P1"\r
+                               purpose="check AlarmAbsolute attribute when create with date"\r
+                               status="approved" type="compliance">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmAbsolute attribute when create with date\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmAbsolute attribute return correct value when\r
+                                                               create with date\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=1\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>N/R</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_add_rel" priority="P1"\r
+                               purpose="check AlarmManager method add: add relative alarm" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method add: add relative alarm\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method add: add relative alarm succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_rel.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmRelative_attri_delay_02" priority="P1"\r
+                               purpose="check AlarmAbsolute attribute when create with period"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmRelative attribute when create with delay\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmRelative attribute return correct value when\r
+                                                               create succeed with with delay\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=2\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_getAll" priority="P1"\r
+                               purpose="check AlarmManager method getAll: default check" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method getAll: default check\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method getAll: default check succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_getAll.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:39 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmAbsolute_attri_date_03" priority="P1"\r
+                               purpose="check AlarmAbsolute attribute when create with date"\r
+                               status="approved" type="compliance" result="Blocked">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmAbsolute attribute when create with date\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmAbsolute attribute return correct value when\r
+                                                               create with date\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=3\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:39 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:41 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmAbsolute_getNextScheduledDate_date" priority="P1"\r
+                               purpose="check AlarmAbsolute method getNextScheduledDate when create with date"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmAbsolute method getNextScheduledDate when\r
+                                                               create with date\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmAbsolute method getNextScheduledDate return\r
+                                                               correct value when create with date\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_getNextScheduledDate_date.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:41 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:57 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmAbsolute_constructor_date" priority="P1"\r
+                               purpose="check AlarmAbsolute create constructor with date" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmAbsolute create constructor with date\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmAbsolute create succeed with constructor with date\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_constructor_date.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:57 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:45:13 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmRelative_getRemainingSeconds_delay" priority="P1"\r
+                               purpose="check AlarmRelative method getNextScheduleddelay when create with delay"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmRelative method getNextScheduleddelay when\r
+                                                               create with delay\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmRelative method getNextScheduleddelay return\r
+                                                               correct value when create succeed with with delay\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_getRemainingSeconds_delay.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:45:13 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:45:30 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmRelative_attri_delay_01" priority="P1"\r
+                               purpose="check AlarmAbsolute attribute when create with period"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmRelative attribute when create with delay\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmRelative attribute return correct value when\r
+                                                               create succeed with with delay\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=1\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:45:30 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:45:32 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_add_abs" priority="P1"\r
+                               purpose="check AlarmManager method add: add absolute alarm" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method add: add absolute alarm\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method add: add absolute alarm succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_abs.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:45:32 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:45:48 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmAbsolute_attri_date_02" priority="P1"\r
+                               purpose="check AlarmAbsolute attribute when create with date"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmAbsolute attribute when create with date\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmAbsolute attribute return correct value when\r
+                                                               create with date\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=2\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:45:48 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:45:50 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_removeAll" priority="P1"\r
+                               purpose="check AlarmManager method removeAll: default check" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method removeAll: default check\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method removeAll: default check succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_removeAll.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:45:50 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:46:06 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_remove" priority="P1"\r
+                               purpose="check AlarmManager method remove: default check" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method remove: default check\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method remove: default check succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_remove.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:46:06 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:46:22 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManagerObject_exist" priority="P1"\r
+                               purpose="check AlarmManagerObject existance" status="approved" type="compliance"\r
+                               result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManagerObject exist</step_desc>\r
+                                                       <expected>AlarmManagerObject exist</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManagerObject_exist.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:46:22 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:46:38 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_const_check_01" priority="P1"\r
+                               purpose="Check AlarmManager constants:PERIOD_MINUTE" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Check AlarmManager constants:</step_desc>\r
+                                                       <expected>AlarmManager constants value is correct:</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=1\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:46:38 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:46:40 GMT+0900 (KST)</end>\r
+                                       <stdout>Can't find variable: tizen</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_const_check_02" priority="P1"\r
+                               purpose="Check AlarmManager constants:PERIOD_HOUR" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Check AlarmManager constants:</step_desc>\r
+                                                       <expected>AlarmManager constants value is correct:</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=2\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:46:40 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:46:42 GMT+0900 (KST)</end>\r
+                                       <stdout>Can't find variable: tizen</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_const_check_03" priority="P1"\r
+                               purpose="Check AlarmManager constants:PERIOD_DAY" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Check AlarmManager constants:</step_desc>\r
+                                                       <expected>AlarmManager constants value is correct:</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=3\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:46:42 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:46:44 GMT+0900 (KST)</end>\r
+                                       <stdout>Can't find variable: tizen</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_const_check_04" priority="P1"\r
+                               purpose="Check AlarmManager constants:PERIOD_WEEK" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Check AlarmManager constants:</step_desc>\r
+                                                       <expected>AlarmManager constants value is correct:</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=4\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:46:44 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:46:46 GMT+0900 (KST)</end>\r
+                                       <stdout>Can't find variable: tizen</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+               </set>\r
+               <set name="Alarm">\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmRelative_constructor_delay" priority="P1"\r
+                               purpose="check AlarmRelative attribute when create with delay"\r
+                               status="approved" type="compliance" result="PASS">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmRelative create constructor with delay\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmRelative create succeed with constructor with\r
+                                                               delay\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_constructor_delay.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>PASS</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:43:44 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_get" priority="P1"\r
+                               purpose="check AlarmManager method removeAll: without input attribute"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method get: default check\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method get: default check succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_get.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmAbsolute_attri_date_01" priority="P1"\r
+                               purpose="check AlarmAbsolute attribute when create with date"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmAbsolute attribute when create with date\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmAbsolute attribute return correct value when\r
+                                                               create with date\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=1\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_add_rel" priority="P1"\r
+                               purpose="check AlarmManager method add: add relative alarm" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method add: add relative alarm\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method add: add relative alarm succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_rel.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmRelative_attri_delay_02" priority="P1"\r
+                               purpose="check AlarmAbsolute attribute when create with period"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmRelative attribute when create with delay\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmRelative attribute return correct value when\r
+                                                               create succeed with with delay\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=2\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+               </set>\r
+       </suite>\r
+       <suite name="webapi-tizen-alarm-tests1" type="">\r
+               <set name="Alarm4">\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmRelative_constructor_delay" priority="P1"\r
+                               purpose="check AlarmRelative attribute when create with delay"\r
+                               status="approved" type="compliance" result="PASS">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmRelative create constructor with delay\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmRelative create succeed with constructor with\r
+                                                               delay\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_constructor_delay.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>PASS</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:43:44 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_get" priority="P1"\r
+                               purpose="check AlarmManager method removeAll: without input attribute"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method get: default check\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method get: default check succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_get.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmAbsolute_attri_date_01" priority="P1"\r
+                               purpose="check AlarmAbsolute attribute when create with date"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmAbsolute attribute when create with date\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmAbsolute attribute return correct value when\r
+                                                               create with date\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=1\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_add_rel" priority="P1"\r
+                               purpose="check AlarmManager method add: add relative alarm" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method add: add relative alarm\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method add: add relative alarm succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_rel.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmRelative_attri_delay_02" priority="P1"\r
+                               purpose="check AlarmAbsolute attribute when create with period"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmRelative attribute when create with delay\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmRelative attribute return correct value when\r
+                                                               create succeed with with delay\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=2\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_getAll" priority="P1"\r
+                               purpose="check AlarmManager method getAll: default check" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method getAll: default check\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method getAll: default check succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_getAll.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:39 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmAbsolute_attri_date_03" priority="P1"\r
+                               purpose="check AlarmAbsolute attribute when create with date"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmAbsolute attribute when create with date\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmAbsolute attribute return correct value when\r
+                                                               create with date\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=3\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:39 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:41 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmAbsolute_getNextScheduledDate_date" priority="P1"\r
+                               purpose="check AlarmAbsolute method getNextScheduledDate when create with date"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmAbsolute method getNextScheduledDate when\r
+                                                               create with date\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmAbsolute method getNextScheduledDate return\r
+                                                               correct value when create with date\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_getNextScheduledDate_date.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:41 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:57 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmAbsolute_constructor_date" priority="P1"\r
+                               purpose="check AlarmAbsolute create constructor with date" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmAbsolute create constructor with date\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmAbsolute create succeed with constructor with date\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_constructor_date.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:57 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:45:13 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmRelative_getRemainingSeconds_delay" priority="P1"\r
+                               purpose="check AlarmRelative method getNextScheduleddelay when create with delay"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmRelative method getNextScheduleddelay when\r
+                                                               create with delay\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmRelative method getNextScheduleddelay return\r
+                                                               correct value when create succeed with with delay\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_getRemainingSeconds_delay.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:45:13 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:45:30 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmRelative_attri_delay_01" priority="P1"\r
+                               purpose="check AlarmAbsolute attribute when create with period"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmRelative attribute when create with delay\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmRelative attribute return correct value when\r
+                                                               create succeed with with delay\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=1\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:45:30 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:45:32 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_add_abs" priority="P1"\r
+                               purpose="check AlarmManager method add: add absolute alarm" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method add: add absolute alarm\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method add: add absolute alarm succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_abs.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:45:32 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:45:48 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmAbsolute_attri_date_02" priority="P1"\r
+                               purpose="check AlarmAbsolute attribute when create with date"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmAbsolute attribute when create with date\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmAbsolute attribute return correct value when\r
+                                                               create with date\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=2\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:45:48 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:45:50 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_removeAll" priority="P1"\r
+                               purpose="check AlarmManager method removeAll: default check" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method removeAll: default check\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method removeAll: default check succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_removeAll.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:45:50 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:46:06 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_remove" priority="P1"\r
+                               purpose="check AlarmManager method remove: default check" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method remove: default check\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method remove: default check succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_remove.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:46:06 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:46:22 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManagerObject_exist" priority="P1"\r
+                               purpose="check AlarmManagerObject existance" status="approved" type="compliance"\r
+                               result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManagerObject exist</step_desc>\r
+                                                       <expected>AlarmManagerObject exist</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManagerObject_exist.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:46:22 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:46:38 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_const_check_01" priority="P1"\r
+                               purpose="Check AlarmManager constants:PERIOD_MINUTE" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Check AlarmManager constants:</step_desc>\r
+                                                       <expected>AlarmManager constants value is correct:</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=1\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:46:38 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:46:40 GMT+0900 (KST)</end>\r
+                                       <stdout>Can't find variable: tizen</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_const_check_02" priority="P1"\r
+                               purpose="Check AlarmManager constants:PERIOD_HOUR" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Check AlarmManager constants:</step_desc>\r
+                                                       <expected>AlarmManager constants value is correct:</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=2\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:46:40 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:46:42 GMT+0900 (KST)</end>\r
+                                       <stdout>Can't find variable: tizen</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_const_check_03" priority="P1"\r
+                               purpose="Check AlarmManager constants:PERIOD_DAY" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Check AlarmManager constants:</step_desc>\r
+                                                       <expected>AlarmManager constants value is correct:</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=3\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:46:42 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:46:44 GMT+0900 (KST)</end>\r
+                                       <stdout>Can't find variable: tizen</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_const_check_04" priority="P1"\r
+                               purpose="Check AlarmManager constants:PERIOD_WEEK" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Check AlarmManager constants:</step_desc>\r
+                                                       <expected>AlarmManager constants value is correct:</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=4\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:46:44 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:46:46 GMT+0900 (KST)</end>\r
+                                       <stdout>Can't find variable: tizen</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+               </set>\r
+               <set name="Alarm3">\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmRelative_constructor_delay" priority="P1"\r
+                               purpose="check AlarmRelative attribute when create with delay"\r
+                               status="approved" type="compliance" result="PASS">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmRelative create constructor with delay\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmRelative create succeed with constructor with\r
+                                                               delay\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_constructor_delay.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>PASS</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:43:44 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_get" priority="P1"\r
+                               purpose="check AlarmManager method removeAll: without input attribute"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method get: default check\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method get: default check succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_get.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmAbsolute_attri_date_01" priority="P1"\r
+                               purpose="check AlarmAbsolute attribute when create with date"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmAbsolute attribute when create with date\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmAbsolute attribute return correct value when\r
+                                                               create with date\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=1\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_add_rel" priority="P1"\r
+                               purpose="check AlarmManager method add: add relative alarm" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method add: add relative alarm\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method add: add relative alarm succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_rel.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmRelative_attri_delay_02" priority="P1"\r
+                               purpose="check AlarmAbsolute attribute when create with period"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmRelative attribute when create with delay\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmRelative attribute return correct value when\r
+                                                               create succeed with with delay\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=2\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+               </set>\r
+       </suite>\r
+</test_definition>\r
index 3e83d10..15b583c 100644 (file)
@@ -24,7 +24,7 @@
                <xs:complexType>
 
                        <xs:sequence minOccurs="1" maxOccurs="unbounded">
-                               <xs:element ref="testcase" minOccurs="0"  maxOccurs="unbounded"></xs:element>
+                               <xs:element ref="testcase" minOccurs="0" maxOccurs="unbounded"></xs:element>
                        </xs:sequence>
 
 
                </xs:attribute>
                <xs:attribute name="purpose" type="xs:string"></xs:attribute>
                <xs:attribute name="result" type="xs:string"></xs:attribute>
+               <xs:attribute name="onload_delay" type="xs:int" use="optional"
+                       default="3">
+               </xs:attribute>
        </xs:attributeGroup>
 
        <xs:simpleType name="priority_simple_type">
 
        <xs:complexType name="simpleMeasurementType">
                <xs:attribute name="value" type="xs:string"></xs:attribute>
+               <xs:attribute name="file" type="xs:string"></xs:attribute>
        </xs:complexType>
 
 
                                <xs:element name="environment" type="BuildInfoType"
                                        minOccurs="0">
                                </xs:element>
-                               <xs:element name="summary" type="summaryType"
-                                       minOccurs="0">
+                               <xs:element name="summary" type="summaryType" minOccurs="0">
                                </xs:element>
-                               <xs:element ref="suite" minOccurs="1"
-                                       maxOccurs="unbounded">
+                               <xs:element ref="suite" minOccurs="1" maxOccurs="unbounded">
                                </xs:element>
                        </xs:sequence>
                </xs:complexType>
                <xs:attribute name="screen_size" type="xs:string"></xs:attribute>
                <xs:attribute name="resolution" type="xs:string"></xs:attribute>
                <xs:attribute name="host" type="xs:string"></xs:attribute>
+               <xs:attribute name="cts_version" type="xs:string"></xs:attribute>
        </xs:complexType>
 
 
                </xs:sequence>
                <xs:attribute name="test_plan_name" type="xs:string"></xs:attribute>
        </xs:complexType>
-       
+
 
        <xs:complexType name="specsType">
                <xs:sequence>
        <xs:complexType name="spec_assertionType">
                <xs:attribute name="category" type="xs:string" use="required"></xs:attribute>
                <xs:attribute name="section" type="xs:string" use="required"></xs:attribute>
-               <xs:attribute name="specification" type="xs:string"
-                       use="required">
+               <xs:attribute name="specification" type="xs:string" use="required">
                </xs:attribute>
-               <xs:attribute name="interface" type="xs:string"
-                       use="required">
+               <xs:attribute name="interface" type="xs:string" use="required">
                </xs:attribute>
-               <xs:attribute name="element_name" type="xs:string"
-                       use="optional">
+               <xs:attribute name="element_name" type="xs:string" use="optional">
                </xs:attribute>
                <xs:attribute name="usage" type="xs:boolean" default="false"></xs:attribute>
                <xs:attribute name="element_type" type="xs:string"></xs:attribute>
index bc43ecf..3058806 100644 (file)
@@ -9,8 +9,8 @@
                                @import "tests.css";
                        </STYLE>
                        <head>
-                                   <script type="text/javascript" src="jquery.min.js" />
-            </head>
+                               <script type="text/javascript" src="jquery.min.js" />
+                       </head>
                        <body>
                                <div id="testcasepage">
                                        <div id="title">
                                                        <tr>
                                                                <td>Device Name</td>
                                                                <td>
-                                                                       <xsl:value-of select="test_definition/environment/@device_name" />
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="test_definition/environment/@device_name">
+                                                                                       <xsl:if test="test_definition/environment/@device_name = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="test_definition/environment/@device_name" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
                                                                </td>
                                                        </tr>
                                                        <tr>
                                                                <td>Device Model</td>
                                                                <td>
-                                                                       <xsl:value-of select="test_definition/environment/@device_model" />
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="test_definition/environment/@device_model">
+                                                                                       <xsl:if test="test_definition/environment/@device_model = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="test_definition/environment/@device_model" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
                                                                </td>
                                                        </tr>
                                                        <tr>
                                                                <td>OS Version</td>
                                                                <td>
-                                                                       <xsl:value-of select="test_definition/environment/@os_version" />
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="test_definition/environment/@os_version">
+                                                                                       <xsl:if test="test_definition/environment/@os_version = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="test_definition/environment/@os_version" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
                                                                </td>
                                                        </tr>
                                                        <tr>
                                                                <td>Device ID</td>
                                                                <td>
-                                                                       <xsl:value-of select="test_definition/environment/@device_id" />
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="test_definition/environment/@device_id">
+                                                                                       <xsl:if test="test_definition/environment/@device_id = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="test_definition/environment/@device_id" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
                                                                </td>
                                                        </tr>
                                                        <tr>
                                                                <td>Firmware Version</td>
                                                                <td>
-                                                                       <xsl:value-of select="test_definition/environment/@firmware_version" />
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="test_definition/environment/@firmware_version">
+                                                                                       <xsl:if test="test_definition/environment/@firmware_version = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="test_definition/environment/@firmware_version" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
                                                                </td>
                                                        </tr>
                                                        <tr>
                                                                <td>Screen Size</td>
                                                                <td>
-                                                                       <xsl:value-of select="test_definition/environment/@screen_size" />
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="test_definition/environment/@screen_size">
+                                                                                       <xsl:if test="test_definition/environment/@screen_size = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="test_definition/environment/@screen_size" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
                                                                </td>
                                                        </tr>
                                                        <tr>
                                                                <td>Resolution</td>
                                                                <td>
-                                                                       <xsl:value-of select="test_definition/environment/@resolution" />
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="test_definition/environment/@resolution">
+                                                                                       <xsl:if test="test_definition/environment/@resolution = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="test_definition/environment/@resolution" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
                                                                </td>
                                                        </tr>
                                                        <tr>
                                                                <td>Host Info</td>
                                                                <td>
-                                                                       <xsl:value-of select="test_definition/environment/@host" />
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="test_definition/environment/@host">
+                                                                                       <xsl:if test="test_definition/environment/@host = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="test_definition/environment/@host" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>CTS Version</td>
+                                                               <td>
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="test_definition/environment/@cts_version">
+                                                                                       <xsl:if test="test_definition/environment/@cts_version = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="test_definition/environment/@cts_version" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
                                                                </td>
                                                        </tr>
                                                        <tr>
                                                                <td>Others</td>
                                                                <td>
+                                                                       <xsl:if test="test_definition/environment/other = ''">
+                                                                               N/A
+                                                                       </xsl:if>
                                                                        <xsl:call-template name="br-replace">
                                                                                <xsl:with-param name="word"
                                                                                        select="test_definition/environment/other" />
                                                                        </xsl:call-template>
-                                                                       <!-- xsl:value-of select="test_definition/environment/other" / -->
                                                                </td>
                                                        </tr>
                                                </table>
                                                                </td>
                                                        </tr>
                                                        <tr>
-                                                               <td>Test N/A</td>
+                                                               <td>Test Block</td>
                                                                <td>
                                                                        <xsl:value-of
                                                                                select="count(test_definition//suite/set/testcase[@result = 'BLOCK'])" />
 
                                        <div id="suite_summary">
                                                <div id="title">
-                                                <a name="contents"></a>
+                                                       <a name="contents"></a>
                                                        <table>
                                                                <tr>
                                                                        <td class="title">
                                                                <th>Suite</th>
                                                                <th>Passed</th>
                                                                <th>Failed</th>
-                                                               <th>N/A</th>
+                                                               <th>Blocked</th>
                                                                <th>Not Run</th>
                                                                <th>Total</th>
                                                        </tr>
                                                                <tr>
                                                                        <td>
                                                                                <a>
-                                                                                   <xsl:attribute name="href">
-                                                                                      #<xsl:value-of select="@name"/>
+                                                                                       <xsl:attribute name="href">
+                                                                                      #<xsl:value-of
+                                                                                               select="@name" />
                                                                                    </xsl:attribute>
-                                                                                   <xsl:value-of select="@name" />
-                                                                                </a>
+                                                                                       <xsl:value-of select="@name" />
+                                                                               </a>
                                                                        </td>
                                                                        <td>
                                                                                <xsl:value-of select="count(set//testcase[@result = 'PASS'])" />
                                                </table>
                                        </div>
 
+                                       <div id="fail_cases">
+                                               <div id="title">
+                                                       <table>
+                                                               <tr>
+                                                                       <td class="title">
+                                                                               <h1 align="center">
+                                                                                       Test Failures (
+                                                                                       <xsl:value-of
+                                                                                               select="count(test_definition/suite/set//testcase[@result = 'FAIL'])" />
+                                                                                       )
+                                                                               </h1>
+                                                                       </td>
+                                                               </tr>
+                                                       </table>
+                                               </div>
+                                               <xsl:for-each select="test_definition/suite">
+                                                       <xsl:sort select="@name" />
+                                                       <div id="btc">
+                                                               <a href="#contents">Back to Contents</a>
+                                                       </div>
+                                                       <div id="suite_title">
+                                                               Test Suite:
+                                                               <xsl:value-of select="@name" />
+                                                               <a>
+                                                                       <xsl:attribute name="name">
+                                          <xsl:value-of
+                                                                               select="@name" />
+                                    </xsl:attribute>
+                                                               </a>
+                                                       </div>
+                                                       <table>
+                                                               <tr>
+                                                                       <th>Case_ID</th>
+                                                                       <th>Purpose</th>
+                                                                       <th>Result</th>
+                                                                       <th>Stdout</th>
+                                                               </tr>
+                                                               <xsl:for-each select=".//set">
+                                                                       <xsl:sort select="@name" />
+                                                                       <tr>
+                                                                               <td colspan="4">
+                                                                                       Test Set:
+                                                                                       <xsl:value-of select="@name" />
+                                                                               </td>
+                                                                       </tr>
+                                                                       <xsl:for-each select=".//testcase">
+                                                                               <xsl:sort select="@id" />
+                                                                               <xsl:choose>
+                                                                                       <xsl:when test="@result">
+                                                                                               <xsl:if test="@result = 'FAIL'">
+
+                                                                                                       <tr>
+                                                                                                               <td>
+                                                                                                                       <xsl:value-of select="@id" />
+                                                                                                               </td>
+                                                                                                               <td>
+                                                                                                                       <xsl:value-of select="@purpose" />
+                                                                                                               </td>
+
+
+                                                                                                               <td class="red_rate">
+                                                                                                                       <xsl:value-of select="@result" />
+                                                                                                               </td>
+
+                                                                                                               <td>
+                                                                                                                       <xsl:value-of select=".//result_info/stdout" />
+                                                                                                                       <xsl:if test=".//result_info/stdout = ''">
+                                                                                                                               N/A
+                                                                                                                       </xsl:if>
+                                                                                                               </td>
+                                                                                                       </tr>
+                                                                                               </xsl:if>
+                                                                                       </xsl:when>
+                                                                               </xsl:choose>
+                                                                       </xsl:for-each>
+                                                               </xsl:for-each>
+                                                       </table>
+                                               </xsl:for-each>
+                                       </div>
+
                                        <div id="cases">
                                                <div id="title">
                                                        <table>
                                                </div>
                                                <xsl:for-each select="test_definition/suite">
                                                        <xsl:sort select="@name" />
-                                                       <div id="btc"><a href="#contents">Back to Contents</a></div>
+                                                       <div id="btc">
+                                                               <a href="#contents">Back to Contents</a>
+                                                       </div>
                                                        <div id="suite_title">
                                                                Test Suite:
                                                                <xsl:value-of select="@name" />
-                                                                <a>
-                                                                  <xsl:attribute name="name">
-                                                                     <xsl:value-of select="@name"/>
+                                                               <a>
+                                                                       <xsl:attribute name="name">
+                                                                     <xsl:value-of
+                                                                               select="@name" />
                                                                   </xsl:attribute>
-                                                                </a>
+                                                               </a>
                                                        </div>
                                                        <table>
                                                                <tr>
                                                                                                                        BLOCK
                                                                                                                </td>
                                                                                                        </xsl:if>
+                                                                                                       <xsl:if test="@result != 'BLOCK' and @result != 'FAIL' and @result != 'PASS' ">
+                                                                                                               <td>
+                                                                                                                       Not Run
+                                                                                                               </td>
+                                                                                                       </xsl:if>
                                                                                                </xsl:when>
                                                                                                <xsl:otherwise>
                                                                                                        <td>
                                                </xsl:for-each>
                                        </div>
                                </div>
-                               <div id="goTopBtn"><img border="0" src="./back_top.png"/></div>
+                               <div id="goTopBtn">
+                                       <img border="0" src="./back_top.png" />
+                               </div>
                                <script type="text/javascript" src="application.js" />
                                <script language="javascript" type="text/javascript">
-                                    $(document).ready(function(){
-                                        goTopEx();
-                                    });
-                </script>
+                                       $(document).ready(function(){
+                                       goTopEx();
+                                       });
+                               </script>
                        </body>
                </html>
        </xsl:template>
index ca1658a..cbad68a 100644 (file)
-@charset "UTF-8";
-/* CSS Document */
-#testcasepage div,#testcasepage h1,#testcasepage p,#testcasepage table,#testcasepage tr,#testcasepage th,#testcasepage td
-       {
-       margin: 0;
-       padding: 0;
-       border: 0;
-       font-weight: inherit;
-       font-style: inherit;
-       font-size: 0.96em;
-       font-family: arial;
-       vertical-align: baseline;
-}
-
-#testcasepage p {
-       text-align: left;
-}
-
-#suite_title {
-       text-align: left;
-}
-
-#btc {
-       text-align: right;
-}
-
-#testcasepage table {
-       border-collapse: separate;
-       border-spacing: 0;
-       margin-bottom: 1.4em;
-       vertical-align: middle;
-}
-
-#testcasepage th,#testcasepage td {
-       text-align: left;
-       font-weight: normal;
-       padding: 4px 10px 4px 5px;
-       vertical-align: middle;
-}
-
-#cases table {
-       width: 101%;
-}
-
-#title table {
-       width: 101%;
-}
-
-#device table {
-       width: 50%;
-}
-
-#summary table {
-       width: 50%;
-}
-
-#testcasepage th {
-       border-bottom: 1px solid #000;
-       background-color: #AAAAAA;
-       border-left: 1px solid #000;
-       border-top: 1px solid #000;
-       color: #000;
-       font-weight: bold;
-       vertical-align: bottom;
-}
-
-#testcasepage th:last-child,#testcasepage td:last-child {
-       border-right: 1px solid #000;
-}
-
-#testcasepage td {
-       border-left: 1px solid;
-       font-weight: normal;
-       border-bottom: 1px solid;
-}
-
-#testcasepage td.yellow_rate {
-       background-color: #ffcc00;
-}
-
-#testcasepage td.green_rate {
-       background-color: #33cc33;
-}
-
-#testcasepage td.dgreen_rate {
-       background-color: #339933;
-}
-
-#testcasepage td.red_rate {
-       background-color: #FF3333;
-}
-
-#title table,#title tr,#title td {
-       border-left: none;
-       border-bottom: none;
-       text-align: center;
-}
-
-#title td:last-child {
-       border-right: none;
-}
-
-#testcasepage h1 {
-       font-size: 2em;
-       font-family: Arial, sans-serif;
-       font-weight: bold;
-       line-height: 1;
-       color: #000;
-       margin-bottom: 0.75em;
-       padding-top: 0.25em;
-       font-weight: bold;
-}
-
-#goTopBtn {
-       right: 0px;
-       bottom: 0px;
-       position: fixed; +position: absolute;
-       top: expression(parseInt(document.body.scrollTop)+document.body.clientHeight-40);
+@charset "UTF-8";\r
+/* CSS Document */\r
+#testcasepage div,#testcasepage h1,#testcasepage p,#testcasepage table,#testcasepage tr,#testcasepage th,#testcasepage td\r
+       {\r
+       margin: 0;\r
+       padding: 0;\r
+       border: 0;\r
+       font-weight: inherit;\r
+       font-style: inherit;\r
+       font-size: 0.96em;\r
+       font-family: arial;\r
+       vertical-align: baseline;\r
+}\r
+\r
+#testcasepage p {\r
+       text-align: left;\r
+}\r
+\r
+#suite_title {\r
+       text-align: left;\r
+}\r
+\r
+#btc {\r
+       text-align: right;\r
+}\r
+\r
+#testcasepage table {\r
+       border-collapse: separate;\r
+       border-spacing: 0;\r
+       margin-bottom: 1.4em;\r
+       vertical-align: middle;\r
+}\r
+\r
+#testcasepage th,#testcasepage td {\r
+       text-align: left;\r
+       font-weight: normal;\r
+       padding: 4px 10px 4px 5px;\r
+       vertical-align: middle;\r
+}\r
+\r
+#cases table {\r
+       width: 101%;\r
+}\r
+\r
+#fail_cases table {\r
+       width: 101%;\r
+}\r
+\r
+#title table {\r
+       width: 101%;\r
+}\r
+\r
+#device table {\r
+       width: 50%;\r
+}\r
+\r
+#summary table {\r
+       width: 50%;\r
+}\r
+\r
+#testcasepage th {\r
+       border-bottom: 1px solid #000;\r
+       background-color: #AAAAAA;\r
+       border-left: 1px solid #000;\r
+       border-top: 1px solid #000;\r
+       color: #000;\r
+       font-weight: bold;\r
+       vertical-align: bottom;\r
+}\r
+\r
+#testcasepage th:last-child,#testcasepage td:last-child {\r
+       border-right: 1px solid #000;\r
+}\r
+\r
+#testcasepage td {\r
+       border-left: 1px solid;\r
+       font-weight: normal;\r
+       border-bottom: 1px solid;\r
+}\r
+\r
+#testcasepage td.yellow_rate {\r
+       background-color: #ffcc00;\r
+}\r
+\r
+#testcasepage td.green_rate {\r
+       background-color: #33cc33;\r
+}\r
+\r
+#testcasepage td.dgreen_rate {\r
+       background-color: #339933;\r
+}\r
+\r
+#testcasepage td.red_rate {\r
+       background-color: #FF3333;\r
+}\r
+\r
+#title table,#title tr,#title td {\r
+       border-left: none;\r
+       border-bottom: none;\r
+       text-align: center;\r
+}\r
+\r
+#title td:last-child {\r
+       border-right: none;\r
+}\r
+\r
+#testcasepage h1 {\r
+       font-size: 2em;\r
+       font-family: Arial, sans-serif;\r
+       font-weight: bold;\r
+       line-height: 1;\r
+       color: #000;\r
+       margin-bottom: 0.75em;\r
+       padding-top: 0.25em;\r
+       font-weight: bold;\r
+}\r
+\r
+#goTopBtn {\r
+       right: 0px;\r
+       bottom: 0px;\r
+       position: fixed; +position: absolute;\r
+       top: expression(parseInt(document.body.scrollTop)+document.body.clientHeight-40);\r
 }
\ No newline at end of file
index eab8498..bf9b312 100644 (file)
-<?xml version="1.0" encoding="UTF-8"?>
-<?xml-stylesheet type="text/xsl"  href="testcase.xsl"?>
-<test_definition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:noNamespaceSchemaLocation="test_definition.xsd">
-       <suite name="webapi-w3c-widget-tests">
-               <set name="WidgetPackaging">
-                       <testcase
-                               purpose="Tests the user agent's ability to process files with no file extension. "
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="auto" priority="P3" id="dm">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dm</step_desc>
-                                                       <expected> 
-       To pass, the user agent start file of the widget must be index.htm</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dm</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Tizen" specification="Tizen Packaging and XML Configuration"
-                                                       interface="Tizen" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Tests the user agent's ability to process files with a file extension other than .wgt."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="dn">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dn.test</step_desc>
-                                                       <expected> 
-       To pass, the user agent start file of the widget must be index.htm</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dn.test</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase purpose="Test the ability of the UA to verify a zip archive."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="do">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/split.wgt.001</step_desc>
-                                                       <expected> 
-       To pass, the user agent must treat this as an invalid widget (archive is spanned).</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/split.wgt.001</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Test the user agent's ability to get a widget over HTTP and respect the application/widget mimetype. The server from which this test is served from has been set up to label the 'test' resource as an 'application/widget'."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="z3">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/z3</step_desc>
-                                                       <expected> 
-       To pass, a user agent must correctly process this resource as a widget because of the 'application/widget' mimetype (i.e., not only because of sniffing).</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/z3</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Test the user agent's ability to get a widget over HTTP and respect the 'application/widget' mimetype. The server from which this test is served from has been set up to label the 'test.html' resource as an 'application/widget'."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="z4">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/z4.html</step_desc>
-                                                       <expected> 
-       To pass, a user agent must correctly process this resource as a widget because of the 'application/widget' mimetype (i.e., not only via sniffing).</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/z4.html</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Tests that an empty defaultlocale attribute is ignored (and does not cause the widget to be treated as invalid)."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="dlocignore00">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dlocignore00.wgt</step_desc>
-                                                       <expected> 
-       To pass, the widget must simply run..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dlocignore00.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Tests that the user agent applies rule for getting a single attribute value to the defaultlocale attribute."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="dlocignore01">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-001.wgt</step_desc>
-                                                       <expected> To pass, the name of the widget must be the value PASS..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-001.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Test that the user agent matches obscure, yet valid, language tags."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="dlocignore02">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-002.wgt</step_desc>
-                                                       <expected> To pass, the widgets description must be the value PASS..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-002.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Tests that a language tag already part of the UA's locales list is ignored when it is repeated for defaultlocale attribute."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="dlocignore03">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-003.wgt</step_desc>
-                                                       <expected> 
-       To pass, the specified value should not be added twice to the locales list of the UA..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-003.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Tests that the default locale is added to the end of the user agent's locale list 
-       (and does not override the default language, which is assumed to be 'en')."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="dlocignore04">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-004.wgt</step_desc>
-                                                       <expected> 
-       To pass, the name of the widget must be PASS..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-004.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Tests that the value of defaultlocale is also used to in folder-based localization."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="dlocuse00">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-000.wgt</step_desc>
-                                                       <expected>
-               To pass, the index.html of the folder 'locales/esx-al/' should be loaded and say PASS..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-000.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Tests that the value of defaultlocale works in conjunction to xml:lang on the widget element."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="dlocuse01">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dlocuse01.wgt</step_desc>
-                                                       <expected>
-               To pass, the name of the widget must be PASS..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dlocuse01.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Tests that the UA rejects configuration documents that don't have
-       correct widget element at the root."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="aa">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aa.wgt</step_desc>
-                                                       <expected> To pass, the UA must treat this as an
-       invalid widget (the root element is not widget)..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aa.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Tests that the UA rejects configuration documents that don't have correct
-       widget element at the root."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="ab">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ab.wgt</step_desc>
-                                                       <expected> To pass, the UA must treat this as an invalid widget (the namespace is wrong)..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ab.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Tests that the UA rejects configuration documents that don't have correct widget
-       element at the root."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="ac">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ac.wgt</step_desc>
-                                                       <expected>To pass, the UA must treat this as an invalid widget (the namespace is missing)..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ac.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Test that a user agent correctly processes a author element."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="af">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/af.wgt</step_desc>
-                                                       <expected>
-       To pass, the author name must be the string "PASS"..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/af.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Test that a user agent correctly applies the Rule for Getting Text Content with Normalized White Space."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="ag">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ag.wgt</step_desc>
-                                                       <expected>
-       To pass, the widget author must be the string "P A S S" (i.e., white space collapsed to single space)..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ag.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Test that a user agent correctly applies the Rule for Getting Text Content with Normalized White Space."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="ah">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ah.wgt</step_desc>
-                                                       <expected>
-       To pass, the author name must be the string "PASS" (i.e., all white space collapsed to single space, spaces at start/end trimmed)..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ah.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Test that a user agent correctly applies the rule for getting a single attribute value."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="ai">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ai.wgt</step_desc>
-                                                       <expected>
-       To pass, the author email must be the string "PASS"..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ai.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Test that a user agent correctly applies the rule for getting a single attribute value and the Rule for Getting Text Content with Normalized White Space."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="aj">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aj.wgt</step_desc>
-                                                       <expected>
-       To pass, the author name must be the string "PASS"..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aj.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Test that a user agent correctly applies the rule for getting a single attribute value and the Rule for Getting Text Content with Normalized White Space."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="ak">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ak.wgt</step_desc>
-                                                       <expected>
-       To pass, the author name must be the string "PASS"..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ak.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Test the ability of the user agent to handle an empty author element."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="al">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/al.wgt</step_desc>
-                                                       <expected>
-       To pass, the author name must be an empty string..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/al.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Test the ability of the user agent to correctly process the author href attribute."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="am">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/am.wgt</step_desc>
-                                                       <expected>
-       To pass, the value of author href must be "PASS:PASS"..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/am.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Test the ability of the user agent to correctly process the author href attribute."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="an">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/an.wgt</step_desc>
-                                                       <expected>
-       To pass, the value of author href must be ignored..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/an.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Test that a user agent correctly processes a name element."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="ao">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ao.wgt</step_desc>
-                                                       <expected>
-       To pass, the widget name must be the string "PASS"..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ao.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Test that a user agent correctly applies the Rule for Getting Text Content with Normalized White Space."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="ap">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ap.wgt</step_desc>
-                                                       <expected>
-       To pass, the widget name must be the string "P A S S" (i.e., white space collapsed to single space)..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ap.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Test that a user agent correctly applies the Rule for Getting Text Content with Normalized White Space."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="aq">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aq.wgt</step_desc>
-                                                       <expected>
-       To pass, the widget name must be the string "PASS" (i.e., all white space collapsed to single space, spaces at front/back trimmed)..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aq.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Test that a user agent correctly applies the rule for getting a single attribute value."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="ar">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ar.wgt</step_desc>
-                                                       <expected>
-       To pass, the widget short name must be the string "PASS"..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ar.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Test that a user agent correctly applies the rule for getting a single attribute value and
-       the Rule for Getting Text Content with Normalized White Space."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="as">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/as.wgt</step_desc>
-                                                       <expected>
-       To pass, the widget short name must be the string "PASS" and the widget name must be "PASS"..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/as.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Test that a user agent correctly applies the rule for getting a single attribute value and
-       the Rule for Getting Text Content with Normalized White Space."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="at">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/at.wgt</step_desc>
-                                                       <expected>
-       To pass, the widget short name must be the string "PASS" and the widget name must be "PASS"..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/at.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Test that a user agent correctly processes the short attribute."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="au">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/au.wgt</step_desc>
-                                                       <expected>
-       To pass, the widget short name must be an empty string..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/au.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Test the ability of the user agent to handle an empty name element."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="av">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/av.wgt</step_desc>
-                                                       <expected>
-       To pass, the widget name must be an empty string..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/av.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Test that a user agent correctly processes a name element with xml:lang attribute."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="oa">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/oa.wgt</step_desc>
-                                                       <expected>
-       To pass, the widget name must be the string "PASS"..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/oa.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Test that the user agent does not attempt to load a default start file when a custom start file has been declared."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="aw">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aw.wgt</step_desc>
-                                                       <expected>
-       To pass, the widget start file must point to "pass.html" and the icons list must contain a pointer to "icon.png" at the root of the widget..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aw.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase purpose="Test the UA's ability process the height attribute."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="ax">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ax.wgt</step_desc>
-                                                       <expected>
-       To pass, the widget height must be either the numeric value 123 or a value greater than 0..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ax.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase purpose="Test the UA's ability process the height attribute."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="ay">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ay.wgt</step_desc>
-                                                       <expected>
-       To pass, the user agent must ignore the value of the height attribute (the value is composed of characters)..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ay.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase purpose="Test the UA's ability process the height attribute."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="az">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/az.wgt</step_desc>
-                                                       <expected>
-       To pass, the widget height must be the numeric value 100 or a value greater than 0 (resulting from rule for parsing a non-negative integer)..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/az.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase purpose="Test the UA's ability process the height attribute."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="a1">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a1.wgt</step_desc>
-                                                       <expected>
-       To pass, the widget height must be the numeric value 123 or a value greater than 0 (resulting from rule for parsing a non-negative integer)..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a1.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase purpose="Test the UA's ability process the height attribute."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="a2">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a2.wgt</step_desc>
-                                                       <expected>
-       To pass, the widget height must be ignored (the value is an empty string, hence it would be ignored)..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a2.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase purpose="Test the UA's ability process the height attribute."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="a3">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a3.wgt</step_desc>
-                                                       <expected>
-       To pass, the widget height must be ignored (the value is a sequence of space characters, hence it would be ignored)..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a3.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase purpose="Test the UA's ability process the height attribute."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="a4">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a4.wgt</step_desc>
-                                                       <expected>
-       To pass, the widget height must be ignored (the value is an empty string)..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a4.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Test that the UA skips preference elements without a name attribute."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="a5">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a5.wgt</step_desc>
-                                                       <expected>
-       To pass, widget preferences must remain an empty list (i.e., the preference is skipped)..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a5.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Test that the UA skips preference element already defined."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="a6">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a6.wgt</step_desc>
-                                                       <expected>
-       To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "false"..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a6.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Test that the UA does a case sensitive comparison on the value of the readonly attribute."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="a7">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a7.wgt</step_desc>
-                                                       <expected>
-       To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "false"..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a7.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Test that the UA does a case sensitive comparison on the value of the readonly attribute."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="a8">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a8.wgt</step_desc>
-                                                       <expected>
-       To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "true"..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a8.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Test that the UA sets the readonly attribute to false by default."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="a9">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a9.wgt</step_desc>
-                                                       <expected>
-       To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "false"..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a9.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Test that the UA skips multiple preference element already defined."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="ba">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ba.wgt</step_desc>
-                                                       <expected>
-       To pass, widget preference must contain one preference whose name is "a" and whose value is "a" and whose readonly attr value must be "false"..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ba.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Test the UA's ability store preferences whose name vary only in case."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="bb">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bb.wgt</step_desc>
-                                                       <expected>
-       To pass, widget preference must contain two preferences: 1 must have a name "a" and whose value is "a" and whose readonly attr value must be "false". 2 must have a name "A" and whose value is "b" and whose readonly attribute value must be "false"..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bb.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Tests that the UA applies the rule for getting a single attribute value to name, value, and readonly attributes."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="bc">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bc.wgt</step_desc>
-                                                       <expected>
-       To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "false"..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bc.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Test to make sure that the UA only checks the root of the widget for config files, and not in an arbitrary folder."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="bg">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bg.wgt</step_desc>
-                                                       <expected>
-       To pass, the user agent must treat this widget as an invalid widget (config file is not at the root)..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bg.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-                       <testcase
-                               purpose="Test to make sure that the UA only checks the root of the widget for config files, and not in a locale folder."
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"
-                               execution_type="manual" priority="P3" id="bh">
-                               <description>
-                                       <pre_condition />
-                                       <post_condition />
-                                       <steps>
-                                               <step order="1">
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bh.wgt</step_desc>
-                                                       <expected>
-       To pass, the user agent must treat this widget as an invalid widget (config file is not at the root, but in locale folder)..</expected>
-                                               </step>
-                                       </steps>
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bh.wgt</test_script_entry>
-                               </description>
-                               <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" element_name="constructor" element_type="method" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-                       </testcase>
-               </set>
-       </suite>
-</test_definition>
+<?xml version="1.0" encoding="UTF-8"?>\r
+<?xml-stylesheet type="text/xsl"  href="testcase.xsl"?>\r
+<test_definition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+       xsi:noNamespaceSchemaLocation="test_definition.xsd">\r
+       <suite name="webapi-w3c-widget-tests">\r
+               <set name="WidgetPackaging">\r
+                       <testcase\r
+                               purpose="Tests the user agent's ability to process files with no file extension. "\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="auto" priority="P3" id="dm">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dm</step_desc>\r
+                                                       <expected> \r
+       To pass, the user agent start file of the widget must be index.htm</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dm</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Tizen" specification="Tizen Packaging and XML Configuration"\r
+                                                       interface="Tizen" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Tests the user agent's ability to process files with a file extension other than .wgt."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="dn">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dn.test</step_desc>\r
+                                                       <expected> \r
+       To pass, the user agent start file of the widget must be index.htm</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dn.test</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase purpose="Test the ability of the UA to verify a zip archive."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="do">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/split.wgt.001</step_desc>\r
+                                                       <expected> \r
+       To pass, the user agent must treat this as an invalid widget (archive is spanned).</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/split.wgt.001</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test the user agent's ability to get a widget over HTTP and respect the application/widget mimetype. The server from which this test is served from has been set up to label the 'test' resource as an 'application/widget'."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="z3">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/z3</step_desc>\r
+                                                       <expected> \r
+       To pass, a user agent must correctly process this resource as a widget because of the 'application/widget' mimetype (i.e., not only because of sniffing).</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/z3</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test the user agent's ability to get a widget over HTTP and respect the 'application/widget' mimetype. The server from which this test is served from has been set up to label the 'test.html' resource as an 'application/widget'."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="z4">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/z4.html</step_desc>\r
+                                                       <expected> \r
+       To pass, a user agent must correctly process this resource as a widget because of the 'application/widget' mimetype (i.e., not only via sniffing).</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/z4.html</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Tests that an empty defaultlocale attribute is ignored (and does not cause the widget to be treated as invalid)."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="dlocignore00">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dlocignore00.wgt</step_desc>\r
+                                                       <expected> \r
+       To pass, the widget must simply run..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dlocignore00.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Tests that the user agent applies rule for getting a single attribute value to the defaultlocale attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="dlocignore01">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-001.wgt</step_desc>\r
+                                                       <expected> To pass, the name of the widget must be the value PASS..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-001.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that the user agent matches obscure, yet valid, language tags."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="dlocignore02">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-002.wgt</step_desc>\r
+                                                       <expected> To pass, the widgets description must be the value PASS..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-002.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Tests that a language tag already part of the UA's locales list is ignored when it is repeated for defaultlocale attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="dlocignore03">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-003.wgt</step_desc>\r
+                                                       <expected> \r
+       To pass, the specified value should not be added twice to the locales list of the UA..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-003.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Tests that the default locale is added to the end of the user agent's locale list \r
+       (and does not override the default language, which is assumed to be 'en')."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="dlocignore04">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-004.wgt</step_desc>\r
+                                                       <expected> \r
+       To pass, the name of the widget must be PASS..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-004.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Tests that the value of defaultlocale is also used to in folder-based localization."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="dlocuse00">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-000.wgt</step_desc>\r
+                                                       <expected>\r
+               To pass, the index.html of the folder 'locales/esx-al/' should be loaded and say PASS..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-000.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Tests that the value of defaultlocale works in conjunction to xml:lang on the widget element."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="dlocuse01">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dlocuse01.wgt</step_desc>\r
+                                                       <expected>\r
+               To pass, the name of the widget must be PASS..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dlocuse01.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Tests that the UA rejects configuration documents that don't have\r
+       correct widget element at the root."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="aa">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aa.wgt</step_desc>\r
+                                                       <expected> To pass, the UA must treat this as an\r
+       invalid widget (the root element is not widget)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aa.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Tests that the UA rejects configuration documents that don't have correct\r
+       widget element at the root."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="ab">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ab.wgt</step_desc>\r
+                                                       <expected> To pass, the UA must treat this as an invalid widget (the namespace is wrong)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ab.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Tests that the UA rejects configuration documents that don't have correct widget\r
+       element at the root."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="ac">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ac.wgt</step_desc>\r
+                                                       <expected>To pass, the UA must treat this as an invalid widget (the namespace is missing)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ac.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that a user agent correctly processes a author element."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="af">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/af.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the author name must be the string "PASS"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/af.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that a user agent correctly applies the Rule for Getting Text Content with Normalized White Space."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="ag">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ag.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget author must be the string "P A S S" (i.e., white space collapsed to single space)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ag.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that a user agent correctly applies the Rule for Getting Text Content with Normalized White Space."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="ah">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ah.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the author name must be the string "PASS" (i.e., all white space collapsed to single space, spaces at start/end trimmed)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ah.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that a user agent correctly applies the rule for getting a single attribute value."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="ai">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ai.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the author email must be the string "PASS"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ai.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that a user agent correctly applies the rule for getting a single attribute value and the Rule for Getting Text Content with Normalized White Space."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="aj">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aj.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the author name must be the string "PASS"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aj.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that a user agent correctly applies the rule for getting a single attribute value and the Rule for Getting Text Content with Normalized White Space."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="ak">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ak.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the author name must be the string "PASS"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ak.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test the ability of the user agent to handle an empty author element."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="al">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/al.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the author name must be an empty string..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/al.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test the ability of the user agent to correctly process the author href attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="am">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/am.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the value of author href must be "PASS:PASS"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/am.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test the ability of the user agent to correctly process the author href attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="an">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/an.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the value of author href must be ignored..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/an.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that a user agent correctly processes a name element."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="ao">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ao.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget name must be the string "PASS"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ao.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that a user agent correctly applies the Rule for Getting Text Content with Normalized White Space."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="ap">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ap.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget name must be the string "P A S S" (i.e., white space collapsed to single space)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ap.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that a user agent correctly applies the Rule for Getting Text Content with Normalized White Space."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="aq">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aq.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget name must be the string "PASS" (i.e., all white space collapsed to single space, spaces at front/back trimmed)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aq.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that a user agent correctly applies the rule for getting a single attribute value."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="ar">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ar.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget short name must be the string "PASS"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ar.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that a user agent correctly applies the rule for getting a single attribute value and\r
+       the Rule for Getting Text Content with Normalized White Space."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="as">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/as.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget short name must be the string "PASS" and the widget name must be "PASS"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/as.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that a user agent correctly applies the rule for getting a single attribute value and\r
+       the Rule for Getting Text Content with Normalized White Space."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="at">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/at.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget short name must be the string "PASS" and the widget name must be "PASS"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/at.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that a user agent correctly processes the short attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="au">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/au.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget short name must be an empty string..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/au.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test the ability of the user agent to handle an empty name element."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="av">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/av.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget name must be an empty string..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/av.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that a user agent correctly processes a name element with xml:lang attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="oa">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/oa.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget name must be the string "PASS"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/oa.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that the user agent does not attempt to load a default start file when a custom start file has been declared."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="aw">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aw.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget start file must point to "pass.html" and the icons list must contain a pointer to "icon.png" at the root of the widget..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aw.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase purpose="Test the UA's ability process the height attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="ax">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ax.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget height must be either the numeric value 123 or a value greater than 0..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ax.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase purpose="Test the UA's ability process the height attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="ay">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ay.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the user agent must ignore the value of the height attribute (the value is composed of characters)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ay.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase purpose="Test the UA's ability process the height attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="az">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/az.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget height must be the numeric value 100 or a value greater than 0 (resulting from rule for parsing a non-negative integer)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/az.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase purpose="Test the UA's ability process the height attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="a1">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a1.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget height must be the numeric value 123 or a value greater than 0 (resulting from rule for parsing a non-negative integer)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a1.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase purpose="Test the UA's ability process the height attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="a2">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a2.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget height must be ignored (the value is an empty string, hence it would be ignored)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a2.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase purpose="Test the UA's ability process the height attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="a3">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a3.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget height must be ignored (the value is a sequence of space characters, hence it would be ignored)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a3.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase purpose="Test the UA's ability process the height attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="a4">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a4.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget height must be ignored (the value is an empty string)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a4.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that the UA skips preference elements without a name attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="a5">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a5.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, widget preferences must remain an empty list (i.e., the preference is skipped)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a5.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that the UA skips preference element already defined."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="a6">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a6.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "false"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a6.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that the UA does a case sensitive comparison on the value of the readonly attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="a7">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a7.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "false"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a7.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that the UA does a case sensitive comparison on the value of the readonly attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="a8">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a8.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "true"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a8.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that the UA sets the readonly attribute to false by default."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="a9">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a9.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "false"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a9.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that the UA skips multiple preference element already defined."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="ba">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ba.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, widget preference must contain one preference whose name is "a" and whose value is "a" and whose readonly attr value must be "false"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ba.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test the UA's ability store preferences whose name vary only in case."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="bb">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bb.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, widget preference must contain two preferences: 1 must have a name "a" and whose value is "a" and whose readonly attr value must be "false". 2 must have a name "A" and whose value is "b" and whose readonly attribute value must be "false"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bb.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Tests that the UA applies the rule for getting a single attribute value to name, value, and readonly attributes."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="bc">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bc.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "false"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bc.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test to make sure that the UA only checks the root of the widget for config files, and not in an arbitrary folder."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="bg">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bg.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the user agent must treat this widget as an invalid widget (config file is not at the root)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bg.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test to make sure that the UA only checks the root of the widget for config files, and not in a locale folder."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="bh">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bh.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the user agent must treat this widget as an invalid widget (config file is not at the root, but in locale folder)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bh.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+               </set>\r
+       </suite>\r
+</test_definition>\r