<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.meego.com/skins/common/feed.css?270"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.meego.com/index.php?title=Special:Contributions/Heliacorreia&amp;feed=atom&amp;limit=50&amp;target=Heliacorreia&amp;year=&amp;month=</id>
		<title>MeeGo wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.meego.com/index.php?title=Special:Contributions/Heliacorreia&amp;feed=atom&amp;limit=50&amp;target=Heliacorreia&amp;year=&amp;month="/>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Special:Contributions/Heliacorreia"/>
		<updated>2013-05-22T11:05:57Z</updated>
		<subtitle>From MeeGo wiki</subtitle>
		<generator>MediaWiki 1.16.2</generator>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/TCMS</id>
		<title>Quality/QA-tools/TCMS</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/TCMS"/>
				<updated>2011-08-17T12:39:59Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: Adding link to QAtoolproposal document&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= TCMS =&lt;br /&gt;
This page is a brief insight regarding the suggestion for a new test cases management system.&lt;br /&gt;
&lt;br /&gt;
== Motivation ==&lt;br /&gt;
As of now, [http://meego.gitorious.org/meego-quality-assurance MeeGo Quality Assurance project on gitorious] is the place where MeeGo community can get to know the existing testing material for a component whereas it is not the place where test cases are first created. In fact test cases are created on [http://tl.meego.com Testlink], the current TCMS for MeeGo but there doesn't seem to be a lot a activity on this tool.&lt;br /&gt;
&lt;br /&gt;
== Functionalities to consider ==&lt;br /&gt;
The tool to be chosen should allow the following actions:&lt;br /&gt;
* Import/export of test cases (from and to *.xls, *.xml formats for instance).&lt;br /&gt;
* Make test cases reports and charts based on any criteria (test area, test type, ...).&lt;br /&gt;
* Export test cases reports and charts (to at least *.xls format).&lt;br /&gt;
* Link test cases with their related feature(s).&lt;br /&gt;
* Link test cases with their related bug(s).&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
The following document also exposes a detailed list of features [http://wiki.meego.com/images/QAtoolproposal.pdf QAtoolproposal.pdf] among other things.&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Brief_git_guide</id>
		<title>Brief git guide</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Brief_git_guide"/>
				<updated>2011-07-28T12:28:02Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: Fixed a typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git is handy version control for collaborative development and testing. This guides you briefly through basics to get started. Only terminal usage under [[GNU]]/[[Linux]] is covered, for graphical user interfaces please refer guides available at web.&lt;br /&gt;
&lt;br /&gt;
'''Note''' - this was not placed under developer nor testing because it's common for all MeeGo contributors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Concepts ==&lt;br /&gt;
&lt;br /&gt;
Please open the [http://www.cheat-sheets.org/saved-copy/git-cheat-sheet.pdf excellent git cheat sheet]. Work flow is illustrated in the upper-right corner of cheat sheet. The most basic flow with an existing repository goes like:&lt;br /&gt;
&lt;br /&gt;
=== 1. Create ===&lt;br /&gt;
&lt;br /&gt;
 git clone &amp;lt;repository&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: &lt;br /&gt;
&lt;br /&gt;
 git clone git://gitorious.org/meego-quality-assurance/handset-ux-tests.git&lt;br /&gt;
&lt;br /&gt;
=== 2. Change ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;edit or create files with your favorite tools / editors&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. Commit changes ===&lt;br /&gt;
  &lt;br /&gt;
 git add &amp;lt;newfile&amp;gt; (if you created new file)&lt;br /&gt;
 git commit -a &lt;br /&gt;
&lt;br /&gt;
Your default editor is opened and you need to write description of changes.&lt;br /&gt;
&lt;br /&gt;
=== 4. Push changes to share ===&lt;br /&gt;
 &lt;br /&gt;
 git push (this assumes you have commit rights to repository, please check with repository admin)&lt;br /&gt;
&lt;br /&gt;
''' That's it! Congratulations! '''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pre-steps ==&lt;br /&gt;
&lt;br /&gt;
=== Mandatory - Make sure you have git installed ===&lt;br /&gt;
&lt;br /&gt;
[[Debian]]/Ubuntu: &lt;br /&gt;
 sudo apt-get install git&lt;br /&gt;
&lt;br /&gt;
=== Optional - If working behind ssh-proxy ===&lt;br /&gt;
&lt;br /&gt;
If you are working with corporation you might need to resolve ssh-proxy challenge.&lt;br /&gt;
&lt;br /&gt;
Make sure you have following $USER/.ssh/config for your user account&lt;br /&gt;
&lt;br /&gt;
 host proxy &lt;br /&gt;
  HostName '''&amp;lt;yoursshproxyhere&amp;gt;'''&lt;br /&gt;
  user '''&amp;lt;youruseraccounthere&amp;gt;'''&lt;br /&gt;
  Compression no&lt;br /&gt;
  LocalForward 2227 gitorious.org:22&lt;br /&gt;
 host gitorious.org&lt;br /&gt;
  User git&lt;br /&gt;
  HostName 127.0.0.1&lt;br /&gt;
  Port 2227&lt;br /&gt;
  &lt;br /&gt;
Run the following command:&lt;br /&gt;
 ssh -f -N proxy&lt;br /&gt;
 &amp;lt;type password for your account, if required&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Please note that you need to open proxy connection every time you change network or disconnect/connect from network''&lt;br /&gt;
&lt;br /&gt;
Now you can clone and push over ssh proxy to '''gitorious.org''', test as follows:&lt;br /&gt;
 git clone git://gitorious.org/meego-quality-assurance/handset-ux-tests.git&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How to use gitorious to do a merge request ==&lt;br /&gt;
There are as many ways to do a merge request as there are coders, so this guide just aims at helping at the beginning.&lt;br /&gt;
&lt;br /&gt;
=== Register on gitorious ===&lt;br /&gt;
Go to https://secure.gitorious.org/users/new to create an account.&lt;br /&gt;
&lt;br /&gt;
Then define a SSH (secure shell) key to enable secured communication between your Linux PC and gitorious. Tap below commands to generate such a key from Linux:&lt;br /&gt;
 $ ssh-keygen&lt;br /&gt;
 Follow your terminal instructions.&lt;br /&gt;
 $ cat ~/.ssh/id_rsa.pub&lt;br /&gt;
Copy the result of &amp;quot;cat&amp;quot; command.&amp;lt;BR&amp;gt;&lt;br /&gt;
Then go to your user space on gitorious (example: https://gitorious.org/~heliaco), choose &amp;quot;Dashboard &amp;gt; SSH Keys &amp;gt; Add SSH Key&amp;quot;, paste your clipboard's content, and save your update.&lt;br /&gt;
&lt;br /&gt;
=== Make a personal clone of a gitorious repository ===&lt;br /&gt;
Go to the main page of the project you want to contibute to (example: https://meego.gitorious.org/meego-quality-assurance/auto-ux-testlib).&amp;lt;BR&amp;gt;&lt;br /&gt;
Click &amp;quot;Clone repository&amp;quot; button, change your clone name as you wish, and confirm your action.&lt;br /&gt;
&lt;br /&gt;
Now you should see the SSH url of your clone which is like the following example: git@gitorious.org:~heliaco/meego-quality-assurance/heliaco-auto-ux-testlib.git.&lt;br /&gt;
&lt;br /&gt;
=== Set up your Linux's working environment ===&lt;br /&gt;
From your Linux PC, clone the repository you just made:&lt;br /&gt;
 $ git clone git@gitorious.org:~&amp;lt;username&amp;gt;/&amp;lt;project group&amp;gt;/&amp;lt;your clone name&amp;gt;.git&lt;br /&gt;
 Example: git clone git@gitorious.org:~heliaco/meego-quality-assurance/heliaco-auto-ux-testlib.git&lt;br /&gt;
&lt;br /&gt;
You need to define a name and email within git. For this you can either use a global .gitconfig file or specify these settings within a particular repository.&lt;br /&gt;
&lt;br /&gt;
To create a global file, tap below command:&lt;br /&gt;
 $ gedit ~/.gitconfig&lt;br /&gt;
Then add below section into it, mentioning your name and email:&lt;br /&gt;
 [user]&lt;br /&gt;
  name = &amp;lt;Your name&amp;gt;&lt;br /&gt;
  email = &amp;lt;Your email&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, save and close the file.&lt;br /&gt;
&lt;br /&gt;
To configure name and email within a repository, tap below commands:&lt;br /&gt;
 $ git config user.name &amp;quot;Your Name&amp;quot;&lt;br /&gt;
 $ git config user.email &amp;quot;Your email&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now, one possible way of working is to make development on a master branch, and use another branch called &amp;quot;upstream&amp;quot; in the process of merging requests.&lt;br /&gt;
&lt;br /&gt;
To create a branch called &amp;quot;upstream&amp;quot;, tap below command:&lt;br /&gt;
 $ git checkout -b upstream&lt;br /&gt;
&lt;br /&gt;
Then define the remote server path for &amp;quot;upstream&amp;quot; branch:&lt;br /&gt;
 $ git remote add upstream git://gitorious.org/${project_group}/${project_name}.git&lt;br /&gt;
 Example: git remote add upstream git://gitorious.org/meego-quality-assurance/auto-ux-testlib.git&lt;br /&gt;
&lt;br /&gt;
And switch back to &amp;quot;master&amp;quot; branch:&lt;br /&gt;
 $ git checkout master&lt;br /&gt;
&lt;br /&gt;
=== Commit patches ===&lt;br /&gt;
In order to track the files you modified and/or added in the project, tap below command:&lt;br /&gt;
 $ git add &amp;lt;modified and/or added files names&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Commit your patch using below command:&lt;br /&gt;
 $ git commit&lt;br /&gt;
 -m parameter allows you to comment your patch.&lt;br /&gt;
&lt;br /&gt;
Then you have to sync the &amp;quot;upstream&amp;quot; and &amp;quot;master&amp;quot; branches.&lt;br /&gt;
&lt;br /&gt;
Switch to &amp;quot;upstream&amp;quot; branch:&lt;br /&gt;
 $ git checkout upstream&lt;br /&gt;
&lt;br /&gt;
Update &amp;quot;upstream&amp;quot; branch:&lt;br /&gt;
 $ git pull upstream master&lt;br /&gt;
&lt;br /&gt;
Switch back to &amp;quot;master&amp;quot; branch:&lt;br /&gt;
 $ git checkout master&lt;br /&gt;
&lt;br /&gt;
Merge your &amp;quot;master&amp;quot; changes into the &amp;quot;upstream&amp;quot; branch:&lt;br /&gt;
 $ git rebase upstream&lt;br /&gt;
&lt;br /&gt;
Prior to push your patch, you can display your changes which are now in the &amp;quot;upstream&amp;quot; branch:&lt;br /&gt;
 $ git diff upstream&lt;br /&gt;
&lt;br /&gt;
Then, update the remote branch:&lt;br /&gt;
 $ git push origin master&lt;br /&gt;
&lt;br /&gt;
=== Perform a &amp;quot;merge request&amp;quot; from gitorious web UI ===&lt;br /&gt;
Go to http://meego.gitorious.org/~&amp;lt;username&amp;gt;/&amp;lt;project group&amp;gt;/&amp;lt;your clone name&amp;gt; (Example: https://meego.gitorious.org/~heliaco/meego-quality-assurance/heliaco-auto-ux-testlib).&lt;br /&gt;
&lt;br /&gt;
Click &amp;quot;Request merge&amp;quot; button in the right column.&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;quot;Create a merge request&amp;quot; window appears, fill in &amp;quot;Summary&amp;quot; and &amp;quot;Description&amp;quot; fields, set your project name as &amp;quot;Target Repository&amp;quot; and select your commit(s).&amp;lt;BR&amp;gt;&lt;br /&gt;
Finally, click &amp;quot;Create merge request&amp;quot; button at the bottom of the page.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
[[Category:Tutorial]]&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/TCMS</id>
		<title>Quality/QA-tools/TCMS</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/TCMS"/>
				<updated>2011-07-11T08:39:44Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: Detail about getting a new TCMS.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= TCMS =&lt;br /&gt;
This page is a brief insight regarding the suggestion for a new test cases management system.&lt;br /&gt;
&lt;br /&gt;
== Motivation ==&lt;br /&gt;
As of now, [http://meego.gitorious.org/meego-quality-assurance MeeGo Quality Assurance project on gitorious] is the place where MeeGo community can get to know the existing testing material for a component whereas it is not the place where test cases are first created. In fact test cases are created on [http://tl.meego.com Testlink], the current TCMS for MeeGo but there doesn't seem to be a lot a activity on this tool.&lt;br /&gt;
&lt;br /&gt;
== Functionalities to consider ==&lt;br /&gt;
The tool to be chosen should allow the following actions:&lt;br /&gt;
* Import/export of test cases (from and to *.xls, *.xml formats for instance).&lt;br /&gt;
* Make test cases reports and charts based on any criteria (test area, test type, ...).&lt;br /&gt;
* Export test cases reports and charts (to at least *.xls format).&lt;br /&gt;
* Link test cases with their related feature(s).&lt;br /&gt;
* Link test cases with their related bug(s).&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools</id>
		<title>Quality/QA-tools</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools"/>
				<updated>2011-07-11T08:09:29Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: New tool suggestion.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Quality assurance (QA) tools =&lt;br /&gt;
&lt;br /&gt;
''' We moved our discussion to #meego-qa IRC channel as of March 24th 2011. Please join us there. '''&lt;br /&gt;
&lt;br /&gt;
[[File:Tool_meegon.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Quality Assurance tools are developed to ensure MeeGo SW quality. QA tools team develops and maintains tools for quality assurance.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Open source tools  – available for all, available for development and contributions. Make people accountable for quality.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''Please note''' that developer-oriented content has been moved to [[Quality/QA tools development|QA tools development]] page. We apologize for any inconvenience. The target is to make this page clearer and more informative for the actual users of QA tools.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
QA tools support test planning, test execution and test reporting. The most important tool offering relating to this is illustrated in the figure below. In addition, there are also a couple of concept videos available at our [http://www.youtube.com/user/meegoqatools YouTube channel]:&lt;br /&gt;
* [http://www.youtube.com/watch?v=WdXBqGdLz8I Tool offering for manual testing]&lt;br /&gt;
* [http://youtu.be/Ry4MM-CX2b8 Test automation]&lt;br /&gt;
&lt;br /&gt;
[[File:Meego-qa-tools.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tools and other utilities ==&lt;br /&gt;
&lt;br /&gt;
If you want to contribute to the development of the following tools, test suites and utilities, please visit [[Quality/QA_tools_development|QA tools development page]].&lt;br /&gt;
&lt;br /&gt;
'''Test tools'''&lt;br /&gt;
&lt;br /&gt;
Each wiki page will contain more detailed description, installation instructions and tutorial on the basic usage. For now, please [[Quality/QA-tools#Collaboration spaces|contact us]] if you need help. Currently, you can install Testrunner, testrunner-lite, test-definition, Testplanner, OTS, Meego-ai, libcqpid, eat and MIN from Tools:Testing repository. The instructions for setting up the repositories can be found [[Quality/QA-tools/How_to_set_up_repositories|here]].&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|'''Tool (link to wiki page)''' ||'''Short description'''&lt;br /&gt;
|- &lt;br /&gt;
| Crash Reporter || On-device graphical front-end for sending core dumps produced by rich-core to core dump data base&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/OTS|OTS - open testing system]] || Test automation system&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Testrunner-lite|testrunner-lite]] ||Command line tool for test execution&lt;br /&gt;
|- &lt;br /&gt;
| [[Quality/QA-tools/TDriver|Testability Driver]] || Comprehensive tool for UI testing&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/QAReports|QA Reports]] || Reporting tool for publishing test reports&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/CrashReports|Crash Reports Web UI]] || Web UI for Crash Reports&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/QADashboard|QA Dashboard]] || Quality at a glance&lt;br /&gt;
|-&lt;br /&gt;
| Application Monitor || Monitor runtime indicators - CPU, memory, power for specified apps&lt;br /&gt;
|-&lt;br /&gt;
| Video performance || Collect FPS, CPU information when do video playback&lt;br /&gt;
|- &lt;br /&gt;
| [[Quality/QA-tools/QmlUITestlib|MeeGo QML GUI Testlib]] || Test cases and Cucumber steps for MeeGo QML UI applications&lt;br /&gt;
|-&lt;br /&gt;
| [http://wiki.meego.com/Testkit_Howto testkit-lite] || python based test framework, command line tool, supporting test definition xml&lt;br /&gt;
|-&lt;br /&gt;
| [http://wiki.meego.com/Testkit_Howto testkit-manager] || web based test tool with fancy UI, supporting both manual and auto testing remotely&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Other utilities'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|'''Name (link to wiki page)''' ||'''Short description'''&lt;br /&gt;
|- &lt;br /&gt;
|[[Quality/QA-tools/Test-definition|test-definition]]|| XML schema for test plan and result files&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Eat|eat - enables automated testing]] || Test automation configuration packages&lt;br /&gt;
|- &lt;br /&gt;
| [[Quality/QA-tools/Autotest-guide#Automatic_image_installations|MeeGo Automated installer]] ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/rich-core|Rich core dumper (sp-rich-core)]] || A tool to collect core dump and context data from process crashes&lt;br /&gt;
|-&lt;br /&gt;
| Crash Reporter settings || Settings package for Crash Reporter&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/hat-control|Hardware Accessory for Testing (HAT)]] || &lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Scripts_and_utils|Scripts and utils]] || &lt;br /&gt;
|-&lt;br /&gt;
| Service OS based Flasher || Flasher to support Intel netbook/tablet&lt;br /&gt;
|- &lt;br /&gt;
| Environment collector || Collect detail system environment information&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Corelysis|Corelysis]] || A daemon to process rich core dumps in the back-end server&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Tools and utils not in active development'''&lt;br /&gt;
&lt;br /&gt;
Tools listed here are in maintenance and no new features are planned to be implemented in the near future to them.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|'''Tool (link to wiki page)''' ||'''Short description'''&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Testrunner|Testrunner]] || Test execution tool with graphical UI&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Testplanner|Testplanner]] || Simple tool for creating and editing test plan files&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/MeeGo_Fast_Feedback_Testing|MeeGo Fast Feedback Testing (MeeGo-FFT)]] || &lt;br /&gt;
|-&lt;br /&gt;
| [http://min.sf.net/ MIN Test Framework] || Advanced test framework&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/qtuitest-mbt-adapter|Model-Based Testing adapter for qtuitest]]  ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Qpid C wrapper|Qpid C wrapper library - libcqpid]] ||   &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Feature requests and bugs ==&lt;br /&gt;
&lt;br /&gt;
Want to report an feature idea or bug to us? - [http://bugs.meego.com/enter_bug.cgi?product=MeeGo%20Quality%20Assurance Please do it here]&lt;br /&gt;
 &lt;br /&gt;
* [http://bugs.meego.com/buglist.cgi?query_format=advanced&amp;amp;order=Importance&amp;amp;bug_status=ASSIGNED&amp;amp;component=eat&amp;amp;component=Fast%20Feedback%20Testing&amp;amp;component=hat&amp;amp;component=libcqpid&amp;amp;component=meego-qa-reports&amp;amp;component=min&amp;amp;component=ots&amp;amp;component=TDriver&amp;amp;component=testdefinition&amp;amp;component=Testplanner&amp;amp;component=Testrunner&amp;amp;component=testrunner-lite&amp;amp;component=Others&amp;amp;classification=MeeGo%20Projects&amp;amp;product=MeeGo%20Quality%20Assurance Assigned bugs and features - Working on it]&lt;br /&gt;
* [http://bugs.meego.com/buglist.cgi?query_format=advanced&amp;amp;order=Importance&amp;amp;bug_status=NEW&amp;amp;bug_status=NEEDINFO&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING%20FOR%20UPSTREAM&amp;amp;bug_status=REOPENED&amp;amp;bug_status=RESOLVED&amp;amp;component=eat&amp;amp;component=Fast%20Feedback%20Testing&amp;amp;component=hat&amp;amp;component=libcqpid&amp;amp;component=meego-qa-reports&amp;amp;component=min&amp;amp;component=ots&amp;amp;component=TDriver&amp;amp;component=testdefinition&amp;amp;component=Testplanner&amp;amp;component=Testrunner&amp;amp;component=testrunner-lite&amp;amp;component=Others&amp;amp;classification=MeeGo%20Projects&amp;amp;product=MeeGo%20Quality%20Assurance All open features and bugs in priority order]&lt;br /&gt;
&lt;br /&gt;
Bugzilla instructions:&lt;br /&gt;
* [[Quality/How To Report Bugs|How to report bugs]]&lt;br /&gt;
* [[Quality/Bug Life Cycle and Handling|Bugzilla workflow]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Collaboration spaces ==&lt;br /&gt;
&lt;br /&gt;
Team communication is in English. Our collaboration spaces are:&lt;br /&gt;
* [http://lists.meego.com/listinfo/meego-qa meego-qa@lists.meego.com mailing list]&lt;br /&gt;
* [http://webchat.freenode.net/?channels=meego-qa #meego-qa IRC channel on irc.freenode.net]&lt;br /&gt;
* [http://www.youtube.com/user/meegoqatools YouTube channel for demo videos]&lt;br /&gt;
* [http://meegoqatools.wordpress.com/ QA-tools team blog]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nice to have ==&lt;br /&gt;
&lt;br /&gt;
None of the existing tools answer your needs? Here is where you should enter any suggestion.&lt;br /&gt;
&lt;br /&gt;
* Relieve localization testing effort by automating all or part of it ([[Quality/QA-tools/Automation of L10n testing|Detail]]).&lt;br /&gt;
&lt;br /&gt;
* We may consider the need to have a fully functional test cases management system that could be widely used by the community to create/update test cases ([[Quality/QA-tools/TCMS|Detail]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
[[Category:QA]]&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Main_Page</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Main_Page"/>
				<updated>2011-07-06T12:50:10Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: Adding potential useful links.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MeeGo Project Functions ==&lt;br /&gt;
* [[Community Office]]&lt;br /&gt;
* [[Localization team|Localization]]&lt;br /&gt;
* [http://meego.com/about/governance/program-office Program Office]&lt;br /&gt;
* [[Core_OS_Program | Core OS Program]]&lt;br /&gt;
* [[Handset_Program | Handset UX Program]]&lt;br /&gt;
* [[In-vehicle | In Vehicle Infotainment - IVI]]&lt;br /&gt;
* [[Product Management]]&lt;br /&gt;
* [[Quality]]&lt;br /&gt;
* [[Release_Engineering|Release Engineering]]&lt;br /&gt;
* [http://meego.com/about/governance/ui-design User Interface Design]&lt;br /&gt;
* [[SDK]]&lt;br /&gt;
* [[Architecture]]&lt;br /&gt;
* [[Meego IT]]&lt;br /&gt;
&lt;br /&gt;
= User =&lt;br /&gt;
&lt;br /&gt;
* [[MeeGo Netbook FAQ]]&lt;br /&gt;
* [http://meego.com/devices/netbook/installing-meego-your-netbook Install MeeGo on your netbook]&lt;br /&gt;
* [[Devices|Supported devices]]&lt;br /&gt;
* [[Install MeeGo from Hard Disk]]&lt;br /&gt;
&lt;br /&gt;
= Developer =&lt;br /&gt;
== Developer Guide ==&lt;br /&gt;
&lt;br /&gt;
* [[SDK/Docs/1.1|Developer Guide for MeeGo 1.1]]&lt;br /&gt;
* [[SDK/Docs/1.0|Developer Guide for MeeGo 1.0]]&lt;br /&gt;
* [[Build_Infrastructure | Build Infrastructure]]&lt;br /&gt;
* [[MeeGo Porting Guide]]&lt;br /&gt;
* [[QML tutorials]] - Some tutorials to help get started with QML, the Qt Modelling Language.&lt;br /&gt;
* [http://mxr.meego.com/ MeeGo cross reference] - Index of MeeGo source code&lt;br /&gt;
* [[Brief_git_guide|Brief git guide]] - An overview of git as well as an example about how to use gitorious to do a merge request.&lt;br /&gt;
&lt;br /&gt;
Other documents:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Document&lt;br /&gt;
! Variety (Version)&lt;br /&gt;
! Architectures&lt;br /&gt;
|-&lt;br /&gt;
|Instructions for [[ARM|ARM based devices (N900, BeagleBoard, PandaBoard, Snowball)]]&lt;br /&gt;
|All&lt;br /&gt;
|ARM&lt;br /&gt;
|-&lt;br /&gt;
|Instructions for [[MeeGo_1.0_Netbook_VirtualBox|VirtualBox]]&lt;br /&gt;
|Netbook (1.0)&lt;br /&gt;
|Intel&lt;br /&gt;
|-&lt;br /&gt;
|Instructions for [[MeeGo SDK on Windows with VirtualBox]]&lt;br /&gt;
|All&lt;br /&gt;
|All&lt;br /&gt;
|-&lt;br /&gt;
|Tips for [[Developing With The Aava]]&lt;br /&gt;
|Handset/Aava&lt;br /&gt;
|Intel&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Release Process ==&lt;br /&gt;
The MeeGo Release Process includes:&lt;br /&gt;
* [[Release_Engineering/Process|Release process and work flow]]&lt;br /&gt;
* [[Release_Engineering/Release_Timeline|MeeGo releases every 6 months]]&lt;br /&gt;
* [[Release_Engineering/Process|Nightly builds for developers and weekly releases will be available]]&lt;br /&gt;
&lt;br /&gt;
== MeeGo Components ==&lt;br /&gt;
* [[MeeGo_UX_Components|MeeGo Components]] - Supported common QML components&lt;br /&gt;
&lt;br /&gt;
= Community =&lt;br /&gt;
&lt;br /&gt;
== Contributing to MeeGo ==&lt;br /&gt;
* Read our [[Community guidelines]]: [[Wiki contribution guidelines|Wiki]], [[Mailing list guidelines|mailing list]], [[Forum/Guidelines|forum]], [[Gitorious_guidelines|Gitorious guidelines]] and [[Community guidelines|more]].&lt;br /&gt;
* [[Community communication|Participate in our forums, mailing lists, and more]].&lt;br /&gt;
* [http://meego.com/about/contribution-guidelines Contribute to MeeGo].&lt;br /&gt;
* [[Build_Infrastructure/Community_Builder|Building applications]] for MeeGo&lt;br /&gt;
&lt;br /&gt;
See also [[Who's who]].&lt;br /&gt;
&lt;br /&gt;
== Meetings ==&lt;br /&gt;
&lt;br /&gt;
[[MeeGo-Meeting IRC Schedule]]&lt;br /&gt;
&lt;br /&gt;
The following groups have regular meetings, see their respective pages for details.&lt;br /&gt;
&lt;br /&gt;
* [[Technical Steering Group meetings]]&lt;br /&gt;
* [[Community Office/Meetings|Community Office meetings]]&lt;br /&gt;
* [[Localization team]]&lt;br /&gt;
&lt;br /&gt;
Regional Activities.&lt;br /&gt;
* [[Local MeeGo Networks]]&lt;br /&gt;
&lt;br /&gt;
== Bi-Annual MeeGo Conference ==&lt;br /&gt;
&lt;br /&gt;
'''Upcoming Conferences'''&lt;br /&gt;
* [[MeeGo Conference Spring 2011|Spring 2011: May 23 - 25 at the Hyatt Regency, San Francisco]]&lt;br /&gt;
* [[MeeGo Conference Fall 2011|Fall 2011: November Date TBD in Europe]]&lt;br /&gt;
&lt;br /&gt;
'''Past Conference Wrap-Up Information'''&lt;br /&gt;
* [[MeeGo_Conference_2010|Fall 2010: November 15 - 17 in Dublin]]&lt;br /&gt;
&lt;br /&gt;
== Structure and Governance ==&lt;br /&gt;
&lt;br /&gt;
MeeGo is an open source project led by the MeeGo Technical Steering Group (TSG). The governance model is based on meritocracy and the best practices and values of the Open Source culture. The MeeGo project lives under the auspices of the Linux Foundation. &lt;br /&gt;
&lt;br /&gt;
* [http://meego.com/about/governance MeeGo Project Structure and Governance Overview]&lt;br /&gt;
* Bi-weekly [[Technical Steering Group meetings]]&lt;br /&gt;
* [[Working Group Process]]&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [[MeeGo FAQ]]&lt;br /&gt;
* [[Glossary|Glossary and Acronyms]]&lt;br /&gt;
* [[Community guidelines]]&lt;br /&gt;
* [[Special:PopularPages|Popular Wiki Pages]]&lt;br /&gt;
* [[Special:MostLinkedPages|Most Linked-to Pages]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Top level]]&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Kernel_patch_guidelines/git_for_starters</id>
		<title>Kernel patch guidelines/git for starters</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Kernel_patch_guidelines/git_for_starters"/>
				<updated>2011-07-06T12:28:05Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: Adding potential useful links.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''' The Tao of [http://git-scm.com/ Git] OR how I stopped getting scared of [http://git-scm.com/ Git] and started using it OR Why the hell aren't you using [http://git-scm.com/ Git] yet ;) ?'''&lt;br /&gt;
&lt;br /&gt;
= Did you Git it? What the hell is git? =&lt;br /&gt;
Long, long, long time ago, a cool hacker named Linus was faced with a dilemma - the Linux kernel that he and lot of other world wide hackers were using and working on, was hosted on bitkeeper and the owners of bitkeeper were pulling the plug on hosting Linux kernel. Linus knew that without a source code management system which could handle global collaborated code development, the Linux kernel was more or less kaput! Linus rolled up his sleeves and in the ancient respected hacker tradition, wrote a brand new version system - called GIT. [http://en.wikipedia.org/wiki/Git_(software)#Early_history more history]&lt;br /&gt;
&lt;br /&gt;
''NOTE'' even though git was developed for the Linux kernel, it is still a source code management system. You can use it for just about everything.... In fact, folks maintain documents, images, and god knows what else with git. Anything that needs version control involving multiple developers across multiple geographies, git is pretty good at it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Is there a full form for GIT? =&lt;br /&gt;
 Linus Torvalds has quipped about the name &amp;quot;git&amp;quot;, which is [http://en.wikipedia.org/wiki/Git_(British_slang) British English slang for a stupid or unpleasant person]:&lt;br /&gt;
  &amp;quot;I'm an egotistical bastard, and I name all my projects after myself. First Linux, now git.&amp;quot; &lt;br /&gt;
But then, [http://en.wikipedia.org/wiki/Git_(software)#Name what's in a name huh?]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Ok great.. I have to learn git, so where do I start? =&lt;br /&gt;
It is pretty easy to learn git - there are only 3 fundamental concepts to understand:&lt;br /&gt;
# Tree&lt;br /&gt;
# Branch&lt;br /&gt;
# Patch&lt;br /&gt;
&lt;br /&gt;
== Patch, patch everywhere, but not a code to see. So, what did you say a patch was? ==&lt;br /&gt;
 A patch is a set of changes (may include multiple files) doing one logical step only.&lt;br /&gt;
&lt;br /&gt;
Lets say Alice has file x:&lt;br /&gt;
   hello wrold&lt;br /&gt;
   mama mia&lt;br /&gt;
&lt;br /&gt;
Bob gets this file and notices the typo ''wrold''. He has two options:&lt;br /&gt;
&lt;br /&gt;
option 1) Bob walks over to Alice's desk and sees Alice editing file x and tells Alice:&lt;br /&gt;
  Alice, you have a typo in line 1, change wrold to world.&lt;br /&gt;
&lt;br /&gt;
Option 2) Bob sends Alice a new file x.new with a note that he fixed the typo&lt;br /&gt;
   hello world&lt;br /&gt;
   mama mia&lt;br /&gt;
&lt;br /&gt;
Well, computers are not too good at English and we have people involved, also, so we need a format which can easily be understood by computer applications, as well as read and shared by humans for humans.&lt;br /&gt;
&lt;br /&gt;
Welcome to [http://en.wikipedia.org/wiki/Patch_%28Unix%29 Patch]. Bob edits file x and fixes the typo and emails the changes to Alice.&lt;br /&gt;
 diff --git x.old x.new&lt;br /&gt;
 index 835e1c2..f75f149 100644&lt;br /&gt;
 --- x.old&lt;br /&gt;
 +++ x.new&lt;br /&gt;
 @@ -1,2 +1,2 @@&lt;br /&gt;
 -hello wrold&lt;br /&gt;
 +hello world&lt;br /&gt;
  mama mia&lt;br /&gt;
&lt;br /&gt;
''Explanation:''&lt;br /&gt;
 --- x.old&lt;br /&gt;
old file name&lt;br /&gt;
 +++ x.new&lt;br /&gt;
new file name&lt;br /&gt;
 @@ -1,2 +1,2 @@&lt;br /&gt;
this is called a chunk -&amp;gt; each chunk is a change with a bit of code above and bit of code below to give you a context. The -1,2 +1,2 tells you that the changes were made between lines 1 and 2.&lt;br /&gt;
 -hello wrold&lt;br /&gt;
the '-' prefix shows that this line was deleted&lt;br /&gt;
 +hello world&lt;br /&gt;
the '+' prefix shows that this line was added (so in conjunction with the above, shows that no change occurred).&lt;br /&gt;
  mama mia&lt;br /&gt;
the ' ' prefix tells us that no change occured.&lt;br /&gt;
&lt;br /&gt;
Now, Alice can see immediately that there is one file changed, one line changed in that file and the exact change, as well ;). &lt;br /&gt;
&lt;br /&gt;
''How did this magic happen?''&lt;br /&gt;
There are two unix utilities from ancient times, diff and patch. They are opposites, diff generates the diff between files and patch applies the diff to the file to be modified.&lt;br /&gt;
&lt;br /&gt;
In our example above, Bob uses the diff program to generate the diff and Alice uses thepatch program to apply the patch.&lt;br /&gt;
&lt;br /&gt;
Good things:&lt;br /&gt;
# only the change is sent across&lt;br /&gt;
# pretty concise and saves a little on network bandwidth, and no confusion where the change happened.&lt;br /&gt;
&lt;br /&gt;
Bad things:&lt;br /&gt;
# Alice should know the file x to understand the change, or at least have access to the file x to see where the change occurred.&lt;br /&gt;
&lt;br /&gt;
Now back to git - git works with patches:&lt;br /&gt;
&lt;br /&gt;
A git commit is a single patch, here is the git patch if Bob was working on git. Yeah, we will discuss how to generate and work on patches in later sections, but hold on to your horses for a minute here.&lt;br /&gt;
&lt;br /&gt;
 From dd392da509bec9f7cd3a8b282c0386f8fcbc35d8 Mon Sep 17 00:00:00 2001&lt;br /&gt;
 From: Bob &amp;lt;bob@somwhere.com&amp;gt;&lt;br /&gt;
 Date: Fri, 7 May 2010 13:34:20 -0500&lt;br /&gt;
 Subject: [PATCH] fix typo of world&lt;br /&gt;
 &lt;br /&gt;
 world has the wrong spelling&lt;br /&gt;
 ---&lt;br /&gt;
  x |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
 &lt;br /&gt;
 diff --git a/x b/x&lt;br /&gt;
 index 835e1c2..f75f149 100644&lt;br /&gt;
 --- a/x&lt;br /&gt;
 +++ b/x&lt;br /&gt;
 @@ -1,2 +1,2 @@&lt;br /&gt;
 -hello wrold&lt;br /&gt;
 +hello world&lt;br /&gt;
  mama mia&lt;br /&gt;
 -- &lt;br /&gt;
 1.6.3.3&lt;br /&gt;
 &lt;br /&gt;
Aah, more information than an ordinary git file. Git patches are designed to be:&lt;br /&gt;
# Emailed - so should be readable by a program - most opensource programs are developed by exchanging emails rather than telephone calls and meetings ;)&lt;br /&gt;
# Read by patch program - so should have a compatible format&lt;br /&gt;
# Informative enough to be readable by humans&lt;br /&gt;
&lt;br /&gt;
Lets do a line by line explanation here.&lt;br /&gt;
 From dd392da509bec9f7cd3a8b282c0386f8fcbc35d8 Mon Sep 17 00:00:00 2001&lt;br /&gt;
This gives an commit ID for this patch.&lt;br /&gt;
 From: Bob &amp;lt;bob@somwhere.com&amp;gt;&lt;br /&gt;
Who is this patch from? the format is Name &amp;lt;email id&amp;gt;&lt;br /&gt;
 Date: Fri, 7 May 2010 13:34:20 -0500&lt;br /&gt;
Date when the patch was generated&lt;br /&gt;
 Subject: [PATCH] fix typo of world&lt;br /&gt;
The subject [PATCH] says the type of email. Presto, you've got a patch, and ''fix typo of world'' tells Alice what this patch is about.&lt;br /&gt;
&lt;br /&gt;
 world has the wrong spelling&lt;br /&gt;
This is the detailed message or the body of the patch - explanations of what we do are good idea to have here. (we learn more of this later on - we use the term commit message in git context)&lt;br /&gt;
&lt;br /&gt;
 ---&lt;br /&gt;
patch uses the -- as a sectional thing. the first --- till diff is considered the diffstat section - things added below this line till the first diff are not committed into the git repository when merged&lt;br /&gt;
&lt;br /&gt;
diffstat is diff statistics -&amp;gt; essentially the statistics information of files changed, lines deleted and added, etc.&lt;br /&gt;
&lt;br /&gt;
  x |    2 +-&lt;br /&gt;
file name | file change statistics histogram - shows total lines changed (deleted and inserted) and a +- based ascii graph.. usually with large number of files changed, this is a handy thing to see which file was largely impacted.&lt;br /&gt;
&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Ok this is too obvious right?&lt;br /&gt;
 &lt;br /&gt;
 diff --git a/x b/x&lt;br /&gt;
 index 835e1c2..f75f149 100644&lt;br /&gt;
 --- a/x&lt;br /&gt;
 +++ b/x&lt;br /&gt;
 @@ -1,2 +1,2 @@&lt;br /&gt;
 -hello wrold&lt;br /&gt;
 +hello world&lt;br /&gt;
  mama mia&lt;br /&gt;
we already dealt with this previously.&lt;br /&gt;
 -- &lt;br /&gt;
 1.6.3.3&lt;br /&gt;
Another git ignored section information ;). This just gives you an idea which version of git was used to generate the patch.&lt;br /&gt;
&lt;br /&gt;
Voila! And that is all that a patch is, diff information organized in a certain way.&lt;br /&gt;
&lt;br /&gt;
=== Related commands ===&lt;br /&gt;
* git add file - get this file ready to be committed into the repository -note it is not done yet..&lt;br /&gt;
* git status - show how commit status&lt;br /&gt;
* git commit - commit my patch into repository (try to use this with -s option)&lt;br /&gt;
* git format-patch - generate a well formatted patch out&lt;br /&gt;
* git send-email - send my patch in email.&lt;br /&gt;
* man git-add , man git-status, man git-format-patch, man git-commit, man git-send-email - learn all about these commands..&lt;br /&gt;
&lt;br /&gt;
== What is a branch? ==&lt;br /&gt;
A branch is a simple concept. It is a version of the original s/w, on which a specific feature/operation is being done. &lt;br /&gt;
&lt;br /&gt;
There is one exception though, the master branch -&amp;gt; This is the branch which has everything integrated. You can have multiple branches inside a single repository, each branch can have multiple patches independent of the other branch. Typically, a git repository looks like the following&lt;br /&gt;
&lt;br /&gt;
  master&lt;br /&gt;
 |-- for-next-opp&lt;br /&gt;
 |-- sdp-fix&lt;br /&gt;
 |   `-- gpmc-test&lt;br /&gt;
 `-- wip-smartreflex&lt;br /&gt;
OR represented as a directory form it'd look like:&lt;br /&gt;
 origin/master&lt;br /&gt;
 origin/master/for-next-opp&lt;br /&gt;
 origin/master/wip-smartreflex&lt;br /&gt;
 origin/master/sdp-fix&lt;br /&gt;
 origin/master/sdp-fix/gpmc-test&lt;br /&gt;
&lt;br /&gt;
But you get the picture. Each branch does something, you spawn off to do something else, like me working on 4 different things at the same time on the same tree, so i can switch whichever git branch that I fancy to work on and commit my changes there, then switch somewhere else and do something else altogether, etc.&lt;br /&gt;
&lt;br /&gt;
origin -&amp;gt; the branch from where everything came from. We could even have the same repository contain multiple trees. Ok, that is a bit too much for the moment. Let's keep it simple and understand the naming conventions. There are a few generic ones in kernel community:&lt;br /&gt;
# master - main branch&lt;br /&gt;
# next - candidate branch, which is planned to be merged to master at some point ahead&lt;br /&gt;
# wip - work in progress branch, usually related to something.&lt;br /&gt;
# all other names - you are free to choose what ever names you like, just use something that does not confuse your, or confuse other people, if it a public branch!!&lt;br /&gt;
&lt;br /&gt;
''TIP'' We all work on multiple things at the same time and interruptions to work on something else is normal (even though not desirable).. ALWAYS use git branches to organize your work, it is meant to make your life easier. ;)&lt;br /&gt;
&lt;br /&gt;
===Related commands:===&lt;br /&gt;
* git branch - list branches&lt;br /&gt;
* git branch my_branch - create a branch from whereever I am&lt;br /&gt;
* git log show the log of all commits i have in my branch&lt;br /&gt;
* git checkout my_branch - switch to my_branch - this should pre-exist&lt;br /&gt;
* git checkout -b branch_name --track origin/some other_branch - create a branch and checkout to that branch&lt;br /&gt;
* git merge - merge one branch to another&lt;br /&gt;
* git rebase - rebase current branch to the latest on another branch. usually useful if you want to move your current changes to the latest in the parent branch OR switch to another branch altogether.&lt;br /&gt;
* man git-checkout - aha, plenty of options to do whatever you like&lt;br /&gt;
* man git-branch - see magic, such as deleting branch, etc.&lt;br /&gt;
&lt;br /&gt;
== What is a git tree? ==&lt;br /&gt;
&lt;br /&gt;
Do this:&lt;br /&gt;
 mkdir test_dir&lt;br /&gt;
 cd test_dir&lt;br /&gt;
 git init&lt;br /&gt;
Voila! You now have your own git repository, a.k.a tree. Tom, Dick, Harry, Alice, and Bob can have their own tree. They can clone (or copy) from each other's tree. Each repository(tree) will have multiple patches as commits on it and contributions can take place towards every other tree.&lt;br /&gt;
&lt;br /&gt;
In general, in a community working on a common software, there is usually a primary tree (repository) or a final tree. In the example of Linux kernel, it is [http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=summary linus' tree]. All code has to get there eventually. How is this decided? Essentially, it is a community consensus to have one person maintain the final code, or the final integrated code. Obviously, there is no point in Tom, Dick, Harry, Alice, and Bob all having their own changes without integrating in a central point.&lt;br /&gt;
&lt;br /&gt;
There are lots of kernel trees, but main trees are usually hosted [http://git.kernel.org here]. To take TI OMAP kernel trees as an example, it tends to be a little complex, as follows:&lt;br /&gt;
&lt;br /&gt;
 OMAP Specific code: Tony -&amp;gt; Linus&lt;br /&gt;
OR&lt;br /&gt;
 ARM Code: Russell -&amp;gt; Linus&lt;br /&gt;
OR&lt;br /&gt;
 Power management core: Rafael -&amp;gt; Linus&lt;br /&gt;
&lt;br /&gt;
etc. Tony, as a platform maintainer, maintains his own tree, so do Russell and Rafael.... You can also maintain your own tree [http://gitorious.org here] if you like. ;) But the point to note: there are community accepted maintainers, just another smart engineer who usually takes the pain to align a bunch of similar folks chattering around with code ;)&lt;br /&gt;
&lt;br /&gt;
git can understand git(yeah git) protocol, http/https protocols, ssh, ftp, and bunch of other protocols and can even make a copy from one local directory to another local directory. the git tree is visible using normal commands such as ls, or you can view your tree with a tool like qgit, gitk, etc., or even over the web, like gitweb. For command line fans, you can use tig, which lets you study a git tree in a GUI-like environment using just the console.&lt;br /&gt;
&lt;br /&gt;
Someone sends you a link like http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=summary and tells you platform X code is out there, clone and build it. Open the link and you will see:&lt;br /&gt;
&lt;br /&gt;
 URL&lt;br /&gt;
    git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git&lt;br /&gt;
    http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git&lt;br /&gt;
    https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git&lt;br /&gt;
&lt;br /&gt;
To clone (or download/copy) the tree, just do a ''git clone link''. voila! You now have a copy!&lt;br /&gt;
&lt;br /&gt;
'''Important thing to remember with git -&amp;gt; every repository is a complete repository''' - You don't need a network (unlike clearcase dynamic views, if you've used it) or anything other than your own machine. Any patch from Alice to Bob should be shared by either exposing the git repository over one of the protocols (like setting up your own apache webserver and exposing your git repo there) or generating and sending out your patches from your repo to other users by email. If you cloned the tree, you have your own tree now. But try not to keep your changes in your tree forever. The rule in opensource is &amp;quot;release often, release to upstream&amp;quot; (ok that was a plagarized version of [http://catb.org/esr/writings/cathedral-bazaar/cathedral-bazaar/ar01s04.html this] ;) ).&lt;br /&gt;
&lt;br /&gt;
=== Related commands ===&lt;br /&gt;
* git clone link_to_remote_branch - clone a remote repo to my local machine&lt;br /&gt;
* git fetch - fetch blobs (or repository data)&lt;br /&gt;
* git pull - pull latest changes from remote repo to my local machine (that is, first it fetches all changes from remote, and then merges them in your local tree)&lt;br /&gt;
* git push origin branch - push my local branch to the remote branch&lt;br /&gt;
* git push origin :branch - delete the remote branch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= HANDS ON - Send a kernel patch to a mailing list like MeeGo mailing list!!! YAAAY.. Finally =&lt;br /&gt;
Alright, time to stop the blah blah and do some coding. So, let's actually go hands on from cloning a tree, modifying it, generating a patch, getting it ready, and posting it upstream.&lt;br /&gt;
&lt;br /&gt;
'''Remember the MeeGo rule: If a patch is for a project that has an upstream version, post it there first!'''&lt;br /&gt;
&lt;br /&gt;
==Objective==&lt;br /&gt;
Let's try and do something tricky -&amp;gt; We are going to enable missing ethernet GPIO mux for SDP3630 and send the patch to the MeeGo Mailing list.&lt;br /&gt;
&lt;br /&gt;
== Installing git ==&lt;br /&gt;
on Ubunto 9.10:&lt;br /&gt;
 sudo apt-get install git-core git-email qgit&lt;br /&gt;
&lt;br /&gt;
To set up the environment so that you can clone a git tree inside your organization &lt;br /&gt;
&lt;br /&gt;
== Pulling a tree ==&lt;br /&gt;
That is rather simple: just do&lt;br /&gt;
 git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git&lt;br /&gt;
&lt;br /&gt;
once this is done,&lt;br /&gt;
 cd linux-2.6&lt;br /&gt;
&lt;br /&gt;
You will be in the repository. &lt;br /&gt;
 $ git branch -va&lt;br /&gt;
 * master                                5fe8321 Merge branch 'x86-x2apic-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip&lt;br /&gt;
   remotes/origin/HEAD                         -&amp;gt; origin/master&lt;br /&gt;
   remotes/origin/master                       5fe8321 Merge branch 'x86-x2apic-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip&lt;br /&gt;
&lt;br /&gt;
We did a git branch -va here. The -v shows a verbose description of where the branches are (commit ID of the HEAD, or topmost commit in a branch), and the commit message. The -a shows all hidden branches, by default the remote branches are usually hidden, so you need a -a to show them.&lt;br /&gt;
&lt;br /&gt;
Notice how the * points to master -&amp;gt; the * points to the branch you are currently on.&lt;br /&gt;
&lt;br /&gt;
In other trees maintained by maintainers, you'd see additional branches in remote, as well. To pull a similar branch gpio_development that a maintainer has, do the following:&lt;br /&gt;
 git checkout -b gpio_development --track origin/gpio_development&lt;br /&gt;
&lt;br /&gt;
This means the following:&lt;br /&gt;
  -b (create a local branch)&lt;br /&gt;
  --track -&amp;gt; keep track of remote branches, so that next time you do a pull, the local branch will reflect all changes in remote branch. :)&lt;br /&gt;
So now, I have a local branch for gpio_development, which is in sync with remote gpio_development branch in maintainer x's tree ;). It is no longer required to use --track in recent version of git, since it is now the default behavior, when doing a checkout of a remote branch.&lt;br /&gt;
&lt;br /&gt;
'''Exercise:'''&lt;br /&gt;
  git branch -v&lt;br /&gt;
  git branch&lt;br /&gt;
  git checkout master&lt;br /&gt;
  git branch -v&lt;br /&gt;
  git checkout gpio_development&lt;br /&gt;
  git branch -v&lt;br /&gt;
See how these commands differ and the resulting behavior, use the man pages to better understand how these commands work. (such as, ''man git-branch'' or ''man git-checkout'')&lt;br /&gt;
&lt;br /&gt;
== Branching off to a working branch ==&lt;br /&gt;
Next, I create a sub-branch to work in. This is where I will make my changes.&lt;br /&gt;
 git checkout -b ether-mux&lt;br /&gt;
ether-mux does not exit in my tree, so -b will create a branch called ether-mux and git checkout will ensure that I am on that branch. I can alternatively do the following:&lt;br /&gt;
 git branch ether-mux&lt;br /&gt;
 git checkout ether-mux&lt;br /&gt;
&lt;br /&gt;
Essentially, both do the same thing, but the -b is a wee bit faster since you don't need to type too many commands. :)&lt;br /&gt;
&lt;br /&gt;
==Writing clean code==&lt;br /&gt;
Before we write code, let's read a bit on what the ancient masters tell us from their collective wisdom.&lt;br /&gt;
&lt;br /&gt;
''Disclaimer: I have borrowed this from [http://omapedia.org/wiki/Releasing_to_Linux_kernel_using_patches_and_emails here]''&lt;br /&gt;
===Linux Documentation===&lt;br /&gt;
The following Linux documentation must be read before anything:&lt;br /&gt;
* [http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob_plain;f=Documentation/SubmittingPatches;hb=HEAD Documentation/SubmittingPatches]&lt;br /&gt;
* [http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob_plain;f=Documentation/CodingStyle;hb=HEAD Documentation/CodingStyle]&lt;br /&gt;
* [http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob_plain;f=Documentation/SubmittingDrivers;hb=HEAD Documentation/SubmittingDrivers]&lt;br /&gt;
* [http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob_plain;f=Documentation/SubmitChecklist;hb=HEAD Documentation/SubmitChecklist]&lt;br /&gt;
&lt;br /&gt;
===Checking tools===&lt;br /&gt;
====checkpatch.pl====&lt;br /&gt;
&amp;lt;strong&amp;gt;scripts/checkpatch.pl&amp;lt;/strong&amp;gt; is a script that facilitates better kernel code, and can be used to check many coding style rules.&lt;br /&gt;
&lt;br /&gt;
This script applies on patch files by default, but can also process complete source files using the &amp;lt;tt&amp;gt;-f&amp;lt;/tt&amp;gt; option.  To get a list of options, run:&lt;br /&gt;
 checkpatch.pl -h&lt;br /&gt;
&lt;br /&gt;
This ([http://omapedia.org/wiki/File:Run-checkpatch.tar.gz script] is an example used to easily call the checkpatch.pl script on a series of files (to run periodically during your development, for example).&lt;br /&gt;
&lt;br /&gt;
You can also set up GIT to run checkpatch automatically before each commit (and reject it on failure).  You need to copy the attached [http://omapedia.org/wiki/File:Pre-commit.tar.gz script] into your GIT repository under &amp;lt;tt&amp;gt;''$GIT_DIR''/hooks&amp;lt;/tt&amp;gt; directory (normally as &amp;lt;tt&amp;gt;.git/hooks/pre-commit&amp;lt;/tt&amp;gt;).  This script also runs &amp;lt;tt&amp;gt;git diff --check&amp;lt;/tt&amp;gt;, plus as an added benefit, it sets file permissions for common files (c, h, makefile, README) to 0644, and executables (directories, shell scripts) to 0755.  This is a common issue when editing files in Windows.&lt;br /&gt;
&lt;br /&gt;
If you want to bypass the check (for example, if the failure is intended), use the -n flag for commit to ignore the checks. Just be sure that you still resolve any failures that were correct, and there really wasn’t a better, proper way to write your code without checkpatch errors.  Now there is a whole set of discussion about the 80 character limit that sometime forces less understandable code (you can read about the pros/cons [http://lkml.org/lkml/2009/12/15/490] and find a patch [http://lkml.org/lkml/2009/12/15/508] to checkpatch to make this optional)  BTW, Linus prefers [http://lkml.org/lkml/2009/12/17/208] in many cases, to ignore the 80-char-limit warnings.&lt;br /&gt;
&lt;br /&gt;
But wait! You can do even more. Since you are already modifying files, why not run checkpatch on the whole file (and not just on the lines you are changing)?  To see if there are any already existing checkpatch errors in the files that you modified, set up these two bash aliases that will run checkpatch on the whole files that are about to be committed (just run ‘chkp’):&lt;br /&gt;
&lt;br /&gt;
 alias gitd='git rev-parse --show-cdup'&lt;br /&gt;
 alias chkp='`gitd`scripts/checkpatch.pl -f `git diff --name-only HEAD | awk -v i=$(gitd) &amp;quot;{print i\\$0}&amp;quot;`'&lt;br /&gt;
&lt;br /&gt;
'''Note''': It is always recommended to run checkpatch.pl with --strict to get better warnings.&lt;br /&gt;
&lt;br /&gt;
====sparse====&lt;br /&gt;
[http://kernel.org/pub/software/devel/sparse sparse] is a static code analysis tool that shall be run on all source files heading a kernel release.&lt;br /&gt;
&lt;br /&gt;
Luckily, sparse is integrated into the kernel build-system and can be easily invoked.&lt;br /&gt;
&lt;br /&gt;
Example for a single file:&lt;br /&gt;
 make C=2 drivers/hsi/hsi.o&lt;br /&gt;
&lt;br /&gt;
Example for a complete folder with some filtering on some error messages:&lt;br /&gt;
 make C=2 drivers/hsi/ 2&amp;gt;&amp;amp;1 | grep -v __cold__&lt;br /&gt;
&lt;br /&gt;
== Do your development ==&lt;br /&gt;
&lt;br /&gt;
Now that we know some of the terms, let's write some code. In my case, I am editing the file arch/arm/mach-omap2/gpmc-smc91x.c&lt;br /&gt;
I added mux.h inclusion and add the following logic:&lt;br /&gt;
 if (omap_mux_init_gpio(gpmc_cfg-&amp;gt;gpio_irq, OMAP_PIN_INPUT)) {&lt;br /&gt;
         pr_err(&amp;quot;%s: Unable to init mux for smc gpio\n&amp;quot;, __func__);&lt;br /&gt;
         gpio_free(gpmc_cfg-&amp;gt;gpio_reset);&lt;br /&gt;
         goto free3;&lt;br /&gt;
 }&lt;br /&gt;
Since I wanted the mux to be done for the provided gpio number.&lt;br /&gt;
&lt;br /&gt;
Remember the golden rules:&lt;br /&gt;
* Always plan how you modify code. First, figure out what changes need to be done, then divide them into logical chunks. Remember each logical piece is a separate commit/patch of it's own. Even a bug fix might involve doing two or three logical steps. Split your patches as needed, but use common sense when to split and when not to ;)&lt;br /&gt;
* Absolutely NO [http://en.wikipedia.org/wiki/Sparse sparse] warning addition (to install sparse on ubuntu, just run '' sudo apt-get install sparse''), at least due to your changes. In my case:&lt;br /&gt;
  rm arch/arm/mach-omap2/gpmc-smc91x.o; mymake C=1 arch/arm/mach-omap2/gpmc-smc91x.o&lt;br /&gt;
* Be compliant with the coding style. A good idea will be to read through the Documentation/ directory links provided above in the Linux kernel. &lt;br /&gt;
* Test it with omap3_defconfig to ensure your code is built for multi-omap case. Might be a good idea to build for other platforms which use your code. At least build it, even if you don't have the platform. Others get pretty pissed if your code breaks their platforms!&lt;br /&gt;
* Test your change on as many platforms as you can.&lt;br /&gt;
&lt;br /&gt;
 $ git branch -v&lt;br /&gt;
 * ether-mux e1fc6fa Linux-omap rebuilt: Updated to -rc6, merged updated for-next&lt;br /&gt;
   master    e1fc6fa Linux-omap rebuilt: Updated to -rc6, merged updated for-next&lt;br /&gt;
 $ git status&lt;br /&gt;
 # On branch ether-mux&lt;br /&gt;
 # Changed but not updated:&lt;br /&gt;
 #   (use &amp;quot;git add &amp;lt;file&amp;gt;...&amp;quot; to update what will be committed)&lt;br /&gt;
 #   (use &amp;quot;git checkout -- &amp;lt;file&amp;gt;...&amp;quot; to discard changes in working directory)&lt;br /&gt;
 #&lt;br /&gt;
 #	modified:   arch/arm/mach-omap2/gpmc-smc91x.c&lt;br /&gt;
 #&lt;br /&gt;
 # Untracked files:&lt;br /&gt;
 #   (use &amp;quot;git add &amp;lt;file&amp;gt;...&amp;quot; to include in what will be committed)&lt;br /&gt;
 #&lt;br /&gt;
 [...]&lt;br /&gt;
 no changes added to commit (use &amp;quot;git add&amp;quot; and/or &amp;quot;git commit -a&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Ok, so I am ready for the next step.&lt;br /&gt;
&lt;br /&gt;
== Committing your changes ==&lt;br /&gt;
&lt;br /&gt;
If you are modifying multiple files, you have various options, but mainly organize the changes in logical order per commit. Remember each commit is a separate patch, each patch can modify more than 1 file, but should be a single logical change. Here you have two options:&lt;br /&gt;
 git commit -a -s&lt;br /&gt;
commit all changes that you did in the code in a single shot. OR&lt;br /&gt;
 git add file1 file2...&lt;br /&gt;
 git commit -s&lt;br /&gt;
This will commit only the files which you add with git add. Note: The -s will add a signed-off-by with your details automatically.&lt;br /&gt;
&lt;br /&gt;
===Note on git commit comments===&lt;br /&gt;
&lt;br /&gt;
You must have seen that the git comments are used to populate the patch file header in the format-patch phase:&lt;br /&gt;
* The 1st comment list is used as the patch subject&lt;br /&gt;
* The rest of the comment is copied in the patch file comment area&lt;br /&gt;
&lt;br /&gt;
But pay attention that &amp;lt;strong&amp;gt;the comment will be integrated to the email sent by git-send-email, only if there is a blank (empty) line between the 1st line comment (used as subject) and the rest of the comment lines&amp;lt;/strong&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Example of a commit comment:&lt;br /&gt;
 This is the 1st line, that will be used as patch subject&lt;br /&gt;
 &lt;br /&gt;
 This is the 3rd line of comment (intentionally left 2nd line empty so that this part of comments are integrated into the emails).&lt;br /&gt;
&lt;br /&gt;
'''Suggestions for Commit messages''': Commit messages are informative for reviewers and maintainers. Remember, once the patch is submitted, it has a long way to go through various maintainers and mailing list members before reaching kernel.org. You need to put yourself in the shoes of maintainers and reviewers who may or may not be familiar with all the internal details after a few months of time, but still need to understand the motivation for a change.&lt;br /&gt;
&lt;br /&gt;
A commit message is structured:&lt;br /&gt;
# What is the problem this patch is trying to solve, that is why is the existing code not correct.&lt;br /&gt;
# The strategy by which this patch attempts to solve the issue.  Remember people can read code, so giving &amp;quot;introducing variable x solves issue&amp;quot;, instead describe the gist of how you solved the issue.&lt;br /&gt;
# What is the impact of the change when there are dependent modules, that is, if you change an function entry which may be used by others modules, you may want to document it here, rather than get the other person discover it when he/she builds their module.&lt;br /&gt;
# Optionally, you may state what testing you may have done to ensure the issue is solved. &lt;br /&gt;
&lt;br /&gt;
Some of the above points might be self evident and could be skipped, but it is usually a good idea to be descriptive enough. Again, it is a fine balance between being informative and going overboard. Community members and maintainers are usually kind enough to help guide a patch in.&lt;br /&gt;
&lt;br /&gt;
Read [http://who-t.blogspot.com/2009/12/on-commit-messages.html this] and [http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html this] for more detailed rationale.&lt;br /&gt;
&lt;br /&gt;
Note: in the case of MeeGo, ''DO add:''&lt;br /&gt;
* If the patch is already upstream:&lt;br /&gt;
   kernel.org status: upstream | commit ID: eda345&lt;br /&gt;
* If the patch is merged to maintainer's tree:&lt;br /&gt;
   kernel.org status: accepted | link: link to patch&lt;br /&gt;
* If the patch is under discussion&lt;br /&gt;
   kernel.org status: under discussion | link: link to the public discussion&lt;br /&gt;
* If the patch is not planned to be published&lt;br /&gt;
   kernel.org status: wont be published | reason: state reason here (such as, temporary hack)&lt;br /&gt;
&lt;br /&gt;
In my case:&lt;br /&gt;
 omap3: smc: enable mux for ethernet&lt;br /&gt;
 &lt;br /&gt;
 Enable mux mode for GPIO pin for the interrupts to come in. This is&lt;br /&gt;
 specifically useful for bootloader-less kernel booting using&lt;br /&gt;
 configuration header as the u-boot does not exist for configuring&lt;br /&gt;
 mux values before hand for the system.                                &lt;br /&gt;
&lt;br /&gt;
 kernel.org status: wont be published | reason: demo only&lt;br /&gt;
&lt;br /&gt;
 Signed-off-by: Bob someone &amp;lt;bob@somewhere.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # Please enter the commit message for your changes. Lines starting&lt;br /&gt;
 # with '#' will be ignored, and an empty message aborts the commit.&lt;br /&gt;
 # On branch ether-mux&lt;br /&gt;
&lt;br /&gt;
Note: If you committed anything and forgot to update/need to change the previous, don't panic. :)&lt;br /&gt;
&lt;br /&gt;
  git add new_changed_file&lt;br /&gt;
  git commit --amend&lt;br /&gt;
&lt;br /&gt;
This will re-commit the last committed patch with the changes you just did, that is, it replaces the previous one.&lt;br /&gt;
&lt;br /&gt;
==GIT patch creation==&lt;br /&gt;
Now that we have committed our changes, time for us to send this patch out!&lt;br /&gt;
&lt;br /&gt;
===Useful links:===&lt;br /&gt;
&lt;br /&gt;
* http://linux.yyz.us/patch-format.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cite&amp;gt;Subject: [PATCH $version $n/$total] $subsystem: one-line summary&lt;br /&gt;
&lt;br /&gt;
(keep the one-line summary &amp;lt; 50 chars)&amp;lt;/cite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* http://userweb.kernel.org/~akpm/stuff/tpp.txt (Patternity, do’s and don’t, ...)&lt;br /&gt;
&lt;br /&gt;
* Linux [http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob_plain;f=Documentation/SubmittingPatches;hb=HEAD Documentation/SubmittingPatches] contains detailed info on signed-off, acked-by, maintainer, reviewer, ...&lt;br /&gt;
&lt;br /&gt;
* [http://www.youtube.com/watch?v=LLBrBBImJt4 Video Tutorial: Write and Submit your first Linux kernel Patch by Greg KH]&lt;br /&gt;
&lt;br /&gt;
=== Generating Patches Notes ===&lt;br /&gt;
first create a temporary directory where you want the patches to reside:&lt;br /&gt;
 mkdir ../smc-patches&lt;br /&gt;
The easy part -&amp;gt; here, based on the number of commits, you have multiple options:&lt;br /&gt;
If there is a single commit:&lt;br /&gt;
 git format-patch -s -M -o ../smc-patches master..&lt;br /&gt;
this generates the patches, where&lt;br /&gt;
* -s adds your signed-off-by if it is not present&lt;br /&gt;
* -M generates diffstat with the proper depth - no truncation&lt;br /&gt;
* -o ../smc-patches - tells it to generate patches to this output directory&lt;br /&gt;
* master.. tells the git format-patch script to generate all patches in my current branch from master branch onwards. note, there are multiple other ways: a -1 here says last one patch, -2 will generate last 2 patches.. commitId.. will generate patches since commit id etc.. see man ''git-format-patch'' for further information&lt;br /&gt;
&lt;br /&gt;
If there are multiple commits:&lt;br /&gt;
# you need to add a cover letter - this explains what the patch series will do (done with --cover-letter option)&lt;br /&gt;
# you need to add -n option to generate numbered patches. (in reverse - you '''DONOT''' need to add -n for a single patch)&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 git format-patch --cover-letter -n -s -M -o ../smc-patches&lt;br /&gt;
&lt;br /&gt;
you will find a patch 0000-cover-letter.patch -&amp;gt; this has to be manually edited. example:&lt;br /&gt;
 From e5d1394f93b2f972a516daaf55967871b4bf8c0e Mon Sep 17 00:00:00 2001  &lt;br /&gt;
 From: Bob someone &amp;lt;bob@somewhere.com&amp;gt;&lt;br /&gt;
 Date: Fri, 7 May 2010 20:23:46 -0500&lt;br /&gt;
 Subject: [PATCH 0/2] *** SUBJECT HERE ***&lt;br /&gt;
 &lt;br /&gt;
 *** BLURB HERE ***&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Replace the subject and BLURB with enough detail, and leave the rest of the file mostly intact, unless you'd like to edit information there.&lt;br /&gt;
&lt;br /&gt;
== Check if your patches meet linux kernel coding style guidelines ==&lt;br /&gt;
As we discussed earlier, Linux kernel includes a script called scripts/checkpatch.pl - use it to ensure your patch has no problems&lt;br /&gt;
 $ scripts/checkpatch.pl --strict ../smc-patch/0001-omap3-smc-enable-mux-for-ethernet.patch &lt;br /&gt;
 total: 0 errors, 0 warnings, 0 checks, 19 lines checked&lt;br /&gt;
&lt;br /&gt;
 ../smc-patch/0001-omap3-smc-enable-mux-for-ethernet.patch has no obvious style problems and is ready for submission.&lt;br /&gt;
&lt;br /&gt;
This is what you want to see: 0 error, 0 warning. :) If all is good, you are ready to send the patches out.&lt;br /&gt;
&lt;br /&gt;
== How to send a patch to a mailing list ==&lt;br /&gt;
First set up your Linux PC to send the patch. For example, in your organization, you may want to follow [[https://git.wiki.kernel.org/index.php/GitTips#Using_msmtp_to_send_your_patches | this]]&lt;br /&gt;
&lt;br /&gt;
== Using git send-email to use msmtp ==&lt;br /&gt;
* Use an alias like gsend, instead of typing full options of git-send-email&lt;br /&gt;
 alias gsend='git send-email --smtp-server /usr/bin/msmtp --from &amp;quot;My Name &amp;lt;someone@somewhere.com&amp;gt;&amp;quot; --envelope-sender=&amp;quot;My Name &amp;lt;someone@somewhere.com&amp;gt;&amp;quot;' &lt;br /&gt;
'''WARNING''' of course, you need to change the My Name and someone@somewhere.com to something that represents you :)&lt;br /&gt;
Here:&lt;br /&gt;
# --smtp-server /usr/bin/msmtp : tells the git-send-email that msmtp is the email server (which you have already told to forward to your email forwarding server when you edited ~/.msmtprc).&lt;br /&gt;
# --from : shows the email name and address as it appears to the entire mailing list and recievers&lt;br /&gt;
# --envelope-sender : ensures that mailing lists are happy by ensuring the right reply-to email headers are part of the email. some mailing lists will refuse to post to the full list without this.&lt;br /&gt;
&lt;br /&gt;
''Remember by default, git send-email will add all folks who are in From:, Cc: Signed-off-by: tags to the email Cc:''&lt;br /&gt;
&lt;br /&gt;
== Other useful options in git-send-email ==&lt;br /&gt;
&lt;br /&gt;
# --to &amp;quot;Some guy &amp;lt;anotherguy@sometime.com&amp;gt;&amp;quot; this will explicitly send the email with to set to this guy, you can repeat --to for every specific person you want to add&lt;br /&gt;
# --cc &amp;quot;Some guy not in patch &amp;lt;from@some.place.else.com&amp;gt;&amp;quot; will add this email to Cc list. Again, you can repeat --cc for each person you want to Cc to.&lt;br /&gt;
# --suppress-cc (see man git-send-email for all options this has) This will remove the automatic additions. This is specifically good when you want to send patch for review, for example, an accepted patch for review to meego-kernel@meego.com it is safe to use specific --to and --cc and add --supress-cc=all (to prevent auto addition of anyone including the From: or CC: tag) .. '''NOTE''' some old git installations (on older ubuntu distro installations, as an example) don't have --suppress-cc options, but new ones do.&lt;br /&gt;
&lt;br /&gt;
''Tip'': It would be wise to modify the gsend alias in your ~/.bashrc or ~/.bash_aliases file as needed to automatically add it on login. &lt;br /&gt;
&lt;br /&gt;
''Tip'': Send this patch to yourself first with --suppress-cc=all. Review it as if a third party, who has no clue what you did, is reading your patch. Remember, when you send a patch to a list, you are asking folks to read and agree to your changes. Linux is a community thing. We all own responsibility for the resulting code :).&lt;br /&gt;
&lt;br /&gt;
== Who should I add as CC for a patch? ==&lt;br /&gt;
When you are posting upstream for the Linux kernel, you have a script called scripts/get_maintainer.pl, use it ''scripts/get_maintainer.pl 0001-my-patch.patch'' (just like you'd use it with checkpatch.pl). It spits out a list of email IDs. It is usually a good idea to add most folks and selectively include the mailing lists, based on what audience you seek. Recently however, the suggestion has been to use ''get_maintainer.pl --no-git'' to reduce the spam in public mailing list. This option will choose from just the MAINTAINER file the email IDs to post to.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So good luck, and let the patches roll :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Other links =&lt;br /&gt;
You may also want to visit the following wiki pages:&amp;lt;BR&amp;gt;&lt;br /&gt;
[http://wiki.meego.com/Gitorious_guidelines Gitorious guidelines]&amp;lt;BR&amp;gt;&lt;br /&gt;
[http://wiki.meego.com/Brief_git_guide Brief git guide]&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Web_infrastructure/Meego.gitorious.org</id>
		<title>Web infrastructure/Meego.gitorious.org</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Web_infrastructure/Meego.gitorious.org"/>
				<updated>2011-07-06T12:14:35Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: Adding potential useful links.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page details the best practices for MeeGo community members working within the Gitorious code repositories. &lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
Projects are the highest level organization within Gitorious and all MeeGo projects are listed on the http://meego.gitorious.org landing page. Projects in general are organized by the [http://meego.com/developers/meego-architecture MeeGo architecture] diagram. There are some deviations from this, but we are trying to align projects with the diagram as much as possible and have additional community support projects where needed.  &lt;br /&gt;
&lt;br /&gt;
==== Adding a new project to meego.gitorious.org ====&lt;br /&gt;
If there is a need to add an additional project within http://meego.gitorious.org, submit a bug request: http://bugs.meego.com/enter_bug.cgi?product=meego.gitorious.org first. If it is determined that none of the existing MeeGo projects will serve your repository needs and the MeeGo project needs, then a new project can be added. After the project is created, a request is submitted to the Gitorious administrators who will flag the project to be listed at: http://meego.gitorious.org/.&lt;br /&gt;
&lt;br /&gt;
==== Adding an existing project to meego.gitorious.org ====&lt;br /&gt;
Follow the steps above and detail why this project should be added. &lt;br /&gt;
&lt;br /&gt;
==== Project naming ====&lt;br /&gt;
Most projects are being named in a consistent way to help with search and clarity. New projects should be named with the MeeGo title at the beginning, in both the title and slug. Examples are:&lt;br /&gt;
&lt;br /&gt;
* http://meego.gitorious.org/meego-handset-ux&lt;br /&gt;
* http://meego.gitorious.org/meego-developer-tools&lt;br /&gt;
* http://meego.gitorious.org/meego-platform-security&lt;br /&gt;
&lt;br /&gt;
== Repositories ==&lt;br /&gt;
Where projects are largely for organizing, repositories are where all the activity happens. Repositories can be created in any project and each have their own commit rights, merge configurations, and administration. &lt;br /&gt;
&lt;br /&gt;
==== Adding a repository ====&lt;br /&gt;
To add a repository to an existing project, submit a bug request at: http://bugs.meego.com/enter_bug.cgi?product=meego.gitorious.org. Please include the following details in your request:&lt;br /&gt;
&lt;br /&gt;
* Project name: where to create repo&lt;br /&gt;
* Repository name: what to call it&lt;br /&gt;
* Admin: Gitorious username or team who will administer this repo&lt;br /&gt;
&lt;br /&gt;
'''Example:''' http://bugs.meego.com/show_bug.cgi?id=6239&lt;br /&gt;
&lt;br /&gt;
== Collaborators ==&lt;br /&gt;
When each repository is created it should have a person or team designated as the owner or admin. This individual or team has the ability to administer their own repository, including adding collaborators. Individuals or teams can be added to the repository from the committership page and be given '''Read''', '''Commit''', or '''Admin''' rights. Example: http://meego.gitorious.org/meego-handset-ux/meego-handset-dialer/committerships &lt;br /&gt;
&lt;br /&gt;
It is up to the admin to determine their collaborators list and maintain it. &lt;br /&gt;
&lt;br /&gt;
To get added to the collaborators list in a particular repository, contact the individual who has admin rights in that repository. Gitorious allows you to send messages directly within it's interface to any other user by visiting their page and selecting the &amp;quot;Send Message&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
== Teams ==&lt;br /&gt;
Groups of developers can form a team to help manage collaborator rights within repositories. As with a repository, a team has individuals who are designated as &amp;quot;admins&amp;quot; and control who is a member of their team. It is up to the team admins to control their own membership to the team, which will translate into repository rights. Be sure to understand fully the repositories your team has access rights to, so you are not adding members to a team who shouldn't have access to a particular repository. &lt;br /&gt;
&lt;br /&gt;
==== Creating Teams ====&lt;br /&gt;
Anyone can create a team and add members to it. No special permissions are required.&lt;br /&gt;
&lt;br /&gt;
==== Requesting to be added to a team ====&lt;br /&gt;
As with repositories, contact the individuals in a team who are designated &amp;quot;admins&amp;quot; to be added to a particular team. It is up to the team admins to then determine if you should be added. &lt;br /&gt;
&lt;br /&gt;
==== Teams listed at http://meego.gitorious.org ====&lt;br /&gt;
Teams working on particular meego repositories will show up on the http://meego.gitorious.org landing page under the &amp;quot;Teams involved in MeeGo projects&amp;quot;. This list is automatically created based on team activity in the meego repositories.&lt;br /&gt;
&lt;br /&gt;
== Merge Requests ==&lt;br /&gt;
The [http://wiki.meego.com/Brief_git_guide Brief git guide] provides further information about git as well as an example about [http://wiki.meego.com/Brief_git_guide#How_to_use_gitorious_to_do_a_merge_request How to use gitorious to do a merge request].&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Brief_git_guide</id>
		<title>Brief git guide</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Brief_git_guide"/>
				<updated>2011-07-05T13:27:08Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: Minor formatting updates.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git is handy version control for collaborative development and testing. This guides you briefly through basics to get started. Only terminal usage under Linux is covered, for graphical user interfaces please refer guides available at web.&lt;br /&gt;
&lt;br /&gt;
'''Note''' - this was not placed under developer nor testing because it's common for all MeeGo contributors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Concepts ==&lt;br /&gt;
&lt;br /&gt;
Please open the [http://www.cheat-sheets.org/saved-copy/git-cheat-sheet.pdf excellent git cheat sheet]. Work flow is illustrated in the upper-right corner of cheat sheet. The most basic flow with an existing repository goes like:&lt;br /&gt;
&lt;br /&gt;
=== 1. Create ===&lt;br /&gt;
&lt;br /&gt;
 git clone &amp;lt;repository&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: &lt;br /&gt;
&lt;br /&gt;
 git clone git://gitorious.org/meego-quality-assurance/handset-ux-tests.git&lt;br /&gt;
&lt;br /&gt;
=== 2. Change ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;edit or create files with your favorite tools / editors&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. Commit changes ===&lt;br /&gt;
  &lt;br /&gt;
 git add &amp;lt;newfile&amp;gt; (if you created new file)&lt;br /&gt;
 git commit -a &lt;br /&gt;
&lt;br /&gt;
Your default editor is opened and you need to write description of changes.&lt;br /&gt;
&lt;br /&gt;
=== 4. Push changes to share ===&lt;br /&gt;
 &lt;br /&gt;
 git push (this assumes you have commit rights to repository, please check with repository admin)&lt;br /&gt;
&lt;br /&gt;
''' That's it! Congratulations! '''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pre-steps ==&lt;br /&gt;
&lt;br /&gt;
=== Mandatory - Make sure you have git installed ===&lt;br /&gt;
&lt;br /&gt;
Ubuntu: &lt;br /&gt;
 sudo apt-get install git&lt;br /&gt;
&lt;br /&gt;
=== Optional - If working behind ssh-proxy ===&lt;br /&gt;
&lt;br /&gt;
If you are working with corporation you might need to resolve ssh-proxy challenge.&lt;br /&gt;
&lt;br /&gt;
Make sure you have following $USER/.ssh/config for your user account&lt;br /&gt;
&lt;br /&gt;
 host proxy &lt;br /&gt;
  HostName '''&amp;lt;yoursshproxyhere&amp;gt;'''&lt;br /&gt;
  user '''&amp;lt;youruseraccounthere&amp;gt;'''&lt;br /&gt;
  Compression no&lt;br /&gt;
  LocalForward 2227 gitorious.org:22&lt;br /&gt;
 host gitorious.org&lt;br /&gt;
  User git&lt;br /&gt;
  HostName 127.0.0.1&lt;br /&gt;
  Port 2227&lt;br /&gt;
  &lt;br /&gt;
Run the following command:&lt;br /&gt;
 ssh -f -N proxy&lt;br /&gt;
 &amp;lt;type password for your account, if required&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Please note that you need to open proxy connection every time you change network or disconnect/connect from network''&lt;br /&gt;
&lt;br /&gt;
Now you can clone and push over ssh proxy to '''gitorious.org''', test as follows:&lt;br /&gt;
 git clone git://gitorious.org/meego-quality-assurance/handset-ux-tests.git&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How to use gitorious to do a merge request ==&lt;br /&gt;
There are as many ways to do a merge request as there are coders, so this guide just aims at helping at the beginning.&lt;br /&gt;
&lt;br /&gt;
=== Register on gitorious ===&lt;br /&gt;
Go to https://secure.gitorious.org/users/new to create an account.&lt;br /&gt;
&lt;br /&gt;
Then define a SSH (secure shell) key to enable secured communication between your Linux PC and gitorious. Tap below commands to generate such a key from Linux:&lt;br /&gt;
 $ ssh-keygen&lt;br /&gt;
 Follow your terminal instructions.&lt;br /&gt;
 $ cat ~/.ssh/id_rsa.pub&lt;br /&gt;
Copy the result of &amp;quot;cat&amp;quot; command.&amp;lt;BR&amp;gt;&lt;br /&gt;
Then go to your user space on gitorious (example: https://gitorious.org/~heliaco), choose &amp;quot;Dashboard &amp;gt; SSH Keys &amp;gt; Add SSH Key&amp;quot;, paste your clipboard's content, and save your update.&lt;br /&gt;
&lt;br /&gt;
=== Make a personal clone of a gitorious repository ===&lt;br /&gt;
Go to the main page of the project you want to contibute to (example: https://meego.gitorious.org/meego-quality-assurance/auto-ux-testlib).&amp;lt;BR&amp;gt;&lt;br /&gt;
Click &amp;quot;Clone repository&amp;quot; button, change your clone name as you wish, and confirm your action.&lt;br /&gt;
&lt;br /&gt;
Now you should see the SSH url of your clone which is like the following example: git@gitorious.org:~heliaco/meego-quality-assurance/heliaco-auto-ux-testlib.git.&lt;br /&gt;
&lt;br /&gt;
=== Set up your Linux's working environment ===&lt;br /&gt;
From your Linux PC, clone the repository you just made:&lt;br /&gt;
 $ git clone git@gitorious.org:~&amp;lt;username&amp;gt;/&amp;lt;project group&amp;gt;/&amp;lt;your clone name&amp;gt;.git&lt;br /&gt;
 Example: git clone git@gitorious.org:~heliaco/meego-quality-assurance/heliaco-auto-ux-testlib.git&lt;br /&gt;
&lt;br /&gt;
You need to define a name and email within git. For this you can either use a global .gitconfig file or specify these settings within a particular repository.&lt;br /&gt;
&lt;br /&gt;
To create a global file, tap below command:&lt;br /&gt;
 $ gedit ~/.gitconfig&lt;br /&gt;
Then add below section into it, mentioning your name and email:&lt;br /&gt;
 [user]&lt;br /&gt;
  name = &amp;lt;Your name&amp;gt;&lt;br /&gt;
  email = &amp;lt;Your email&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, save and close the file.&lt;br /&gt;
&lt;br /&gt;
To configure name and email within a repository, tap below commands:&lt;br /&gt;
 $ git config user.name &amp;quot;Your Name&amp;quot;&lt;br /&gt;
 $ git config user.email &amp;quot;Your email&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now, one possible way of working is to make development on a master branch, and use another branch called &amp;quot;upstream&amp;quot; in the process of merging requests.&lt;br /&gt;
&lt;br /&gt;
To create a branch called &amp;quot;upstream&amp;quot;, tap below command:&lt;br /&gt;
 $ git checkout -b upstream&lt;br /&gt;
&lt;br /&gt;
Then define the remote server path for &amp;quot;upstream&amp;quot; branch:&lt;br /&gt;
 $ git remote add upstream git://gitorious.org/&amp;lt;project group&amp;gt;/&amp;lt;project name&amp;gt;.git&lt;br /&gt;
 Example: git remote add upstream git://gitorious.org/meego-quality-assurance/auto-ux-tests.git&lt;br /&gt;
&lt;br /&gt;
And switch back to &amp;quot;master&amp;quot; branch:&lt;br /&gt;
 $ git checkout master&lt;br /&gt;
&lt;br /&gt;
=== Commit patches ===&lt;br /&gt;
In order to track the files you modified and/or added in the project, tap below command:&lt;br /&gt;
 $ git add &amp;lt;modified and/or added files names&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Commit your patch using below command:&lt;br /&gt;
 $ git commit&lt;br /&gt;
 -m parameter allows you to comment your patch.&lt;br /&gt;
&lt;br /&gt;
Then you have to sync the &amp;quot;upstream&amp;quot; and &amp;quot;master&amp;quot; branches.&lt;br /&gt;
&lt;br /&gt;
Switch to &amp;quot;upstream&amp;quot; branch:&lt;br /&gt;
 $ git checkout upstream&lt;br /&gt;
&lt;br /&gt;
Update &amp;quot;upstream&amp;quot; branch:&lt;br /&gt;
 $ git pull upstream master&lt;br /&gt;
&lt;br /&gt;
Switch back to &amp;quot;master&amp;quot; branch:&lt;br /&gt;
 $ git checkout master&lt;br /&gt;
&lt;br /&gt;
Merge your &amp;quot;master&amp;quot; changes into the &amp;quot;upstream&amp;quot; branch:&lt;br /&gt;
 $ git rebase upstream&lt;br /&gt;
&lt;br /&gt;
Prior to push your patch, you can display your changes which are now in the &amp;quot;upstream&amp;quot; branch:&lt;br /&gt;
 $ git diff upstream&lt;br /&gt;
&lt;br /&gt;
Then, update the remote branch:&lt;br /&gt;
 $ git push origin master&lt;br /&gt;
&lt;br /&gt;
=== Perform a &amp;quot;merge request&amp;quot; from gitorious web UI ===&lt;br /&gt;
Go to http://meego.gitorious.org/~&amp;lt;username&amp;gt;/&amp;lt;project group&amp;gt;/&amp;lt;your clone name&amp;gt; (Example: https://meego.gitorious.org/~heliaco/meego-quality-assurance/heliaco-auto-ux-testlib).&lt;br /&gt;
&lt;br /&gt;
Click &amp;quot;Request merge&amp;quot; button in the right column.&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;quot;Create a merge request&amp;quot; window appears, fill in &amp;quot;Summary&amp;quot; and &amp;quot;Description&amp;quot; fields, set your project name as &amp;quot;Target Repository&amp;quot; and select your commit(s).&amp;lt;BR&amp;gt;&lt;br /&gt;
Finally, click &amp;quot;Create merge request&amp;quot; button at the bottom of the page.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
[[Category:Tutorial]]&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Brief_git_guide</id>
		<title>Brief git guide</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Brief_git_guide"/>
				<updated>2011-07-05T13:26:11Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git is handy version control for collaborative development and testing. This guides you briefly through basics to get started. Only terminal usage under Linux is covered, for graphical user interfaces please refer guides available at web.&lt;br /&gt;
&lt;br /&gt;
'''Note''' - this was not placed under developer nor testing because it's common for all MeeGo contributors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Concepts ==&lt;br /&gt;
&lt;br /&gt;
Please open the [http://www.cheat-sheets.org/saved-copy/git-cheat-sheet.pdf excellent git cheat sheet]. Work flow is illustrated in the upper-right corner of cheat sheet. The most basic flow with an existing repository goes like:&lt;br /&gt;
&lt;br /&gt;
=== 1. Create ===&lt;br /&gt;
&lt;br /&gt;
 git clone &amp;lt;repository&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: &lt;br /&gt;
&lt;br /&gt;
 git clone git://gitorious.org/meego-quality-assurance/handset-ux-tests.git&lt;br /&gt;
&lt;br /&gt;
=== 2. Change ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;edit or create files with your favorite tools / editors&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. Commit changes ===&lt;br /&gt;
  &lt;br /&gt;
 git add &amp;lt;newfile&amp;gt; (if you created new file)&lt;br /&gt;
 git commit -a &lt;br /&gt;
&lt;br /&gt;
Your default editor is opened and you need to write description of changes.&lt;br /&gt;
&lt;br /&gt;
=== 4. Push changes to share ===&lt;br /&gt;
 &lt;br /&gt;
 git push (this assumes you have commit rights to repository, please check with repository admin)&lt;br /&gt;
&lt;br /&gt;
''' That's it! Congratulations! '''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pre-steps ==&lt;br /&gt;
&lt;br /&gt;
=== Mandatory - Make sure you have git installed ===&lt;br /&gt;
&lt;br /&gt;
Ubuntu: &lt;br /&gt;
 sudo apt-get install git&lt;br /&gt;
&lt;br /&gt;
=== Optional - If working behind ssh-proxy ===&lt;br /&gt;
&lt;br /&gt;
If you are working with corporation you might need to resolve ssh-proxy challenge.&lt;br /&gt;
&lt;br /&gt;
Make sure you have following $USER/.ssh/config for your user account&lt;br /&gt;
&lt;br /&gt;
 host proxy &lt;br /&gt;
  HostName '''&amp;lt;yoursshproxyhere&amp;gt;'''&lt;br /&gt;
  user '''&amp;lt;youruseraccounthere&amp;gt;'''&lt;br /&gt;
  Compression no&lt;br /&gt;
  LocalForward 2227 gitorious.org:22&lt;br /&gt;
 host gitorious.org&lt;br /&gt;
  User git&lt;br /&gt;
  HostName 127.0.0.1&lt;br /&gt;
  Port 2227&lt;br /&gt;
  &lt;br /&gt;
Run the following command:&lt;br /&gt;
 ssh -f -N proxy&lt;br /&gt;
 &amp;lt;type password for your account, if required&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Please note that you need to open proxy connection every time you change network or disconnect/connect from network''&lt;br /&gt;
&lt;br /&gt;
Now you can clone and push over ssh proxy to '''gitorious.org''', test as follows:&lt;br /&gt;
 git clone git://gitorious.org/meego-quality-assurance/handset-ux-tests.git&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How to use gitorious to do a merge request ==&lt;br /&gt;
There are as many ways to do a merge request as there are coders, so this guide just aims at helping at the beginning.&lt;br /&gt;
&lt;br /&gt;
=== Register on gitorious ===&lt;br /&gt;
Go to https://secure.gitorious.org/users/new to create an account.&lt;br /&gt;
&lt;br /&gt;
Then define a SSH (secure shell) key to enable secured communication between your Linux PC and gitorious. Tap below commands to generate such a key from Linux:&lt;br /&gt;
 $ ssh-keygen&lt;br /&gt;
 Follow your terminal instructions.&lt;br /&gt;
 $ cat ~/.ssh/id_rsa.pub&lt;br /&gt;
Copy the result of &amp;quot;cat&amp;quot; command.&amp;lt;BR&amp;gt;&lt;br /&gt;
Then go to your user space on gitorious (example: https://gitorious.org/~heliaco), choose &amp;quot;Dashboard &amp;gt; SSH Keys &amp;gt; Add SSH Key&amp;quot;, paste your clipboard's content, and save your update.&lt;br /&gt;
&lt;br /&gt;
=== Make a personal clone of a gitorious repository ===&lt;br /&gt;
Go to the main page of the project you want to contibute to (example: https://meego.gitorious.org/meego-quality-assurance/auto-ux-testlib).&amp;lt;BR&amp;gt;&lt;br /&gt;
Click &amp;quot;Clone repository&amp;quot; button, change your clone name as you wish, and confirm your action.&lt;br /&gt;
&lt;br /&gt;
Now you should see the SSH url of your clone which is like the following example: git@gitorious.org:~heliaco/meego-quality-assurance/heliaco-auto-ux-testlib.git.&lt;br /&gt;
&lt;br /&gt;
=== Set up your Linux's working environment ===&lt;br /&gt;
From your Linux PC, clone the repository you just made:&lt;br /&gt;
 $ git clone git@gitorious.org:~&amp;lt;username&amp;gt;/&amp;lt;project group&amp;gt;/&amp;lt;your clone name&amp;gt;.git&lt;br /&gt;
 Example: git clone git@gitorious.org:~heliaco/meego-quality-assurance/heliaco-auto-ux-testlib.git&lt;br /&gt;
&lt;br /&gt;
You need to define a name and email within git. For this you can either use a global .gitconfig file or specify these settings within a particular repository.&lt;br /&gt;
&lt;br /&gt;
To create a global file, tap below command:&lt;br /&gt;
 $ gedit ~/.gitconfig&lt;br /&gt;
Then add below section into it, mentioning your name and email:&lt;br /&gt;
 [user]&lt;br /&gt;
  name = &amp;lt;Your name&amp;gt;&lt;br /&gt;
  email = &amp;lt;Your email&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, save and close the file.&lt;br /&gt;
&lt;br /&gt;
To configure name and email within a repository, tap below commands:&lt;br /&gt;
 $ git config user.name &amp;quot;Your Name&amp;quot;&lt;br /&gt;
 $ git config user.email &amp;quot;Your email&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now, one possible way of working is to make development on a master branch, and use another branch called &amp;quot;upstream&amp;quot; in the process of merging requests.&lt;br /&gt;
&lt;br /&gt;
To create a branch called &amp;quot;upstream&amp;quot;, tap below command:&lt;br /&gt;
 $ git checkout -b upstream&lt;br /&gt;
&lt;br /&gt;
Then define the remote server path for &amp;quot;upstream&amp;quot; branch:&lt;br /&gt;
 $ git remote add upstream git://gitorious.org/&amp;lt;project group&amp;gt;/&amp;lt;project name&amp;gt;.git&lt;br /&gt;
 Example: git remote add upstream git://gitorious.org/meego-quality-assurance/auto-ux-tests.git&lt;br /&gt;
&lt;br /&gt;
And switch back to &amp;quot;master&amp;quot; branch:&lt;br /&gt;
 $ git checkout master&lt;br /&gt;
&lt;br /&gt;
=== Commit patches ===&lt;br /&gt;
In order to track the files you modified and/or added in the project, tap below command:&lt;br /&gt;
 $ git add &amp;lt;modified and/or added files names&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Commit your patch using below command:&lt;br /&gt;
 $ git commit&lt;br /&gt;
 -m parameter allows you to comment your patch.&lt;br /&gt;
&lt;br /&gt;
Then you have to sync the &amp;quot;upstream&amp;quot; and &amp;quot;master&amp;quot; branches.&lt;br /&gt;
&lt;br /&gt;
Switch to &amp;quot;upstream&amp;quot; branch:&lt;br /&gt;
 $ git checkout upstream&lt;br /&gt;
&lt;br /&gt;
Update &amp;quot;upstream&amp;quot; branch:&lt;br /&gt;
 $ git pull upstream master&lt;br /&gt;
&lt;br /&gt;
Switch back to &amp;quot;master&amp;quot; branch:&lt;br /&gt;
 $ git checkout master&lt;br /&gt;
&lt;br /&gt;
Merge your &amp;quot;master&amp;quot; changes into the &amp;quot;upstream&amp;quot; branch:&lt;br /&gt;
 $ git rebase upstream&lt;br /&gt;
&lt;br /&gt;
Prior to push your patch, you can display your changes which are now in the &amp;quot;upstream&amp;quot; branch:&lt;br /&gt;
 $ git diff upstream&lt;br /&gt;
&lt;br /&gt;
Then, update the remote branch:&lt;br /&gt;
 $ git push origin master&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Perform a &amp;quot;merge request&amp;quot; from gitorious web UI ===&lt;br /&gt;
Go to http://meego.gitorious.org/~&amp;lt;username&amp;gt;/&amp;lt;project group&amp;gt;/&amp;lt;your clone name&amp;gt; (Example: https://meego.gitorious.org/~heliaco/meego-quality-assurance/heliaco-auto-ux-testlib).&lt;br /&gt;
&lt;br /&gt;
Click &amp;quot;Request merge&amp;quot; button in the right column.&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;quot;Create a merge request&amp;quot; window appears, fill in &amp;quot;Summary&amp;quot; and &amp;quot;Description&amp;quot; fields, set your project name as &amp;quot;Target Repository&amp;quot; and select your commit(s).&amp;lt;BR&amp;gt;&lt;br /&gt;
Finally, click &amp;quot;Create merge request&amp;quot; button at the bottom of the page.&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
[[Category:Tutorial]]&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Brief_git_guide</id>
		<title>Brief git guide</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Brief_git_guide"/>
				<updated>2011-07-05T13:24:41Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: Adding steps as to how to do a merge request on gitorious.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git is handy version control for collaborative development and testing. This guides you briefly through basics to get started. Only terminal usage under Linux is covered, for graphical user interfaces please refer guides available at web.&lt;br /&gt;
&lt;br /&gt;
'''Note''' - this was not placed under developer nor testing because it's common for all MeeGo contributors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Concepts ==&lt;br /&gt;
&lt;br /&gt;
Please open the [http://www.cheat-sheets.org/saved-copy/git-cheat-sheet.pdf excellent git cheat sheet]. Work flow is illustrated in the upper-right corner of cheat sheet. The most basic flow with an existing repository goes like:&lt;br /&gt;
&lt;br /&gt;
=== 1. Create ===&lt;br /&gt;
&lt;br /&gt;
 git clone &amp;lt;repository&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: &lt;br /&gt;
&lt;br /&gt;
 git clone git://gitorious.org/meego-quality-assurance/handset-ux-tests.git&lt;br /&gt;
&lt;br /&gt;
=== 2. Change ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;edit or create files with your favorite tools / editors&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. Commit changes ===&lt;br /&gt;
  &lt;br /&gt;
 git add &amp;lt;newfile&amp;gt; (if you created new file)&lt;br /&gt;
 git commit -a &lt;br /&gt;
&lt;br /&gt;
Your default editor is opened and you need to write description of changes.&lt;br /&gt;
&lt;br /&gt;
=== 4. Push changes to share ===&lt;br /&gt;
 &lt;br /&gt;
 git push (this assumes you have commit rights to repository, please check with repository admin)&lt;br /&gt;
&lt;br /&gt;
''' That's it! Congratulations! '''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pre-steps ==&lt;br /&gt;
&lt;br /&gt;
=== Mandatory - Make sure you have git installed ===&lt;br /&gt;
&lt;br /&gt;
Ubuntu: &lt;br /&gt;
 sudo apt-get install git&lt;br /&gt;
&lt;br /&gt;
=== Optional - If working behind ssh-proxy ===&lt;br /&gt;
&lt;br /&gt;
If you are working with corporation you might need to resolve ssh-proxy challenge.&lt;br /&gt;
&lt;br /&gt;
Make sure you have following $USER/.ssh/config for your user account&lt;br /&gt;
&lt;br /&gt;
 host proxy &lt;br /&gt;
  HostName '''&amp;lt;yoursshproxyhere&amp;gt;'''&lt;br /&gt;
  user '''&amp;lt;youruseraccounthere&amp;gt;'''&lt;br /&gt;
  Compression no&lt;br /&gt;
  LocalForward 2227 gitorious.org:22&lt;br /&gt;
 host gitorious.org&lt;br /&gt;
  User git&lt;br /&gt;
  HostName 127.0.0.1&lt;br /&gt;
  Port 2227&lt;br /&gt;
  &lt;br /&gt;
Run the following command:&lt;br /&gt;
 ssh -f -N proxy&lt;br /&gt;
 &amp;lt;type password for your account, if required&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Please note that you need to open proxy connection every time you change network or disconnect/connect from network''&lt;br /&gt;
&lt;br /&gt;
Now you can clone and push over ssh proxy to '''gitorious.org''', test as follows:&lt;br /&gt;
 git clone git://gitorious.org/meego-quality-assurance/handset-ux-tests.git&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How to use gitorious to do a merge request ==&lt;br /&gt;
There are as many ways to do a merge request as there are coders, so this guide just aims at helping at the beginning.&lt;br /&gt;
&lt;br /&gt;
=== Register on gitorious ===&lt;br /&gt;
Go to https://secure.gitorious.org/users/new to create an account.&lt;br /&gt;
&lt;br /&gt;
Then define a SSH (secure shell) key to enable secured communication between your Linux PC and gitorious. Tap below commands to generate such a key from Linux:&lt;br /&gt;
 $ ssh-keygen&lt;br /&gt;
 Follow your terminal instructions.&lt;br /&gt;
 $ cat ~/.ssh/id_rsa.pub&lt;br /&gt;
Copy the result of &amp;quot;cat&amp;quot; command.&amp;lt;BR&amp;gt;&lt;br /&gt;
Then go to your user space on gitorious (example: https://gitorious.org/~heliaco), choose &amp;quot;Dashboard &amp;gt; SSH Keys &amp;gt; Add SSH Key&amp;quot;, paste your clipboard's content, and save your update.&lt;br /&gt;
&lt;br /&gt;
=== Make a personal clone of a gitorious repository ===&lt;br /&gt;
Go to the main page of the project you want to contibute to (example: https://meego.gitorious.org/meego-quality-assurance/auto-ux-testlib).&amp;lt;BR&amp;gt;&lt;br /&gt;
Click &amp;quot;Clone repository&amp;quot; button, change your clone name as you wish, and confirm your action.&lt;br /&gt;
&lt;br /&gt;
Now you should see the SSH url of your clone which is like the following example: git@gitorious.org:~heliaco/meego-quality-assurance/heliaco-auto-ux-testlib.git.&lt;br /&gt;
&lt;br /&gt;
=== Set up your Linux's working environment ===&lt;br /&gt;
From your Linux PC, clone the repository you just made:&lt;br /&gt;
 $ git clone git@gitorious.org:~&amp;lt;username&amp;gt;/&amp;lt;project group&amp;gt;/&amp;lt;your clone name&amp;gt;.git&lt;br /&gt;
 Example: git clone git@gitorious.org:~heliaco/meego-quality-assurance/heliaco-auto-ux-testlib.git&lt;br /&gt;
&lt;br /&gt;
You need to define a name and email within git. For this you can either use a global .gitconfig file or specify these settings within a particular repository.&lt;br /&gt;
&lt;br /&gt;
To create a global file, tap below command:&lt;br /&gt;
 $ gedit ~/.gitconfig&lt;br /&gt;
Then add below section into it, mentioning your name and email:&lt;br /&gt;
 [user]&lt;br /&gt;
  name = &amp;lt;Your name&amp;gt;&lt;br /&gt;
  email = &amp;lt;Your email&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, save and close the file.&lt;br /&gt;
&lt;br /&gt;
To configure name and email within a repository, tap below commands:&lt;br /&gt;
 $ git config user.name &amp;quot;Your Name&amp;quot;&lt;br /&gt;
 $ git config user.email &amp;quot;Your email&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now, one possible way of working is to make development on a master branch, and use another branch called &amp;quot;upstream&amp;quot; in the process of merging requests.&lt;br /&gt;
&lt;br /&gt;
To create a branch called &amp;quot;upstream&amp;quot;, tap below command:&lt;br /&gt;
 $ git checkout -b upstream&lt;br /&gt;
&lt;br /&gt;
Then define the remote server path for &amp;quot;upstream&amp;quot; branch:&lt;br /&gt;
 $ git remote add upstream git://gitorious.org/&amp;lt;project group&amp;gt;/&amp;lt;project name&amp;gt;.git&lt;br /&gt;
 Example: git remote add upstream git://gitorious.org/meego-quality-assurance/auto-ux-tests.git&lt;br /&gt;
&lt;br /&gt;
And switch back to &amp;quot;master&amp;quot; branch:&lt;br /&gt;
 $ git checkout master&lt;br /&gt;
&lt;br /&gt;
=== Commit patches ===&lt;br /&gt;
In order to track the files you modified and/or added in the project, tap below command:&lt;br /&gt;
 $ git add &amp;lt;modified and/or added files names&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Commit your patch using below command:&lt;br /&gt;
 $ git commit&lt;br /&gt;
 -m parameter allows you to comment your patch.&lt;br /&gt;
&lt;br /&gt;
Then you have to sync the &amp;quot;upstream&amp;quot; and &amp;quot;master&amp;quot; branches.&lt;br /&gt;
&lt;br /&gt;
Switch to &amp;quot;upstream&amp;quot; branch:&lt;br /&gt;
 $ git checkout upstream&lt;br /&gt;
&lt;br /&gt;
Update &amp;quot;upstream&amp;quot; branch:&lt;br /&gt;
 $ git pull upstream master&lt;br /&gt;
&lt;br /&gt;
Switch back to &amp;quot;master&amp;quot; branch:&lt;br /&gt;
 $ git checkout master&lt;br /&gt;
&lt;br /&gt;
Merge your &amp;quot;master&amp;quot; changes into the &amp;quot;upstream&amp;quot; branch:&lt;br /&gt;
 $ git rebase upstream&lt;br /&gt;
&lt;br /&gt;
Prior to push your patch, you can display your changes which are now in the &amp;quot;upstream&amp;quot; branch:&lt;br /&gt;
 $ git diff upstream&lt;br /&gt;
&lt;br /&gt;
Then, update the remote branch:&lt;br /&gt;
 $ git push origin master&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Perform a &amp;quot;merge request&amp;quot; from gitorious web UI ===&lt;br /&gt;
Go to http://meego.gitorious.org/~&amp;lt;username&amp;gt;/&amp;lt;project group&amp;gt;/&amp;lt;your clone name&amp;gt; (Example: https://meego.gitorious.org/~heliaco/meego-quality-assurance/heliaco-auto-ux-testlib).&lt;br /&gt;
&lt;br /&gt;
Click &amp;quot;Request merge&amp;quot; button in the right column.&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;quot;Create a merge request&amp;quot; window appears, fill in &amp;quot;Summary&amp;quot; and &amp;quot;Description&amp;quot; fields, set your project name as &amp;quot;Target Repository&amp;quot; and select your commit(s).&amp;lt;BR&amp;gt;&lt;br /&gt;
Finally, click &amp;quot;Create merge request&amp;quot; button at the bottom of the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorial]]&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA_tools_development</id>
		<title>Quality/QA tools development</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA_tools_development"/>
				<updated>2011-06-23T08:11:01Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: Completing Tools and Maintainers section.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QA tools development =&lt;br /&gt;
&lt;br /&gt;
This page provides information on the development activities and practices of QA tools. The focus is on presenting things that are relevant for people interested in developing the tools. The main page for the end users is [[Quality/QA-tools|here]].&lt;br /&gt;
&lt;br /&gt;
Anyone is welcome to contribute and non-member contributions will be treated with same process and review as member contributions. We follow [http://meego.com/about/contribution-guidelines MeeGo contribution guidelines]. In addition, you may take personal clone from our [http://meego.gitorious.org/meego-quality-assurance/ git repositories] and create merge request. Tool maintainers in our projects will review your contributions and decide on merge.&lt;br /&gt;
&lt;br /&gt;
'''Targets:'''&lt;br /&gt;
&lt;br /&gt;
* Improve MeeGo test reporting tools - target from MeeGo Quality Assurance&lt;br /&gt;
* Improve MeeGo test automation (execution and software installation) - target from MeeGo release engineering&lt;br /&gt;
&lt;br /&gt;
&amp;quot;As Core OS release release manager I want to verify trunk:testing packages frequently so that I know the quality of nightly/weekly releases.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Tools and Maintainers ==&lt;br /&gt;
&lt;br /&gt;
Tool maintainers are selected based on developer experience with particular tool/package or seniority. Tool maintainers have been agreed [[Quality/QA-tools/Meetings|in the QA-tools meeting]] Tuesday September 7th 2010. Changes, if needed, are discussed also there.&lt;br /&gt;
&lt;br /&gt;
In practice only tool maintainers will have commit and review right to particular repository - later several people may have rights to repository based on merit (as proposed by tool maintainer). Others must follow [http://meego.com/about/contribution-guidelines MeeGo contribution guidelines] to submit patches or personal clone + merge request approach. &lt;br /&gt;
 &lt;br /&gt;
The maintainer of the tree shall update the changelog.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|'''Tool (link to wiki page)''' ||'''Gitorious'''||'''Maintainer''' ||'''Substitute'''&lt;br /&gt;
|- &lt;br /&gt;
| [[Quality/QA-tools/Test-definition|test-definition]]||[http://meego.gitorious.org/meego-quality-assurance/test-definition Gitorious] || Sami Lahtinen || Timo Härkönen&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Testrunner-lite|testrunner-lite]] ||[http://meego.gitorious.org/meego-quality-assurance/testrunner-lite Gitorious] || Sami Lahtinen || Kyösti Ranto&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Testrunner|Testrunner]] || [http://meego.gitorious.org/meego-quality-assurance/testrunner Gitorious] || Kyösti Ranto || Timo Härkönen &lt;br /&gt;
|- &lt;br /&gt;
| [[Quality/QA-tools/Testplanner|Testplanner]] ||[http://meego.gitorious.org/meego-quality-assurance/testplanner Gitorious] ||  Kyösti Ranto || N/A&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Eat|eat - enables automated testing]] ||[http://meego.gitorious.org/meego-quality-assurance/enables-automated-testing Gitorious] ||  Timo Härkönen || Timo Mäkimattila&lt;br /&gt;
|- &lt;br /&gt;
| [[Quality/QA-tools/OTS|OTS - Open Test System]] ||[http://meego.gitorious.org/meego-quality-assurance/ots Gitorious] ||  Elias Luttinen || Ville Niutanen&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Autotest-guide#Automatic_image_installations|MeeGo Automated installer]] ||[http://gitorious.org/qa-tools/meego-ai Gitorious] ||  Timo Härkönen || N/A&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/TestSuite/MCTS|MeeGo Core Test Suite]] || [http://meego.gitorious.org/meego-quality-assurance/mcts/ Gitorious] ||Matti Salmi || Jeff Zheng&lt;br /&gt;
|- &lt;br /&gt;
| [[Quality/Netbook Test Suite and Utilities|MeeGo Netbook Test Suite]] || [http://gitorious.org/qa-tools/mnts/ Gitorious] ||Jeff Zheng || N/A&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/qtuitest-mbt-adapter|Model-Based Testing adapter for qtuitest]]  || [http://gitorious.org/qa-tools/qtuitest-mbt-adapter Gitorious] || Riku Halonen || N/A&lt;br /&gt;
|-&lt;br /&gt;
| [http://min.sourceforge.net/ MIN test framework] || [http://meego.gitorious.org/meego-quality-assurance/min Gitorious] ||  Joonas Kylänpää || Timo Mäkimattila&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/TDriver|Testability Driver]] || [http://gitorious.org/TDriver Gitorious] ||  Petri Kiiskinen || Tatu Lahtela&lt;br /&gt;
|-&lt;br /&gt;
| Rich Core dumper || [http://meego.gitorious.org/meego-quality-assurance/rich-core Gitorious] || Carol Rus || Raimo Gratseff&lt;br /&gt;
|-&lt;br /&gt;
| Crash Reporter || [http://meego.gitorious.org/meego-quality-assurance/crash-reporter Gitorious] || Carol Rus || Raimo Gratseff&lt;br /&gt;
|-&lt;br /&gt;
| Crash Reporter settings || [http://meego.gitorious.org/meego-quality-assurance/crash-reporter-settings-public Gitorious] || Carol Rus || Raimo Gratseff&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/hat-control|Hardware Accessory for Testing (HAT)]] || [http://meego.gitorious.org/meego-quality-assurance/hat-control Gitorious] || Marko Junttila || Riku Halonen&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/QAReports|QA Reports]] || [http://meego.gitorious.org/meego-quality-assurance/qa-reports Gitorious] || Sami Hangaslammi || Jarno Keskikangas&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Scripts_and_utils|Scripts and utils]] || [http://meego.gitorious.com/meego-quality-assurance/scripts-and-utils Gitorious] || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/TestSuite/handset-test-suite/handset-ux-test_Releases | handset_ux_tests]] || [http://meego.gitorious.com/meego-quality-assurance/handset-ux-tests Gitorious] || JessicaJi || N/A&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/MeeGo_Fast_Feedback_Testing|MeeGo Fast Feedback Testing (MeeGo-FFT)]] || [http://meego.gitorious.org/meego-quality-assurance/meego-testing-hudson-plugin Gitorious] || Alexey Kuznetsov || Timo Härkönen&lt;br /&gt;
|-&lt;br /&gt;
| Service OS based Flasher || [http://meego.gitorious.org/meego-quality-assurance/meego-ai-serviceos Gitorious] || Jing Wang || N/A&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Qpid C wrapper|Qpid C wrapper library - libcqpid]] || [http://meego.gitorious.org/meego-quality-assurance/libcqpid Gitorious] || Sami Lahtinen || N/A&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/QmlUITestlib|MeeGo QML GUI Testlib]] || [http://meego.gitorious.org/meego-quality-assurance/auto-ux-testlib Gitorious] || Shao-Feng Tang|| Helia Correia&lt;br /&gt;
|-&lt;br /&gt;
| [[Testkit_Howto|testkit-lite]] || [http://meego.gitorious.org/meego-quality-assurance/testkit-lite Gitorious] || Jing Wang|| N/A&lt;br /&gt;
|-&lt;br /&gt;
| [[Testkit_Howto|testkit-manager]] || [http://meego.gitorious.org/meego-quality-assurance/testkit-manager Gitorious] || Shao-Feng Tang|| N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you are interested in the user experience work regarding these tools, you can find more information [[Quality/QA-tools/User experience|here]].&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
The figure below tries to summarize the relations and tasks of the tools when used in test automation context.&lt;br /&gt;
&lt;br /&gt;
[[File:testautomationtools.png]]&lt;br /&gt;
&lt;br /&gt;
xfig file:[[File:qatools.fig]]&lt;br /&gt;
&lt;br /&gt;
== Release Practices ==&lt;br /&gt;
&lt;br /&gt;
Here is the workflow for QA tools release practices.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|'''Role'''&lt;br /&gt;
|'''Description'''&lt;br /&gt;
|-&lt;br /&gt;
| Developer || Anyone who wants to participate in qa-tools development &lt;br /&gt;
|-&lt;br /&gt;
| VCS Maintainer || Component owner who has commit rights in version control system (VCS)&lt;br /&gt;
|-&lt;br /&gt;
| Package Maintainer || Integrator whose responsibility is the OBS packaging&lt;br /&gt;
|-&lt;br /&gt;
| Release Management || Third party who is responsible of trunk:testing releases(?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:Release.png]]&lt;br /&gt;
&lt;br /&gt;
Kivio file: [[File:Release.flw]]&lt;br /&gt;
&lt;br /&gt;
# Developer creates merge request(s) in gitorious.&lt;br /&gt;
# VCS Maintainer tests and accepts merge requests.&lt;br /&gt;
# VCS Maintainer checks/updates change logs.&lt;br /&gt;
# VCS Maintainer tags a version.&lt;br /&gt;
# VCS maintainer sends email to [http://lists.meego.com/pipermail/meego-qa/ meego-qa mailing list] based on the following template&lt;br /&gt;
Topic: Integration request: package-name version&lt;br /&gt;
 PACKAGE: package-name&lt;br /&gt;
 TAG: tag name&lt;br /&gt;
 URL: link to sources&lt;br /&gt;
 CHANGES: short description of changes containing bugs.meego.com bug numbers of fixed bugs&lt;br /&gt;
# Package maintainer updates the OBS package.&lt;br /&gt;
# Package maintainer tests the OBS package.&lt;br /&gt;
# If the package belongs to tools:testing and passes testing, Package Maintainer may accept it. If the package belongs to trunk:testing, Package Maintainer creates a promotional request to Release Management. (If the package belongs to both repositories, we let the Release Management set bugs fixed by the package to RELEASED state).&lt;br /&gt;
# Host side tools are updated to tools:testing after verifying functionality&lt;br /&gt;
# Package maintainer replies to meego-qa list about the actions done with the updated package. e.g. 'Updated in devel:quality and sent promotion request to testing'&lt;br /&gt;
# Release Management accepts the package. Or not. (Follow meego-packaging and meego-commits.)&lt;br /&gt;
&lt;br /&gt;
''' YouTube videos '''&lt;br /&gt;
&lt;br /&gt;
YouTube is a good way to communicate new features. You can find existing demo videos on [http://www.youtube.com/user/meegoqatools meegoqatools channel on Youtube].&lt;br /&gt;
&lt;br /&gt;
If you shoot a video to YouTube, promote it on meego-qa mailing list!&lt;br /&gt;
&lt;br /&gt;
You can find some hints how to shoot, edit, and upload a video here: [[YouTube_Hints]]&lt;br /&gt;
&lt;br /&gt;
=== Release checklist ===&lt;br /&gt;
To make sure fixes are released without delay, check that the following conditions are met&lt;br /&gt;
&lt;br /&gt;
# Change logs are updated and contain relevant references to MeeGo bugzilla&lt;br /&gt;
# Created obs request include fixes bug numbers from MeeGo bugzilla&lt;br /&gt;
# Bugzilla items listed in changes are set as resolved&lt;br /&gt;
# Spec file matches [[Packaging/Guidelines|MeeGo packaging guidelines]]&lt;br /&gt;
# Rpmlint warnings are either fixed or explained by comments in the spec file. e.g. eat packages install files into root's home and the reasoning for it needs to be explained&lt;br /&gt;
# Host side tool packages use the same source tar ball to produce debian and rpm packages&lt;br /&gt;
&lt;br /&gt;
== Roadmap ==&lt;br /&gt;
&lt;br /&gt;
These are the items that we're currently working on.&lt;br /&gt;
&lt;br /&gt;
The features in the roadmap are followed with META FEA bugs. The features are split to small tool specific FEA:s that block the feature META bug. The META bug is then the last bug to be closed when the feature is finished. You can also follow the tool bug progression from the dependency trees of the META bugs.&lt;br /&gt;
&lt;br /&gt;
Adding a new feature to the roadmap:&lt;br /&gt;
# Add a feature bug describing the main purpose of the feature with META and FEA tags.&lt;br /&gt;
# Add separate bugs for each tool specific change&lt;br /&gt;
# Add correct dependencies between tool specific bugs (e.g. testrunner bug depends on testrunner-lite bug that depends on test-definition bug...)&lt;br /&gt;
# Make all of the bugs block the META bug&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|'''Feature'''&lt;br /&gt;
|-&lt;br /&gt;
| [https://bugs.meego.com/showdependencytree.cgi?id=12980&amp;amp;hide_resolved=0 Measurement support] &lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/OTS/Roadmap|OTS releases]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Future development ==&lt;br /&gt;
&lt;br /&gt;
The focus is currently on [[ARM/N900/QA|N900 Developer Edition QA]]. Hence the N900 related list below doesn't have a comprehensive information about target builds or priorities. The items listed here are not currently worked on but are planned to be implemented in the long run.&lt;br /&gt;
&lt;br /&gt;
A list of defined features:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|'''Feature'''&lt;br /&gt;
|-&lt;br /&gt;
| [https://bugs.meego.com/show_bug.cgi?id=12810 Easy install] &lt;br /&gt;
|-&lt;br /&gt;
| [http://bugs.meego.com/showdependencytree.cgi?id=12454&amp;amp;hide_resolved=0 Parallel testing] &lt;br /&gt;
|-&lt;br /&gt;
| [https://bugs.meego.com/showdependencytree.cgi?id=12981&amp;amp;hide_resolved=0 Events feature in automatic testing]&lt;br /&gt;
|-&lt;br /&gt;
| [https://bugs.meego.com/showdependencytree.cgi?id=12937&amp;amp;hide_resolved=0 MCTS coverage support]&lt;br /&gt;
|-&lt;br /&gt;
| [http://bugs.meego.com/showdependencytree.cgi?id=12833&amp;amp;hide_resolved=0 Test environment validation]&lt;br /&gt;
|-&lt;br /&gt;
| [http://bugs.meego.com/showdependencytree.cgi?id=13092&amp;amp;hide_resolved=0 Test equipment control]&lt;br /&gt;
|-&lt;br /&gt;
| [https://bugs.meego.com/showdependencytree.cgi?id=12971&amp;amp;hide_resolved=0 Qt Creator integration] &lt;br /&gt;
|-&lt;br /&gt;
| [https://bugs.meego.com/show_bug.cgi?id=13190 A tool that combines Testrunner and Testplanner]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Design/ Planning ==&lt;br /&gt;
&lt;br /&gt;
* [[Quality/QA-tools/MCTS test automation design|MCTS Test Automation]] (QA Tools support for MCTS)&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
Please make sure that all the relevant documentation regarding the tools is kept up-to-date whenever you update any of the tools. Please consider the end users of the tool as the primary readers of the documentation and make the documentation task-oriented for end user needs. Separate developer documentation can exist as well.&lt;br /&gt;
&lt;br /&gt;
'''Wiki guidelines'''&lt;br /&gt;
&lt;br /&gt;
Every tool should have a wiki page that contains at least 1) Overview of the tool and its benefits 2) Installation instructions 3) Basic use tutorial 4) Contact information. &lt;br /&gt;
&lt;br /&gt;
Make sure that you are familiar with [[Wiki contribution guidelines|MeeGo wiki contribution guidelines]] before creating new content. Currently, there are quite a lot problems relating to e.g. page names, wiki links, deep hierarchies and obsolete pages in our wiki section.&lt;br /&gt;
&lt;br /&gt;
'''Documentation checklist'''&lt;br /&gt;
&lt;br /&gt;
The following table lists the tool-specific documentation that should exist (marked with 'x'). These should be checked frequently and more in depth in the future. Bugs will be filed for the missing or inaccurate documentation (marked as 'NOK' i.e. &amp;quot;Not OK&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|'''Tool''' ||'''Doxygen'''||'''Help''' ||'''Man pages''' || '''Wiki''' &lt;br /&gt;
|- &lt;br /&gt;
| test-definition || || || || x&amp;lt;br /&amp;gt;Checked: asinnela 2011-03-03 &lt;br /&gt;
|-&lt;br /&gt;
| testrunner-lite || x || x&amp;lt;br /&amp;gt;Checked: asinnela 2011-03-07 || x&amp;lt;br /&amp;gt;Checked: asinnela 2011-03-07, NOK&amp;lt;br /&amp;gt;[http://bugs.meego.com/show_bug.cgi?id=14074 Bug 14074] || x&amp;lt;br /&amp;gt;Checked: asinnela 2011-06-07&lt;br /&gt;
|-&lt;br /&gt;
| Testrunner || x || x&amp;lt;br /&amp;gt;Checked: asinnela 2011-03-07 ||  || x&amp;lt;br /&amp;gt;Checked: asinnela 2011-03-07 &lt;br /&gt;
|- &lt;br /&gt;
| Testplanner || x || x&amp;lt;br /&amp;gt;Checked: asinnela 2011-03-10 ||  || x&amp;lt;br /&amp;gt;Checked: asinnela 2011-03-07 &lt;br /&gt;
|-&lt;br /&gt;
| eat - enables automated testing || || || || x&amp;lt;br /&amp;gt;Checked: asinnela 2011-03-08 &lt;br /&gt;
|- &lt;br /&gt;
| OTS - Open Test System || x || x || x || x&amp;lt;br /&amp;gt;Checked: asinnela 2011-03-25&lt;br /&gt;
|-&lt;br /&gt;
| MIN test framework || x || x || x ||  &lt;br /&gt;
|-&lt;br /&gt;
| Scripts and utils || || || || x&amp;lt;br /&amp;gt;Checked: asinnela 2011-03-11 &lt;br /&gt;
|-&lt;br /&gt;
| MeeGo Fast Feedback Testing || x || x ||  || x&amp;lt;br /&amp;gt;Checked: asinnela 2011-03-11&lt;br /&gt;
|-&lt;br /&gt;
| Qpid C wrapper library - libcqpid || x || || || x&amp;lt;br /&amp;gt;Page created, content to be added. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Other documentation'''&lt;br /&gt;
&lt;br /&gt;
* [[Quality/QA-tools/Autotest-guide|Autotest-Guide]]&lt;br /&gt;
* [[Quality/QA-tools/How_to_set_up_repositories|How to set up the repositories that are needed to install QA tools]]&lt;br /&gt;
&lt;br /&gt;
== Meetings ==&lt;br /&gt;
&lt;br /&gt;
All meetings will be held in &amp;lt;code&amp;gt;#meego-meeting&amp;lt;/code&amp;gt; on &amp;lt;code&amp;gt;irc.freenode.net&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Team meetings&lt;br /&gt;
** QA-tools weekly meetings are held on every Tuesday 08:00 UTC in #meego-meeting2 on irc.freenode.net (please note the &amp;quot;2&amp;quot;) from May 3rd 2011 onwards.&lt;br /&gt;
** [[Quality/QA-tools/Meetings|Meeting agendas and minutes]]&lt;br /&gt;
&lt;br /&gt;
* Architecture meetings&lt;br /&gt;
** Architecture meetings will be held on-demand basis.&lt;br /&gt;
** [[Quality/QA-tools/Arch-Meetings|Meeting agendas and minutes]]&lt;br /&gt;
&lt;br /&gt;
* Workshops&lt;br /&gt;
** Face-2-face meetings within the team.&lt;br /&gt;
** [[Quality/QA-tools/Workshops|Meeting agendas and minutes]]&lt;br /&gt;
&lt;br /&gt;
== Collaboration spaces ==&lt;br /&gt;
&lt;br /&gt;
Team communication is in English. Our collaboration spaces are:&lt;br /&gt;
* [http://lists.meego.com/listinfo/meego-qa meego-qa@lists.meego.com mailing list]&lt;br /&gt;
* [http://lists.meego.com/listinfo/meego-dev meego-dev@meego.com mailing list], please prefix with 'QA-tools' for team related topics.&lt;br /&gt;
** Please also poke team members or Ville Ilvonen either by email or on IRC because of high traffic @ meego-dev&lt;br /&gt;
* [http://webchat.freenode.net/?channels=meego-qa #meego-qa IRC channel on irc.freenode.net]&lt;br /&gt;
** [http://timoph.fi/qa-tools-stats/ Old #meego-qa-tools statistics]&lt;br /&gt;
** [http://timoph.fi/qa-tools-logs-archive/ Archived #meego-qa-tools logs]&lt;br /&gt;
* Gitorious team, http://meego.gitorious.org/meego-quality-assurance/&lt;br /&gt;
* [http://www.youtube.com/user/meegoqatools Youtube channel for demo videos]&lt;br /&gt;
* [http://meegoqatools.wordpress.com/ QA-tools team blog]&lt;br /&gt;
* MeeGo OBS - devel:quality&lt;br /&gt;
* This wiki area&lt;br /&gt;
* [[Quality/QA-tools/ServiceOS|ServiceOS]]&lt;br /&gt;
* [[Quality/QA-tools/PXEInstall|PXEInstallation]]&lt;br /&gt;
&lt;br /&gt;
== Team members ==&lt;br /&gt;
&lt;br /&gt;
The current team members are (in no particular order):&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
| '''Name'''&lt;br /&gt;
| '''Role'''&lt;br /&gt;
| '''Affiliation'''&lt;br /&gt;
| '''IRC nickname'''&lt;br /&gt;
|- &lt;br /&gt;
| Riku Halonen || Team member || Nokia || rikhalon&lt;br /&gt;
|-&lt;br /&gt;
| Kari Sievi || Team member || Digia || sievi&lt;br /&gt;
|-&lt;br /&gt;
| Timo Härkönen || Team member || Digia || timoph  &lt;br /&gt;
|-&lt;br /&gt;
| Carol Rus || Team member || Digia || carrus  &lt;br /&gt;
|-&lt;br /&gt;
| Sami Lahtinen || Team member || Digia || slahtinen  &lt;br /&gt;
|-&lt;br /&gt;
| Raimo Gratseff || Team member || Digia || rrraimo  &lt;br /&gt;
|-&lt;br /&gt;
| Kyösti Ranto || Team member || Digia || kyranto&lt;br /&gt;
|-&lt;br /&gt;
| Joonas Kylänpää || Team member || Digia || Kaadlajk&lt;br /&gt;
|-&lt;br /&gt;
| Timo Mäkimattila || Team member || Digia || timakima&lt;br /&gt;
|-&lt;br /&gt;
| Elias Luttinen || Team member || Digia || eluttine&lt;br /&gt;
|-&lt;br /&gt;
| Ville Niutanen || Team member || Digia || Villen&lt;br /&gt;
|-&lt;br /&gt;
| Vesa Poikajärvi || Team member || Digia || vesse&lt;br /&gt;
|-  &lt;br /&gt;
| Alexey Kuznetsov || Team member || Digia || alkuznet&lt;br /&gt;
|-  &lt;br /&gt;
| Daniil Chuiko || Team member || Digia || dachuiko&lt;br /&gt;
|-&lt;br /&gt;
| Jarmo Savinen || Team member || Digia || jasavi&lt;br /&gt;
|-&lt;br /&gt;
| Sampo Saaristo || Team member || Sofica || sampos&lt;br /&gt;
|-  &lt;br /&gt;
| Ling Yu || Team member || Intel || -&lt;br /&gt;
|-&lt;br /&gt;
| Jing Wang || Team member || Intel || -&lt;br /&gt;
|-  &lt;br /&gt;
| Tuomo Mäkinen || Team member || Ixonos || -&lt;br /&gt;
|-  &lt;br /&gt;
| Jouni Leppäkases || Team member || Ixonos || jouni&lt;br /&gt;
|-&lt;br /&gt;
| Jarno Keskikangas || Team member || Leonidas || jakeskik&lt;br /&gt;
|- &lt;br /&gt;
| Janne Hietamäki || Team member || Leonidas || _janne&lt;br /&gt;
|- &lt;br /&gt;
| Sami Hangaslammi || Team member || Leonidas || sahangas&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Category:QA]]&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/Automation_of_L10n_testing</id>
		<title>Quality/QA-tools/Automation of L10n testing</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/Automation_of_L10n_testing"/>
				<updated>2011-05-13T13:12:28Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: Adding title&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Automation of L10n testing =&lt;br /&gt;
This page aims at giving more background and detail about the suggestion to automate all or part of Localization testing work.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What is Localization testing? ==&lt;br /&gt;
L10n testing implies 2 main areas of testing.&lt;br /&gt;
&lt;br /&gt;
=== Linguistic review ===&lt;br /&gt;
* Ensure translations are adapted to the target device (netbook, tablet, handset...) and audience, they are meaningful, culturally sensitive, and thus follow some defined style guidelines.&lt;br /&gt;
&lt;br /&gt;
When performing linguistic review from translated files, every translations are indeed reviewed but a poor or missing context puts this work at risk as some translations may seem correct out of the context, and not that suitable when in situation.&lt;br /&gt;
&lt;br /&gt;
When perform runtime testing, testers have a full context but one can hardly guaranty that every translation will be displayed, as scenarios leading to display certain error messages may be very difficult to reproduce.&lt;br /&gt;
&lt;br /&gt;
=== UI review ===&lt;br /&gt;
* Ensure the UI rendering is optimal in a locale, translations do not break any functionality, there are no truncations (text being too long to display correctly), no widgets overlapping (some UI frameworks have the ability to adapt their widgets’ size to the text they display) nor any other cosmetic issue.&lt;br /&gt;
&lt;br /&gt;
This work is relieved when applications were designed in the perspective of being localized (which is relevant to Internationalization/i18n). Translating from English is known to often increase text length and widgets should be organized in such a way that they favor a clean display.&lt;br /&gt;
&lt;br /&gt;
For both linguistic and UI review, a good knowledge of testing scenarios is required in order to perform runtime testing (miscellaneous configurations, testing data presets…).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Investigation ==&lt;br /&gt;
So far, we didn’t find any open-source tool to handle automatically all or part of L10n testing, but TDriver offers the ability to do rendering verification through screen captures.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[http://wiki.meego.com/Category:Localization Collection of wiki pages related to Localization]&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
[http://en.wikipedia.org/wiki/Internationalization_and_localization About internationalization/i18n and localization/L10n]&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/Automation_of_L10n_testing</id>
		<title>Quality/QA-tools/Automation of L10n testing</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/Automation_of_L10n_testing"/>
				<updated>2011-05-13T13:04:56Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: Created page with &amp;quot;This page aims at giving more background and detail about the suggestion to automate all or part of Localization testing work.   == What is Localization testing? == L10n testing ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page aims at giving more background and detail about the suggestion to automate all or part of Localization testing work.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What is Localization testing? ==&lt;br /&gt;
L10n testing implies 2 main areas of testing.&lt;br /&gt;
&lt;br /&gt;
=== Linguistic review ===&lt;br /&gt;
* Ensure translations are adapted to the target device (netbook, tablet, handset...) and audience, they are meaningful, culturally sensitive, and thus follow some defined style guidelines.&lt;br /&gt;
&lt;br /&gt;
When performing linguistic review from translated files, every translations are indeed reviewed but a poor or missing context puts this work at risk as some translations may seem correct out of the context, and not that suitable when in situation.&lt;br /&gt;
&lt;br /&gt;
When perform runtime testing, testers have a full context but one can hardly guaranty that every translation will be displayed, as scenarios leading to display certain error messages may be very difficult to reproduce.&lt;br /&gt;
&lt;br /&gt;
=== UI review ===&lt;br /&gt;
* Ensure the UI rendering is optimal in a locale, translations do not break any functionality, there are no truncations (text being too long to display correctly), no widgets overlapping (some UI frameworks have the ability to adapt their widgets’ size to the text they display) nor any other cosmetic issue.&lt;br /&gt;
&lt;br /&gt;
This work is relieved when applications were designed in the perspective of being localized (which is relevant to Internationalization/i18n). Translating from English is known to often increase text length and widgets should be organized in such a way that they favor a clean display.&lt;br /&gt;
&lt;br /&gt;
For both linguistic and UI review, a good knowledge of testing scenarios is required in order to perform runtime testing (miscellaneous configurations, testing data presets…).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Investigation ==&lt;br /&gt;
So far, we didn’t find any open-source tool to handle automatically all or part of L10n testing, but TDriver offers the ability to do rendering verification through screen captures.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[http://wiki.meego.com/Category:Localization Collection of wiki pages related to Localization]&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
[http://en.wikipedia.org/wiki/Internationalization_and_localization About internationalization/i18n and localization/L10n]&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools</id>
		<title>Quality/QA-tools</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools"/>
				<updated>2011-05-13T12:38:32Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: Link to more detail regarding my suggestion.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Quality assurance (QA) tools =&lt;br /&gt;
&lt;br /&gt;
''' We moved our discussion to #meego-qa IRC channel as of March 24th 2011. Please join us there. '''&lt;br /&gt;
&lt;br /&gt;
[[File:Tool_meegon.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Quality Assurance tools are developed to ensure MeeGo SW quality. QA tools team develops and maintains tools for quality assurance.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Open source tools  – available for all, available for development and contributions. Make people accountable for quality.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''Please note''' that developer-oriented content has been moved to [[Quality/QA tools development|QA tools development]] page. We apologize for any inconvenience. The target is to make this page clearer and more informative for the actual users of QA tools.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
QA tools support test planning, test execution and test reporting. The most important tool offering relating to this is illustrated in the figure below. In addition, there are also a couple of concept videos available at our [http://www.youtube.com/user/meegoqatools YouTube channel]:&lt;br /&gt;
* [http://www.youtube.com/watch?v=WdXBqGdLz8I Tool offering for manual testing]&lt;br /&gt;
* [http://youtu.be/Ry4MM-CX2b8 Test automation]&lt;br /&gt;
&lt;br /&gt;
[[File:Meego-qa-tools.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tools and other utilities ==&lt;br /&gt;
&lt;br /&gt;
If you want to contribute to the development of the following tools, test suites and utilities, please visit [[Quality/QA_tools_development|QA tools development page]].&lt;br /&gt;
&lt;br /&gt;
'''Test tools'''&lt;br /&gt;
&lt;br /&gt;
Each wiki page will contain more detailed description, installation instructions and tutorial on the basic usage. For now, please [[Quality/QA-tools#Collaboration spaces|contact us]] if you need help. Currently, you can install Testrunner, testrunner-lite, test-definition, Testplanner, OTS, Meego-ai, libcqpid, eat and MIN from Tools:Testing repository. The instructions for setting up the repositories can be found [[Quality/QA-tools/How_to_set_up_repositories|here]].&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|'''Tool (link to wiki page)''' ||'''Short description'''&lt;br /&gt;
|- &lt;br /&gt;
| Crash Reporter || On-device tool for sending core dumps to core dump data base&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/OTS|OTS - open testing system]] || Test automation system&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Testrunner-lite|testrunner-lite]] ||Command line tool for test execution&lt;br /&gt;
|- &lt;br /&gt;
| [[Quality/QA-tools/TDriver|Testability Driver]] || Comprehensive tool for UI testing&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/QAReports|QA Reports]] || Reporting tool for publishing test reports&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/CrashReports|Crash Reports Web UI]] || Web UI for Crash Reports&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/QADashboard|QA Dashboard]] || Quality at a glance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Other utilities'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|'''Name (link to wiki page)''' ||'''Short description'''&lt;br /&gt;
|- &lt;br /&gt;
|[[Quality/QA-tools/Test-definition|test-definition]]|| XML schema for test plan and result files&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Eat|eat - enables automated testing]] || Test automation configuration packages&lt;br /&gt;
|- &lt;br /&gt;
| [[Quality/QA-tools/Autotest-guide#Automatic_image_installations|MeeGo Automated installer]] ||&lt;br /&gt;
|-&lt;br /&gt;
| Rich Core dumper || &lt;br /&gt;
|-&lt;br /&gt;
| Crash Reporter settings || Settings package for Crash Reporter&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/hat-control|Hardware Accessory for Testing (HAT)]] || &lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Scripts_and_utils|Scripts and utils]] || &lt;br /&gt;
|-&lt;br /&gt;
| Service OS based Flasher || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Tools and utils not in active development'''&lt;br /&gt;
&lt;br /&gt;
Tools listed here are in maintenance and no new features are planned to be implemented in the near future to them.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|'''Tool (link to wiki page)''' ||'''Short description'''&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Testrunner|Testrunner]] || Test execution tool with graphical UI&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Testplanner|Testplanner]] || Simple tool for creating and editing test plan files&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/MeeGo_Fast_Feedback_Testing|MeeGo Fast Feedback Testing (MeeGo-FFT)]] || &lt;br /&gt;
|-&lt;br /&gt;
| [http://min.sf.net/ MIN Test Framework] || Advanced test framework&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/qtuitest-mbt-adapter|Model-Based Testing adapter for qtuitest]]  ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Qpid C wrapper|Qpid C wrapper library - libcqpid]] ||   &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Feature requests and bugs ==&lt;br /&gt;
&lt;br /&gt;
Want to report an feature idea or bug to us? - [http://bugs.meego.com/enter_bug.cgi?product=MeeGo%20Quality%20Assurance Please do it here]&lt;br /&gt;
 &lt;br /&gt;
* [http://bugs.meego.com/buglist.cgi?query_format=advanced&amp;amp;order=Importance&amp;amp;bug_status=ASSIGNED&amp;amp;component=eat&amp;amp;component=Fast%20Feedback%20Testing&amp;amp;component=hat&amp;amp;component=libcqpid&amp;amp;component=meego-qa-reports&amp;amp;component=min&amp;amp;component=ots&amp;amp;component=TDriver&amp;amp;component=testdefinition&amp;amp;component=Testplanner&amp;amp;component=Testrunner&amp;amp;component=testrunner-lite&amp;amp;component=Others&amp;amp;classification=MeeGo%20Projects&amp;amp;product=MeeGo%20Quality%20Assurance Assigned bugs and features - Working on it]&lt;br /&gt;
* [http://bugs.meego.com/buglist.cgi?query_format=advanced&amp;amp;order=Importance&amp;amp;bug_status=NEW&amp;amp;bug_status=NEEDINFO&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING%20FOR%20UPSTREAM&amp;amp;bug_status=REOPENED&amp;amp;bug_status=RESOLVED&amp;amp;component=eat&amp;amp;component=Fast%20Feedback%20Testing&amp;amp;component=hat&amp;amp;component=libcqpid&amp;amp;component=meego-qa-reports&amp;amp;component=min&amp;amp;component=ots&amp;amp;component=TDriver&amp;amp;component=testdefinition&amp;amp;component=Testplanner&amp;amp;component=Testrunner&amp;amp;component=testrunner-lite&amp;amp;component=Others&amp;amp;classification=MeeGo%20Projects&amp;amp;product=MeeGo%20Quality%20Assurance All open features and bugs in priority order]&lt;br /&gt;
&lt;br /&gt;
Bugzilla instructions:&lt;br /&gt;
* [[Quality/How To Report Bugs|How to report bugs]]&lt;br /&gt;
* [[Quality/Bug Life Cycle and Handling|Bugzilla workflow]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Collaboration spaces ==&lt;br /&gt;
&lt;br /&gt;
Team communication is in English. Our collaboration spaces are:&lt;br /&gt;
* [http://lists.meego.com/listinfo/meego-qa meego-qa@lists.meego.com mailing list]&lt;br /&gt;
* [http://webchat.freenode.net/?channels=meego-qa #meego-qa IRC channel on irc.freenode.net]&lt;br /&gt;
* [http://www.youtube.com/user/meegoqatools YouTube channel for demo videos]&lt;br /&gt;
* [http://meegoqatools.wordpress.com/ QA-tools team blog]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nice to have ==&lt;br /&gt;
&lt;br /&gt;
None of the existing tools answer your needs? Here is where you should enter any suggestion.&lt;br /&gt;
&lt;br /&gt;
* Relieve localization testing effort by automating all or part of it ([[Quality/QA-tools/Automation of L10n testing|Detail]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
[[Category:QA]]&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools</id>
		<title>Quality/QA-tools</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools"/>
				<updated>2011-05-11T10:47:40Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Quality assurance (QA) tools =&lt;br /&gt;
&lt;br /&gt;
''' We moved our discussion to #meego-qa IRC channel as of March 24th 2011. Please join us there. '''&lt;br /&gt;
&lt;br /&gt;
[[File:Tool_meegon.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Quality Assurance tools are developed to ensure MeeGo SW quality. QA tools team develops and maintains tools for quality assurance.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Open source tools  – available for all, available for development and contributions. Make people accountable for quality.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''Please note''' that developer-oriented content has been moved to [[Quality/QA tools development|QA tools development]] page. We apologize for any inconvenience. The target is to make this page clearer and more informative for the actual users of QA tools.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
QA tools support test planning, test execution and test reporting. The most important tool offering relating to this is illustrated in the figure below. In addition, there are also a couple of concept videos available at our [http://www.youtube.com/user/meegoqatools YouTube channel]:&lt;br /&gt;
* [http://www.youtube.com/watch?v=WdXBqGdLz8I Tool offering for manual testing]&lt;br /&gt;
* [http://youtu.be/Ry4MM-CX2b8 Test automation]&lt;br /&gt;
&lt;br /&gt;
[[File:Meego-qa-tools.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tools, test suites and other utilities ==&lt;br /&gt;
&lt;br /&gt;
If you want to contribute to the development of the following tools, test suites and utilities, please visit [[Quality/QA_tools_development|QA tools development page]].&lt;br /&gt;
&lt;br /&gt;
'''Test tools'''&lt;br /&gt;
&lt;br /&gt;
Each wiki page will contain more detailed description, installation instructions and tutorial on the basic usage. For now, please [[Quality/QA-tools#Collaboration spaces|contact us]] if you need help. Currently, you can install Testrunner, testrunner-lite, test-definition, Testplanner, OTS, Meego-ai, libcqpid, eat and MIN from Tools:Testing repository. The instructions for setting up the repositories can be found [[Quality/QA-tools/How_to_set_up_repositories|here]].&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|'''Tool (link to wiki page)''' ||'''Short description'''&lt;br /&gt;
|- &lt;br /&gt;
| Crash Reporter || On-device tool for sending core dumps to core dump data base&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/OTS|OTS - open testing system]] || Test automation system&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Testrunner-lite|testrunner-lite]] ||Command line tool for test execution&lt;br /&gt;
|- &lt;br /&gt;
| [[Quality/QA-tools/TDriver|Testability Driver]] || Comprehensive tool for UI testing&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/QAReports|QA Reports]] || Reporting tool for publishing test reports&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/CrashReports|Crash Reports]] || Reporting tool for automatic crash reports&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/QADashboard|QA Dashboard]] || Quality at a glance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Other utilities'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|'''Name (link to wiki page)''' ||'''Short description'''&lt;br /&gt;
|- &lt;br /&gt;
|[[Quality/QA-tools/Test-definition|test-definition]]|| XML schema for test plan and result files&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Eat|eat - enables automated testing]] || Test automation configuration packages&lt;br /&gt;
|- &lt;br /&gt;
| [[Quality/QA-tools/Autotest-guide#Automatic_image_installations|MeeGo Automated installer]] ||&lt;br /&gt;
|-&lt;br /&gt;
| Rich Core dumper || &lt;br /&gt;
|-&lt;br /&gt;
| Crash Reporter settings || Settings package for Crash Reporter&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/hat-control|Hardware Accessory for Testing (HAT)]] || &lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Scripts_and_utils|Scripts and utils]] || &lt;br /&gt;
|-&lt;br /&gt;
| Service OS based Flasher || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Tools and utils not in active development'''&lt;br /&gt;
&lt;br /&gt;
Tools listed here are in maintenance and no new features are planned to be implemented in the near future to them.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|'''Tool (link to wiki page)''' ||'''Short description'''&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Testrunner|Testrunner]] || Test execution tool with graphical UI&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Testplanner|Testplanner]] || Simple tool for creating and editing test plan files&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/MeeGo_Fast_Feedback_Testing|MeeGo Fast Feedback Testing (MeeGo-FFT)]] || &lt;br /&gt;
|-&lt;br /&gt;
| [http://min.sf.net/ MIN Test Framework] || Advanced test framework&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/qtuitest-mbt-adapter|Model-Based Testing adapter for qtuitest]]  ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Qpid C wrapper|Qpid C wrapper library - libcqpid]] ||   &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Feature requests and bugs ==&lt;br /&gt;
&lt;br /&gt;
Want to report an feature idea or bug to us? - [http://bugs.meego.com/enter_bug.cgi?product=MeeGo%20Quality%20Assurance Please do it here]&lt;br /&gt;
 &lt;br /&gt;
* [http://bugs.meego.com/buglist.cgi?query_format=advanced&amp;amp;order=Importance&amp;amp;bug_status=ASSIGNED&amp;amp;component=eat&amp;amp;component=Fast%20Feedback%20Testing&amp;amp;component=hat&amp;amp;component=libcqpid&amp;amp;component=meego-qa-reports&amp;amp;component=min&amp;amp;component=ots&amp;amp;component=TDriver&amp;amp;component=testdefinition&amp;amp;component=Testplanner&amp;amp;component=Testrunner&amp;amp;component=testrunner-lite&amp;amp;component=Others&amp;amp;classification=MeeGo%20Projects&amp;amp;product=MeeGo%20Quality%20Assurance Assigned bugs and features - Working on it]&lt;br /&gt;
* [http://bugs.meego.com/buglist.cgi?query_format=advanced&amp;amp;order=Importance&amp;amp;bug_status=NEW&amp;amp;bug_status=NEEDINFO&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING%20FOR%20UPSTREAM&amp;amp;bug_status=REOPENED&amp;amp;bug_status=RESOLVED&amp;amp;component=eat&amp;amp;component=Fast%20Feedback%20Testing&amp;amp;component=hat&amp;amp;component=libcqpid&amp;amp;component=meego-qa-reports&amp;amp;component=min&amp;amp;component=ots&amp;amp;component=TDriver&amp;amp;component=testdefinition&amp;amp;component=Testplanner&amp;amp;component=Testrunner&amp;amp;component=testrunner-lite&amp;amp;component=Others&amp;amp;classification=MeeGo%20Projects&amp;amp;product=MeeGo%20Quality%20Assurance All open features and bugs in priority order]&lt;br /&gt;
&lt;br /&gt;
Bugzilla instructions:&lt;br /&gt;
* [[Quality/How To Report Bugs|How to report bugs]]&lt;br /&gt;
* [[Quality/Bug Life Cycle and Handling|Bugzilla workflow]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Collaboration spaces ==&lt;br /&gt;
&lt;br /&gt;
Team communication is in English. Our collaboration spaces are:&lt;br /&gt;
* [http://lists.meego.com/listinfo/meego-qa meego-qa@lists.meego.com mailing list]&lt;br /&gt;
* [http://webchat.freenode.net/?channels=meego-qa #meego-qa IRC channel on irc.freenode.net]&lt;br /&gt;
* [http://www.youtube.com/user/meegoqatools YouTube channel for demo videos]&lt;br /&gt;
* [http://meegoqatools.wordpress.com/ QA-tools team blog]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nice to have ==&lt;br /&gt;
&lt;br /&gt;
None of the existing tools answer your needs? Here is where you should enter any suggestion.&lt;br /&gt;
&lt;br /&gt;
* Relieve localization testing effort by automating all or part of it (suggested by: helia_co, detail to be added). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
[[Category:QA]]&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools</id>
		<title>Quality/QA-tools</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools"/>
				<updated>2011-05-11T10:44:27Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Quality assurance (QA) tools =&lt;br /&gt;
&lt;br /&gt;
''' We moved our discussion to #meego-qa IRC channel as of March 24th 2011. Please join us there. '''&lt;br /&gt;
&lt;br /&gt;
[[File:Tool_meegon.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Quality Assurance tools are developed to ensure MeeGo SW quality. QA tools team develops and maintains tools for quality assurance.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Open source tools  – available for all, available for development and contributions. Make people accountable for quality.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''Please note''' that developer-oriented content has been moved to [[Quality/QA tools development|QA tools development]] page. We apologize for any inconvenience. The target is to make this page clearer and more informative for the actual users of QA tools.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
QA tools support test planning, test execution and test reporting. The most important tool offering relating to this is illustrated in the figure below. In addition, there are also a couple of concept videos available at our [http://www.youtube.com/user/meegoqatools YouTube channel]:&lt;br /&gt;
* [http://www.youtube.com/watch?v=WdXBqGdLz8I Tool offering for manual testing]&lt;br /&gt;
* [http://youtu.be/Ry4MM-CX2b8 Test automation]&lt;br /&gt;
&lt;br /&gt;
[[File:Meego-qa-tools.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tools, test suites and other utilities ==&lt;br /&gt;
&lt;br /&gt;
If you want to contribute to the development of the following tools, test suites and utilities, please visit [[Quality/QA_tools_development|QA tools development page]].&lt;br /&gt;
&lt;br /&gt;
'''Test tools'''&lt;br /&gt;
&lt;br /&gt;
Each wiki page will contain more detailed description, installation instructions and tutorial on the basic usage. For now, please [[Quality/QA-tools#Collaboration spaces|contact us]] if you need help. Currently, you can install Testrunner, testrunner-lite, test-definition, Testplanner, OTS, Meego-ai, libcqpid, eat and MIN from Tools:Testing repository. The instructions for setting up the repositories can be found [[Quality/QA-tools/How_to_set_up_repositories|here]].&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|'''Tool (link to wiki page)''' ||'''Short description'''&lt;br /&gt;
|- &lt;br /&gt;
| Crash Reporter || On-device tool for sending core dumps to core dump data base&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/OTS|OTS - open testing system]] || Test automation system&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Testrunner-lite|testrunner-lite]] ||Command line tool for test execution&lt;br /&gt;
|- &lt;br /&gt;
| [[Quality/QA-tools/TDriver|Testability Driver]] || Comprehensive tool for UI testing&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/QAReports|QA Reports]] || Reporting tool for publishing test reports&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/CrashReports|Crash Reports]] || Reporting tool for automatic crash reports&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/QADashboard|QA Dashboard]] || Quality at a glance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Other utilities'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|'''Name (link to wiki page)''' ||'''Short description'''&lt;br /&gt;
|- &lt;br /&gt;
|[[Quality/QA-tools/Test-definition|test-definition]]|| XML schema for test plan and result files&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Eat|eat - enables automated testing]] || Test automation configuration packages&lt;br /&gt;
|- &lt;br /&gt;
| [[Quality/QA-tools/Autotest-guide#Automatic_image_installations|MeeGo Automated installer]] ||&lt;br /&gt;
|-&lt;br /&gt;
| Rich Core dumper || &lt;br /&gt;
|-&lt;br /&gt;
| Crash Reporter settings || Settings package for Crash Reporter&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/hat-control|Hardware Accessory for Testing (HAT)]] || &lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Scripts_and_utils|Scripts and utils]] || &lt;br /&gt;
|-&lt;br /&gt;
| Service OS based Flasher || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Tools and utils not in active development'''&lt;br /&gt;
&lt;br /&gt;
Tools listed here are in maintenance and no new features are planned to be implemented in the near future to them.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|'''Tool (link to wiki page)''' ||'''Short description'''&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Testrunner|Testrunner]] || Test execution tool with graphical UI&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Testplanner|Testplanner]] || Simple tool for creating and editing test plan files&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/MeeGo_Fast_Feedback_Testing|MeeGo Fast Feedback Testing (MeeGo-FFT)]] || &lt;br /&gt;
|-&lt;br /&gt;
| [http://min.sf.net/ MIN Test Framework] || Advanced test framework&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/qtuitest-mbt-adapter|Model-Based Testing adapter for qtuitest]]  ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Qpid C wrapper|Qpid C wrapper library - libcqpid]] ||   &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Feature requests and bugs ==&lt;br /&gt;
&lt;br /&gt;
Want to report an feature idea or bug to us? - [http://bugs.meego.com/enter_bug.cgi?product=MeeGo%20Quality%20Assurance Please do it here]&lt;br /&gt;
 &lt;br /&gt;
* [http://bugs.meego.com/buglist.cgi?query_format=advanced&amp;amp;order=Importance&amp;amp;bug_status=ASSIGNED&amp;amp;component=eat&amp;amp;component=Fast%20Feedback%20Testing&amp;amp;component=hat&amp;amp;component=libcqpid&amp;amp;component=meego-qa-reports&amp;amp;component=min&amp;amp;component=ots&amp;amp;component=TDriver&amp;amp;component=testdefinition&amp;amp;component=Testplanner&amp;amp;component=Testrunner&amp;amp;component=testrunner-lite&amp;amp;component=Others&amp;amp;classification=MeeGo%20Projects&amp;amp;product=MeeGo%20Quality%20Assurance Assigned bugs and features - Working on it]&lt;br /&gt;
* [http://bugs.meego.com/buglist.cgi?query_format=advanced&amp;amp;order=Importance&amp;amp;bug_status=NEW&amp;amp;bug_status=NEEDINFO&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING%20FOR%20UPSTREAM&amp;amp;bug_status=REOPENED&amp;amp;bug_status=RESOLVED&amp;amp;component=eat&amp;amp;component=Fast%20Feedback%20Testing&amp;amp;component=hat&amp;amp;component=libcqpid&amp;amp;component=meego-qa-reports&amp;amp;component=min&amp;amp;component=ots&amp;amp;component=TDriver&amp;amp;component=testdefinition&amp;amp;component=Testplanner&amp;amp;component=Testrunner&amp;amp;component=testrunner-lite&amp;amp;component=Others&amp;amp;classification=MeeGo%20Projects&amp;amp;product=MeeGo%20Quality%20Assurance All open features and bugs in priority order]&lt;br /&gt;
&lt;br /&gt;
Bugzilla instructions:&lt;br /&gt;
* [[Quality/How To Report Bugs|How to report bugs]]&lt;br /&gt;
* [[Quality/Bug Life Cycle and Handling|Bugzilla workflow]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Collaboration spaces ==&lt;br /&gt;
&lt;br /&gt;
Team communication is in English. Our collaboration spaces are:&lt;br /&gt;
* [http://lists.meego.com/listinfo/meego-qa meego-qa@lists.meego.com mailing list]&lt;br /&gt;
* [http://webchat.freenode.net/?channels=meego-qa #meego-qa IRC channel on irc.freenode.net]&lt;br /&gt;
* [http://www.youtube.com/user/meegoqatools YouTube channel for demo videos]&lt;br /&gt;
* [http://meegoqatools.wordpress.com/ QA-tools team blog]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nice to have ==&lt;br /&gt;
&lt;br /&gt;
None of the existing tools answer your needs? Here is where you should enter any suggestion.&lt;br /&gt;
&lt;br /&gt;
* Relieve localization testing effort by automating all or part of it (suggested by: helia_co, detail to be added). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:QA]]&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools</id>
		<title>Quality/QA-tools</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools"/>
				<updated>2011-05-11T10:43:27Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: Added a &amp;quot;Nice to have&amp;quot; section in order to list QA tools currently missing (agreed during IRC QA tools weekly meeting of May-10-2011)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Quality assurance (QA) tools =&lt;br /&gt;
&lt;br /&gt;
''' We moved our discussion to #meego-qa IRC channel as of March 24th 2011. Please join us there. '''&lt;br /&gt;
&lt;br /&gt;
[[File:Tool_meegon.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Quality Assurance tools are developed to ensure MeeGo SW quality. QA tools team develops and maintains tools for quality assurance.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Open source tools  – available for all, available for development and contributions. Make people accountable for quality.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''Please note''' that developer-oriented content has been moved to [[Quality/QA tools development|QA tools development]] page. We apologize for any inconvenience. The target is to make this page clearer and more informative for the actual users of QA tools.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
QA tools support test planning, test execution and test reporting. The most important tool offering relating to this is illustrated in the figure below. In addition, there are also a couple of concept videos available at our [http://www.youtube.com/user/meegoqatools YouTube channel]:&lt;br /&gt;
* [http://www.youtube.com/watch?v=WdXBqGdLz8I Tool offering for manual testing]&lt;br /&gt;
* [http://youtu.be/Ry4MM-CX2b8 Test automation]&lt;br /&gt;
&lt;br /&gt;
[[File:Meego-qa-tools.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Tools, test suites and other utilities ==&lt;br /&gt;
&lt;br /&gt;
If you want to contribute to the development of the following tools, test suites and utilities, please visit [[Quality/QA_tools_development|QA tools development page]].&lt;br /&gt;
&lt;br /&gt;
'''Test tools'''&lt;br /&gt;
&lt;br /&gt;
Each wiki page will contain more detailed description, installation instructions and tutorial on the basic usage. For now, please [[Quality/QA-tools#Collaboration spaces|contact us]] if you need help. Currently, you can install Testrunner, testrunner-lite, test-definition, Testplanner, OTS, Meego-ai, libcqpid, eat and MIN from Tools:Testing repository. The instructions for setting up the repositories can be found [[Quality/QA-tools/How_to_set_up_repositories|here]].&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|'''Tool (link to wiki page)''' ||'''Short description'''&lt;br /&gt;
|- &lt;br /&gt;
| Crash Reporter || On-device tool for sending core dumps to core dump data base&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/OTS|OTS - open testing system]] || Test automation system&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Testrunner-lite|testrunner-lite]] ||Command line tool for test execution&lt;br /&gt;
|- &lt;br /&gt;
| [[Quality/QA-tools/TDriver|Testability Driver]] || Comprehensive tool for UI testing&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/QAReports|QA Reports]] || Reporting tool for publishing test reports&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/CrashReports|Crash Reports]] || Reporting tool for automatic crash reports&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/QADashboard|QA Dashboard]] || Quality at a glance&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Other utilities'''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|'''Name (link to wiki page)''' ||'''Short description'''&lt;br /&gt;
|- &lt;br /&gt;
|[[Quality/QA-tools/Test-definition|test-definition]]|| XML schema for test plan and result files&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Eat|eat - enables automated testing]] || Test automation configuration packages&lt;br /&gt;
|- &lt;br /&gt;
| [[Quality/QA-tools/Autotest-guide#Automatic_image_installations|MeeGo Automated installer]] ||&lt;br /&gt;
|-&lt;br /&gt;
| Rich Core dumper || &lt;br /&gt;
|-&lt;br /&gt;
| Crash Reporter settings || Settings package for Crash Reporter&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/hat-control|Hardware Accessory for Testing (HAT)]] || &lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Scripts_and_utils|Scripts and utils]] || &lt;br /&gt;
|-&lt;br /&gt;
| Service OS based Flasher || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Tools and utils not in active development'''&lt;br /&gt;
&lt;br /&gt;
Tools listed here are in maintenance and no new features are planned to be implemented in the near future to them.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|'''Tool (link to wiki page)''' ||'''Short description'''&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Testrunner|Testrunner]] || Test execution tool with graphical UI&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Testplanner|Testplanner]] || Simple tool for creating and editing test plan files&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/MeeGo_Fast_Feedback_Testing|MeeGo Fast Feedback Testing (MeeGo-FFT)]] || &lt;br /&gt;
|-&lt;br /&gt;
| [http://min.sf.net/ MIN Test Framework] || Advanced test framework&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/qtuitest-mbt-adapter|Model-Based Testing adapter for qtuitest]]  ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Quality/QA-tools/Qpid C wrapper|Qpid C wrapper library - libcqpid]] ||   &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Feature requests and bugs ==&lt;br /&gt;
&lt;br /&gt;
Want to report an feature idea or bug to us? - [http://bugs.meego.com/enter_bug.cgi?product=MeeGo%20Quality%20Assurance Please do it here]&lt;br /&gt;
 &lt;br /&gt;
* [http://bugs.meego.com/buglist.cgi?query_format=advanced&amp;amp;order=Importance&amp;amp;bug_status=ASSIGNED&amp;amp;component=eat&amp;amp;component=Fast%20Feedback%20Testing&amp;amp;component=hat&amp;amp;component=libcqpid&amp;amp;component=meego-qa-reports&amp;amp;component=min&amp;amp;component=ots&amp;amp;component=TDriver&amp;amp;component=testdefinition&amp;amp;component=Testplanner&amp;amp;component=Testrunner&amp;amp;component=testrunner-lite&amp;amp;component=Others&amp;amp;classification=MeeGo%20Projects&amp;amp;product=MeeGo%20Quality%20Assurance Assigned bugs and features - Working on it]&lt;br /&gt;
* [http://bugs.meego.com/buglist.cgi?query_format=advanced&amp;amp;order=Importance&amp;amp;bug_status=NEW&amp;amp;bug_status=NEEDINFO&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=WAITING%20FOR%20UPSTREAM&amp;amp;bug_status=REOPENED&amp;amp;bug_status=RESOLVED&amp;amp;component=eat&amp;amp;component=Fast%20Feedback%20Testing&amp;amp;component=hat&amp;amp;component=libcqpid&amp;amp;component=meego-qa-reports&amp;amp;component=min&amp;amp;component=ots&amp;amp;component=TDriver&amp;amp;component=testdefinition&amp;amp;component=Testplanner&amp;amp;component=Testrunner&amp;amp;component=testrunner-lite&amp;amp;component=Others&amp;amp;classification=MeeGo%20Projects&amp;amp;product=MeeGo%20Quality%20Assurance All open features and bugs in priority order]&lt;br /&gt;
&lt;br /&gt;
Bugzilla instructions:&lt;br /&gt;
* [[Quality/How To Report Bugs|How to report bugs]]&lt;br /&gt;
* [[Quality/Bug Life Cycle and Handling|Bugzilla workflow]]&lt;br /&gt;
&lt;br /&gt;
== Collaboration spaces ==&lt;br /&gt;
&lt;br /&gt;
Team communication is in English. Our collaboration spaces are:&lt;br /&gt;
* [http://lists.meego.com/listinfo/meego-qa meego-qa@lists.meego.com mailing list]&lt;br /&gt;
* [http://webchat.freenode.net/?channels=meego-qa #meego-qa IRC channel on irc.freenode.net]&lt;br /&gt;
* [http://www.youtube.com/user/meegoqatools YouTube channel for demo videos]&lt;br /&gt;
* [http://meegoqatools.wordpress.com/ QA-tools team blog]&lt;br /&gt;
&lt;br /&gt;
== Nice to have ==&lt;br /&gt;
&lt;br /&gt;
None of the existing tools answer your needs? Here is where you should enter any suggestion.&lt;br /&gt;
&lt;br /&gt;
* Relieve localization testing effort by automating all or part of it (suggested by: helia_co, detail to be added). &lt;br /&gt;
&lt;br /&gt;
[[Category:QA]]&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started</id>
		<title>Quality/QA-tools/TDriver/Getting Started</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started"/>
				<updated>2011-05-09T12:16:15Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: Removing redundant information (&amp;quot;driver&amp;quot; and &amp;quot;sut_qt&amp;quot; are installed following steps of &amp;quot;Other platforms&amp;quot; section)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Testability Driver Getting Started Guide =&lt;br /&gt;
&lt;br /&gt;
This page describes the installation of the Testability Driver (TDriver) on your host machine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installing required packages from repositories ==&lt;br /&gt;
&lt;br /&gt;
We provide repositories for Fedora 13 and Ubuntu 10.04/10.10, and more will be added as soon as it's possible from OBS. For other platforms and versions you will need to compile the Qt components from source. &lt;br /&gt;
&lt;br /&gt;
First wee need to enable the Testing:Tools repository. See the [[Quality/QA-tools/How_to_set_up_repositories|How to set up repositories for QA-tools]] guide.&lt;br /&gt;
&lt;br /&gt;
For Ubuntu:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install qttas testability-driver-host visualizer # This can take several minutes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fedora:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install qttas testability-driver-host testability-driver-visualizer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start a new shell and you should have all the required environmental parameters set.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Other platforms == &lt;br /&gt;
&lt;br /&gt;
TDriver components can be installed on most Qt and Ruby supported platforms. The ruby components can be found from rubygems.org. You will need the following packages, or their equivalents installed:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rubygems ruby1.8-dev libxslt-dev libxml2-dev &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then install the gems:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo gem install testability-driver testability-driver-qt-sut-plugin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Building Qt components ===&lt;br /&gt;
&lt;br /&gt;
Build requirements for ubuntu 10.04:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libqt4-dev x11proto-xext-dev libxtst-dev &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Build requirements for Ubuntu 10.10:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libqt4-dev x11proto-xext-dev libxtst-dev libqtwebkit-dev &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Build requirements for Fedora:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo yum install libxtst-devel libqtwebkit-devel qt4-qmake gcc-c++ libqt4-devel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Getting Qt source-code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone git://gitorious.org/qt/qt.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then the installation procedure depends on our platform. Full detail is available at the following link &amp;lt;nowiki&amp;gt;http://doc.qt.nokia.com/&amp;lt;Qt_version&amp;gt;/installation.html&amp;lt;/nowiki&amp;gt;, in which we replace &amp;lt;Qt_version&amp;gt; by our git cloned Qt version (i.e. 4.7).&lt;br /&gt;
&lt;br /&gt;
=== Compilation === &lt;br /&gt;
&lt;br /&gt;
Compile and install qttas-server:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone http://git.gitorious.org/tdriver/agent_qt.git # Note that this is our development master. See the list of available tags if you want to checkout a released version.&lt;br /&gt;
cd agent_qt &lt;br /&gt;
qmake -r CONFIG+=no_mobility &lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualizer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone http://git.gitorious.org/tdriver/visualizer.git&lt;br /&gt;
cd visualizer&lt;br /&gt;
qmake -r &lt;br /&gt;
make &lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing the installation == &lt;br /&gt;
&lt;br /&gt;
Everything should now be installed. We need an application to test it with, so let's get one. Let's use a classic calculator application that is used in TDriver tests.&lt;br /&gt;
&lt;br /&gt;
Let's get it from git and compile it.&lt;br /&gt;
Build requirements for Ubuntu:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install git-core qt4-qmake qt4-dev-tools build-essential&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fedora:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo yum install git qt4-qmake gcc-c++&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compile and install:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone http://git.gitorious.org/tdriver/tests.git&lt;br /&gt;
cd tests/calculator&lt;br /&gt;
qmake # in Fedora qmake command is qmake-qt4&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we are ready to start the qttas-server and the calculator:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qttasserver &amp;amp;&lt;br /&gt;
calculator -testability &amp;amp;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see a simple calculator application. Next, let's start the visualizer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tdriver_visualizer &amp;amp; # If you compiled visualizer from source, it will be under /opt/tdriver_visualizer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the visualizer, select File-&amp;gt;Refresh. You should see a picture of the calculator application. If you hover your mouse above the picture, the visualizer will highlight the object that is currently under the cursor. &lt;br /&gt;
&lt;br /&gt;
[[File:Visualizer.png|800px|Visualizer window (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
Right click on an element, for example &amp;quot;1&amp;quot; button, and select &amp;quot;send tap to SUT&amp;quot;. The calculator should receive a click to the &amp;quot;1&amp;quot; button. If so, congratulations you have a working TDriver environment!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running Automated Tests == &lt;br /&gt;
&lt;br /&gt;
We are ready to run an automated test. We will need [[http://cukes.info Cucumber]], so let's install it:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo gem install cucumber # This will take a few minutes and require gherkin-2.3.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We still need to edit the tdriver parameters. Add the following line to &amp;lt;tt&amp;gt;/etc/tdriver/tdriver_parameters.xml&amp;lt;/tt&amp;gt; inside&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;parameters&amp;gt;&amp;lt;/tt&amp;gt; tag:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;parameter name=&amp;quot;default_sut&amp;quot; value=&amp;quot;sut_qt&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We can use the tests repository we got the calculator from as an example. From there, we will run one test:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# cd &amp;lt;wherever you cloned the tdriver/tests repository&amp;gt;&lt;br /&gt;
cd test/&lt;br /&gt;
cucumber features/qt_widget_tap.feature:8 # Run one scenario from one feature&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Something like this should be displayed on the console:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tests/test$ cucumber features/qt_widget_tap.feature:8&lt;br /&gt;
@qt_linux @qt_windows @qt_symbian @qt_meego&lt;br /&gt;
Feature: MobyBehaviour::QT::Widget#tap&lt;br /&gt;
  As a test script writer&lt;br /&gt;
  I want to use tap method to simulate user tapping or clicking an object,&lt;br /&gt;
  so that I can test the MobyBehaviour::QT::Widget behaviour&lt;br /&gt;
&lt;br /&gt;
  Scenario: Tap a QWidget button                           # features/qt_widget_tap.feature:8&lt;br /&gt;
    Given I launch application &amp;quot;calculator&amp;quot;                # features/step_definitions/feature_common.rb:65&lt;br /&gt;
    When I execute &amp;quot;@app.Button(:name =&amp;gt; 'oneButton').tap&amp;quot; # features/step_definitions/feature_common.rb:165&lt;br /&gt;
    Then The calculator display says &amp;quot;1&amp;quot;                   # features/step_definitions/feature_common.rb:235&lt;br /&gt;
&lt;br /&gt;
1 scenario (1 passed)&lt;br /&gt;
3 steps (3 passed)&lt;br /&gt;
0m1.598s&lt;br /&gt;
~/tests/test$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Everything should be up and running now. You are ready for test development!&lt;br /&gt;
&lt;br /&gt;
=== Testing Your Application === &lt;br /&gt;
&lt;br /&gt;
If your application is a Meegotouch application, the qttas plugin will be loaded automatically. If it is a standard Qt application, pass &amp;quot;-testability&amp;quot; as a command line parameter.&lt;br /&gt;
&lt;br /&gt;
=== Connecting to your MeeGo device === &lt;br /&gt;
&lt;br /&gt;
Note: If you used the &amp;quot;testability-driver-host&amp;quot; package to install TDriver, the ip address is set automatically to the &amp;quot;sut_qt_maemo&amp;quot; device.&lt;br /&gt;
&lt;br /&gt;
You need a working network connection to the device. For the N900, see the [[ARM/N900/Tips and Tricks/N900 USB Networking|N900 Networkig Guide]]. TDriver works over TCP/IP, so any device in the network can be tested.&lt;br /&gt;
&lt;br /&gt;
As an example, connection to the N900 we add the N900 ip address into /etc/tdriver/tdriver_parameters.xml:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;sut id=&amp;quot;sut_qt&amp;quot; template=&amp;quot;qt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;parameter name=&amp;quot;qttas_server_ip&amp;quot; value=&amp;quot;192.168.2.15&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;!-- other parameters.... --&amp;gt;&lt;br /&gt;
&amp;lt;/sut&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On the device, make sure the package &amp;quot;qttas-server&amp;quot; is installed and &amp;quot;qttasserver&amp;quot; is running as user. If you just installed the package, you will need to restart the applications to make them load the qttas plugin. On the N900, the qttasserver should start automatically and all supported applications should be available.&lt;br /&gt;
&lt;br /&gt;
If you refresh the visualizer, you should see the application content that is running on the N900. Note - If you edit the configuration file, the visualizer must be restarted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What's Next ==&lt;br /&gt;
&lt;br /&gt;
=== TODO === &lt;br /&gt;
&lt;br /&gt;
* Making your application load the testability plug-in&lt;br /&gt;
* Making your application testable&lt;br /&gt;
&lt;br /&gt;
=== Links === &lt;br /&gt;
&lt;br /&gt;
* [http://doc.qt.nokia.com/ Qt Online Reference Documentation]&lt;br /&gt;
* [https://projects.forum.nokia.com/Testabilitydriver/wiki/ TDriver wiki]&lt;br /&gt;
* [https://projects.forum.nokia.com/dav/Testabilitydriver/doc/api/qt_linux/ API Documentation]&lt;br /&gt;
* [http://gitorious.org/tdriver/ Gitorious project]&lt;br /&gt;
* [http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation Tutorial for test creation]&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started</id>
		<title>Quality/QA-tools/TDriver/Getting Started</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started"/>
				<updated>2011-05-05T15:41:41Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Testability Driver Getting Started Guide =&lt;br /&gt;
&lt;br /&gt;
This page describes the installation of the Testability Driver (TDriver) on your host machine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installing required packages from repositories ==&lt;br /&gt;
&lt;br /&gt;
We provide repositories for Fedora 13 and Ubuntu 10.04/10.10, and more will be added as soon as it's possible from OBS. For other platforms and versions you will need to compile the Qt components from source. &lt;br /&gt;
&lt;br /&gt;
First wee need to enable the Testing:Tools repository. See the [[Quality/QA-tools/How_to_set_up_repositories|How to set up repositories for QA-tools]] guide.&lt;br /&gt;
&lt;br /&gt;
For Ubuntu:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install qttas testability-driver-host visualizer # This can take several minutes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fedora:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install qttas testability-driver-host testability-driver-visualizer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start a new shell and you should have all the required environmental parameters set.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Other platforms == &lt;br /&gt;
&lt;br /&gt;
TDriver components can be installed on most Qt and Ruby supported platforms. The ruby components can be found from rubygems.org. You will need the following packages, or their equivalents installed:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rubygems ruby1.8-dev libxslt-dev libxml2-dev &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then install the gems:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo gem install testability-driver testability-driver-qt-sut-plugin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Building Qt components ===&lt;br /&gt;
&lt;br /&gt;
Build requirements for ubuntu 10.04:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libqt4-dev x11proto-xext-dev libxtst-dev &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Build requirements for Ubuntu 10.10:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libqt4-dev x11proto-xext-dev libxtst-dev libqtwebkit-dev &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Build requirements for Fedora:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo yum install libxtst-devel libqtwebkit-devel qt4-qmake gcc-c++ libqt4-devel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Getting Qt source-code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone git://gitorious.org/qt/qt.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then the installation procedure depends on our platform. Full detail is available at the following link &amp;lt;nowiki&amp;gt;http://doc.qt.nokia.com/&amp;lt;Qt_version&amp;gt;/installation.html&amp;lt;/nowiki&amp;gt;, in which we replace &amp;lt;Qt_version&amp;gt; by our git cloned Qt version (i.e. 4.7).&lt;br /&gt;
&lt;br /&gt;
=== Compilation === &lt;br /&gt;
&lt;br /&gt;
Compile and install qttas-server:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone http://git.gitorious.org/tdriver/agent_qt.git # Note that this is our development master. See the list of available tags if you want to checkout a released version.&lt;br /&gt;
cd agent_qt &lt;br /&gt;
qmake -r CONFIG+=no_mobility &lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualizer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone http://git.gitorious.org/tdriver/visualizer.git&lt;br /&gt;
cd visualizer&lt;br /&gt;
qmake -r &lt;br /&gt;
make &lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Driver:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone http://git.gitorious.org/tdriver/driver.git&lt;br /&gt;
cd driver&lt;br /&gt;
sudo ./update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sut_qt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone http://git.gitorious.org/tdriver/sut_qt.git&lt;br /&gt;
cd sut_qt&lt;br /&gt;
sudo ./update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Installing Driver and Sut_qt requires to also have Rake build program installed into our platform (we can do with &amp;quot;sudo apt-get install rake&amp;quot; from Ubuntu or &amp;quot;yum install rake&amp;quot; from Fedora).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing the installation == &lt;br /&gt;
&lt;br /&gt;
Everything should now be installed. We need an application to test it with, so let's get one. Let's use a classic calculator application that is used in TDriver tests.&lt;br /&gt;
&lt;br /&gt;
Let's get it from git and compile it.&lt;br /&gt;
Build requirements for Ubuntu:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install git-core qt4-qmake qt4-dev-tools build-essential&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fedora:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo yum install git qt4-qmake gcc-c++&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compile and install:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone http://git.gitorious.org/tdriver/tests.git&lt;br /&gt;
cd tests/calculator&lt;br /&gt;
qmake # in Fedora qmake command is qmake-qt4&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we are ready to start the qttas-server and the calculator:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qttasserver &amp;amp;&lt;br /&gt;
calculator -testability &amp;amp;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see a simple calculator application. Next, let's start the visualizer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tdriver_visualizer &amp;amp; # If you compiled visualizer from source, it will be under /opt/tdriver_visualizer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the visualizer, select File-&amp;gt;Refresh. You should see a picture of the calculator application. If you hover your mouse above the picture, the visualizer will highlight the object that is currently under the cursor. &lt;br /&gt;
&lt;br /&gt;
[[File:Visualizer.png|800px|Visualizer window (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
Right click on an element, for example &amp;quot;1&amp;quot; button, and select &amp;quot;send tap to SUT&amp;quot;. The calculator should receive a click to the &amp;quot;1&amp;quot; button. If so, congratulations you have a working TDriver environment!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running Automated Tests == &lt;br /&gt;
&lt;br /&gt;
We are ready to run an automated test. We will need [[http://cukes.info Cucumber]], so let's install it:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo gem install cucumber # This will take a few minutes and require gherkin-2.3.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We still need to edit the tdriver parameters. Add the following line to &amp;lt;tt&amp;gt;/etc/tdriver/tdriver_parameters.xml&amp;lt;/tt&amp;gt; inside&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;parameters&amp;gt;&amp;lt;/tt&amp;gt; tag:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;parameter name=&amp;quot;default_sut&amp;quot; value=&amp;quot;sut_qt&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We can use the tests repository we got the calculator from as an example. From there, we will run one test:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# cd &amp;lt;wherever you cloned the tdriver/tests repository&amp;gt;&lt;br /&gt;
cd test/&lt;br /&gt;
cucumber features/qt_widget_tap.feature:8 # Run one scenario from one feature&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Something like this should be displayed on the console:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tests/test$ cucumber features/qt_widget_tap.feature:8&lt;br /&gt;
@qt_linux @qt_windows @qt_symbian @qt_meego&lt;br /&gt;
Feature: MobyBehaviour::QT::Widget#tap&lt;br /&gt;
  As a test script writer&lt;br /&gt;
  I want to use tap method to simulate user tapping or clicking an object,&lt;br /&gt;
  so that I can test the MobyBehaviour::QT::Widget behaviour&lt;br /&gt;
&lt;br /&gt;
  Scenario: Tap a QWidget button                           # features/qt_widget_tap.feature:8&lt;br /&gt;
    Given I launch application &amp;quot;calculator&amp;quot;                # features/step_definitions/feature_common.rb:65&lt;br /&gt;
    When I execute &amp;quot;@app.Button(:name =&amp;gt; 'oneButton').tap&amp;quot; # features/step_definitions/feature_common.rb:165&lt;br /&gt;
    Then The calculator display says &amp;quot;1&amp;quot;                   # features/step_definitions/feature_common.rb:235&lt;br /&gt;
&lt;br /&gt;
1 scenario (1 passed)&lt;br /&gt;
3 steps (3 passed)&lt;br /&gt;
0m1.598s&lt;br /&gt;
~/tests/test$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Everything should be up and running now. You are ready for test development!&lt;br /&gt;
&lt;br /&gt;
=== Testing Your Application === &lt;br /&gt;
&lt;br /&gt;
If your application is a Meegotouch application, the qttas plugin will be loaded automatically. If it is a standard Qt application, pass &amp;quot;-testability&amp;quot; as a command line parameter.&lt;br /&gt;
&lt;br /&gt;
=== Connecting to your MeeGo device === &lt;br /&gt;
&lt;br /&gt;
Note: If you used the &amp;quot;testability-driver-host&amp;quot; package to install TDriver, the ip address is set automatically to the &amp;quot;sut_qt_maemo&amp;quot; device.&lt;br /&gt;
&lt;br /&gt;
You need a working network connection to the device. For the N900, see the [[ARM/N900/Tips and Tricks/N900 USB Networking|N900 Networkig Guide]]. TDriver works over TCP/IP, so any device in the network can be tested.&lt;br /&gt;
&lt;br /&gt;
As an example, connection to the N900 we add the N900 ip address into /etc/tdriver/tdriver_parameters.xml:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;sut id=&amp;quot;sut_qt&amp;quot; template=&amp;quot;qt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;parameter name=&amp;quot;qttas_server_ip&amp;quot; value=&amp;quot;192.168.2.15&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;!-- other parameters.... --&amp;gt;&lt;br /&gt;
&amp;lt;/sut&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On the device, make sure the package &amp;quot;qttas-server&amp;quot; is installed and &amp;quot;qttasserver&amp;quot; is running as user. If you just installed the package, you will need to restart the applications to make them load the qttas plugin. On the N900, the qttasserver should start automatically and all supported applications should be available.&lt;br /&gt;
&lt;br /&gt;
If you refresh the visualizer, you should see the application content that is running on the N900. Note - If you edit the configuration file, the visualizer must be restarted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What's Next ==&lt;br /&gt;
&lt;br /&gt;
=== TODO === &lt;br /&gt;
&lt;br /&gt;
* Making your application load the testability plug-in&lt;br /&gt;
* Making your application testable&lt;br /&gt;
&lt;br /&gt;
=== Links === &lt;br /&gt;
&lt;br /&gt;
* [http://doc.qt.nokia.com/ Qt Online Reference Documentation]&lt;br /&gt;
* [https://projects.forum.nokia.com/Testabilitydriver/wiki/ TDriver wiki]&lt;br /&gt;
* [https://projects.forum.nokia.com/dav/Testabilitydriver/doc/api/qt_linux/ API Documentation]&lt;br /&gt;
* [http://gitorious.org/tdriver/ Gitorious project]&lt;br /&gt;
* [http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation Tutorial for test creation]&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started</id>
		<title>Quality/QA-tools/TDriver/Getting Started</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started"/>
				<updated>2011-05-05T15:40:33Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: Adding a few infos for things to be more obvious.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Testability Driver Getting Started Guide =&lt;br /&gt;
&lt;br /&gt;
This page describes the installation of the Testability Driver (TDriver) on your host machine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installing required packages from repositories ==&lt;br /&gt;
&lt;br /&gt;
We provide repositories for Fedora 13 and Ubuntu 10.04/10.10, and more will be added as soon as it's possible from OBS. For other platforms and versions you will need to compile the Qt components from source. &lt;br /&gt;
&lt;br /&gt;
First wee need to enable the Testing:Tools repository. See the [[Quality/QA-tools/How_to_set_up_repositories|How to set up repositories for QA-tools]] guide.&lt;br /&gt;
&lt;br /&gt;
For Ubuntu:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install qttas testability-driver-host visualizer # This can take several minutes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fedora:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install qttas testability-driver-host testability-driver-visualizer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start a new shell and you should have all the required environmental parameters set.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Other platforms == &lt;br /&gt;
&lt;br /&gt;
TDriver components can be installed on most Qt and Ruby supported platforms. The ruby components can be found from rubygems.org. You will need the following packages, or their equivalents installed:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rubygems ruby1.8-dev libxslt-dev libxml2-dev &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then install the gems:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo gem install testability-driver testability-driver-qt-sut-plugin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Building Qt components ===&lt;br /&gt;
&lt;br /&gt;
Build requirements for ubuntu 10.04:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libqt4-dev x11proto-xext-dev libxtst-dev &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Build requirements for Ubuntu 10.10:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libqt4-dev x11proto-xext-dev libxtst-dev libqtwebkit-dev &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Build requirements for Fedora:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo yum install libxtst-devel libqtwebkit-devel qt4-qmake gcc-c++ libqt4-devel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Getting Qt source-code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone git://gitorious.org/qt/qt.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then the installation procedure depends on our platform. Full detail is available at the following link [http://doc.qt.nokia.com/&amp;lt;Qt_version&amp;gt;/installation.html], in which we replace &amp;lt;Qt_version&amp;gt; by our git cloned Qt version (i.e. 4.7).&lt;br /&gt;
&lt;br /&gt;
=== Compilation === &lt;br /&gt;
&lt;br /&gt;
Compile and install qttas-server:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone http://git.gitorious.org/tdriver/agent_qt.git # Note that this is our development master. See the list of available tags if you want to checkout a released version.&lt;br /&gt;
cd agent_qt &lt;br /&gt;
qmake -r CONFIG+=no_mobility &lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualizer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone http://git.gitorious.org/tdriver/visualizer.git&lt;br /&gt;
cd visualizer&lt;br /&gt;
qmake -r &lt;br /&gt;
make &lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Driver:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone http://git.gitorious.org/tdriver/driver.git&lt;br /&gt;
cd driver&lt;br /&gt;
sudo ./update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sut_qt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone http://git.gitorious.org/tdriver/sut_qt.git&lt;br /&gt;
cd sut_qt&lt;br /&gt;
sudo ./update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Installing Driver and Sut_qt requires to also have Rake build program installed into our platform (we can do with &amp;quot;sudo apt-get install rake&amp;quot; from Ubuntu or &amp;quot;yum install rake&amp;quot; from Fedora).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing the installation == &lt;br /&gt;
&lt;br /&gt;
Everything should now be installed. We need an application to test it with, so let's get one. Let's use a classic calculator application that is used in TDriver tests.&lt;br /&gt;
&lt;br /&gt;
Let's get it from git and compile it.&lt;br /&gt;
Build requirements for Ubuntu:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install git-core qt4-qmake qt4-dev-tools build-essential&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fedora:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo yum install git qt4-qmake gcc-c++&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compile and install:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone http://git.gitorious.org/tdriver/tests.git&lt;br /&gt;
cd tests/calculator&lt;br /&gt;
qmake # in Fedora qmake command is qmake-qt4&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we are ready to start the qttas-server and the calculator:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qttasserver &amp;amp;&lt;br /&gt;
calculator -testability &amp;amp;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see a simple calculator application. Next, let's start the visualizer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tdriver_visualizer &amp;amp; # If you compiled visualizer from source, it will be under /opt/tdriver_visualizer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the visualizer, select File-&amp;gt;Refresh. You should see a picture of the calculator application. If you hover your mouse above the picture, the visualizer will highlight the object that is currently under the cursor. &lt;br /&gt;
&lt;br /&gt;
[[File:Visualizer.png|800px|Visualizer window (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
Right click on an element, for example &amp;quot;1&amp;quot; button, and select &amp;quot;send tap to SUT&amp;quot;. The calculator should receive a click to the &amp;quot;1&amp;quot; button. If so, congratulations you have a working TDriver environment!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running Automated Tests == &lt;br /&gt;
&lt;br /&gt;
We are ready to run an automated test. We will need [[http://cukes.info Cucumber]], so let's install it:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo gem install cucumber # This will take a few minutes and require gherkin-2.3.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We still need to edit the tdriver parameters. Add the following line to &amp;lt;tt&amp;gt;/etc/tdriver/tdriver_parameters.xml&amp;lt;/tt&amp;gt; inside&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;parameters&amp;gt;&amp;lt;/tt&amp;gt; tag:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;parameter name=&amp;quot;default_sut&amp;quot; value=&amp;quot;sut_qt&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We can use the tests repository we got the calculator from as an example. From there, we will run one test:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# cd &amp;lt;wherever you cloned the tdriver/tests repository&amp;gt;&lt;br /&gt;
cd test/&lt;br /&gt;
cucumber features/qt_widget_tap.feature:8 # Run one scenario from one feature&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Something like this should be displayed on the console:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tests/test$ cucumber features/qt_widget_tap.feature:8&lt;br /&gt;
@qt_linux @qt_windows @qt_symbian @qt_meego&lt;br /&gt;
Feature: MobyBehaviour::QT::Widget#tap&lt;br /&gt;
  As a test script writer&lt;br /&gt;
  I want to use tap method to simulate user tapping or clicking an object,&lt;br /&gt;
  so that I can test the MobyBehaviour::QT::Widget behaviour&lt;br /&gt;
&lt;br /&gt;
  Scenario: Tap a QWidget button                           # features/qt_widget_tap.feature:8&lt;br /&gt;
    Given I launch application &amp;quot;calculator&amp;quot;                # features/step_definitions/feature_common.rb:65&lt;br /&gt;
    When I execute &amp;quot;@app.Button(:name =&amp;gt; 'oneButton').tap&amp;quot; # features/step_definitions/feature_common.rb:165&lt;br /&gt;
    Then The calculator display says &amp;quot;1&amp;quot;                   # features/step_definitions/feature_common.rb:235&lt;br /&gt;
&lt;br /&gt;
1 scenario (1 passed)&lt;br /&gt;
3 steps (3 passed)&lt;br /&gt;
0m1.598s&lt;br /&gt;
~/tests/test$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Everything should be up and running now. You are ready for test development!&lt;br /&gt;
&lt;br /&gt;
=== Testing Your Application === &lt;br /&gt;
&lt;br /&gt;
If your application is a Meegotouch application, the qttas plugin will be loaded automatically. If it is a standard Qt application, pass &amp;quot;-testability&amp;quot; as a command line parameter.&lt;br /&gt;
&lt;br /&gt;
=== Connecting to your MeeGo device === &lt;br /&gt;
&lt;br /&gt;
Note: If you used the &amp;quot;testability-driver-host&amp;quot; package to install TDriver, the ip address is set automatically to the &amp;quot;sut_qt_maemo&amp;quot; device.&lt;br /&gt;
&lt;br /&gt;
You need a working network connection to the device. For the N900, see the [[ARM/N900/Tips and Tricks/N900 USB Networking|N900 Networkig Guide]]. TDriver works over TCP/IP, so any device in the network can be tested.&lt;br /&gt;
&lt;br /&gt;
As an example, connection to the N900 we add the N900 ip address into /etc/tdriver/tdriver_parameters.xml:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;sut id=&amp;quot;sut_qt&amp;quot; template=&amp;quot;qt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;parameter name=&amp;quot;qttas_server_ip&amp;quot; value=&amp;quot;192.168.2.15&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;!-- other parameters.... --&amp;gt;&lt;br /&gt;
&amp;lt;/sut&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On the device, make sure the package &amp;quot;qttas-server&amp;quot; is installed and &amp;quot;qttasserver&amp;quot; is running as user. If you just installed the package, you will need to restart the applications to make them load the qttas plugin. On the N900, the qttasserver should start automatically and all supported applications should be available.&lt;br /&gt;
&lt;br /&gt;
If you refresh the visualizer, you should see the application content that is running on the N900. Note - If you edit the configuration file, the visualizer must be restarted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What's Next ==&lt;br /&gt;
&lt;br /&gt;
=== TODO === &lt;br /&gt;
&lt;br /&gt;
* Making your application load the testability plug-in&lt;br /&gt;
* Making your application testable&lt;br /&gt;
&lt;br /&gt;
=== Links === &lt;br /&gt;
&lt;br /&gt;
* [http://doc.qt.nokia.com/ Qt Online Reference Documentation]&lt;br /&gt;
* [https://projects.forum.nokia.com/Testabilitydriver/wiki/ TDriver wiki]&lt;br /&gt;
* [https://projects.forum.nokia.com/dav/Testabilitydriver/doc/api/qt_linux/ API Documentation]&lt;br /&gt;
* [http://gitorious.org/tdriver/ Gitorious project]&lt;br /&gt;
* [http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation Tutorial for test creation]&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started</id>
		<title>Quality/QA-tools/TDriver/Getting Started</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started"/>
				<updated>2011-05-05T15:34:23Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Testability Driver Getting Started Guide =&lt;br /&gt;
&lt;br /&gt;
This page describes the installation of the Testability Driver (TDriver) on your host machine.&lt;br /&gt;
&lt;br /&gt;
== Installing required packages from repositories ==&lt;br /&gt;
&lt;br /&gt;
We provide repositories for Fedora 13 and Ubuntu 10.04/10.10, and more will be added as soon as it's possible from OBS. For other platforms and versions you will need to compile the Qt components from source. &lt;br /&gt;
&lt;br /&gt;
First wee need to enable the Testing:Tools repository. See the [[Quality/QA-tools/How_to_set_up_repositories|How to set up repositories for QA-tools]] guide.&lt;br /&gt;
&lt;br /&gt;
For Ubuntu:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install qttas testability-driver-host visualizer # This can take several minutes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fedora:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install qttas testability-driver-host testability-driver-visualizer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start a new shell and you should have all the required environmental parameters set.&lt;br /&gt;
&lt;br /&gt;
== Other platforms == &lt;br /&gt;
&lt;br /&gt;
TDriver components can be installed on most Qt and Ruby supported platforms. The ruby components can be found from rubygems.org. You will need the following packages, or their equivalents installed:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rubygems ruby1.8-dev libxslt-dev libxml2-dev &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then install the gems:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo gem install testability-driver testability-driver-qt-sut-plugin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Building Qt components ===&lt;br /&gt;
&lt;br /&gt;
Build requirements for ubuntu 10.04:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libqt4-dev x11proto-xext-dev libxtst-dev &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Build requirements for Ubuntu 10.10:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libqt4-dev x11proto-xext-dev libxtst-dev libqtwebkit-dev &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Build requirements for Fedora:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo yum install libxtst-devel libqtwebkit-devel qt4-qmake gcc-c++ libqt4-devel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Getting Qt source-code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone git://gitorious.org/qt/qt.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then the installation procedure depends on our platform. Full detail is available at the following link http://doc.qt.nokia.com/&amp;lt;Qt_version&amp;gt;/installation.html, in which we replace &amp;lt;Qt_version&amp;gt; by our git cloned Qt version (i.e. 4.7).&lt;br /&gt;
&lt;br /&gt;
=== Compilation === &lt;br /&gt;
&lt;br /&gt;
Compile and install qttas-server:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone http://git.gitorious.org/tdriver/agent_qt.git # Note that this is our development master. See the list of available tags if you want to checkout a released version.&lt;br /&gt;
cd agent_qt &lt;br /&gt;
qmake -r CONFIG+=no_mobility &lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualizer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone http://git.gitorious.org/tdriver/visualizer.git&lt;br /&gt;
cd visualizer&lt;br /&gt;
qmake -r &lt;br /&gt;
make &lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Driver:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone http://git.gitorious.org/tdriver/driver.git&lt;br /&gt;
cd driver&lt;br /&gt;
sudo ./update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sut_qt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone http://git.gitorious.org/tdriver/sut_qt.git&lt;br /&gt;
cd sut_qt&lt;br /&gt;
sudo ./update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Installing Driver and Sut_qt requires to also have Rake build program installed into our platform (we can do with &amp;quot;sudo apt-get install rake&amp;quot; from Ubuntu or &amp;quot;yum install rake&amp;quot; from Fedora).&lt;br /&gt;
&lt;br /&gt;
== Testing the installation == &lt;br /&gt;
&lt;br /&gt;
Everything should now be installed. We need an application to test it with, so let's get one. Let's use a classic calculator application that is used in TDriver tests.&lt;br /&gt;
&lt;br /&gt;
Let's get it from git and compile it.&lt;br /&gt;
Build requirements for Ubuntu:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install git-core qt4-qmake qt4-dev-tools build-essential&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fedora:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo yum install git qt4-qmake gcc-c++&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compile and install:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone http://git.gitorious.org/tdriver/tests.git&lt;br /&gt;
cd tests/calculator&lt;br /&gt;
qmake # in Fedora qmake command is qmake-qt4&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we are ready to start the qttas-server and the calculator:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qttasserver &amp;amp;&lt;br /&gt;
calculator -testability &amp;amp;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see a simple calculator application. Next, let's start the visualizer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tdriver_visualizer &amp;amp; # If you compiled visualizer from source, it will be under /opt/tdriver_visualizer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the visualizer, select File-&amp;gt;Refresh. You should see a picture of the calculator application. If you hover your mouse above the picture, the visualizer will highlight the object that is currently under the cursor. &lt;br /&gt;
&lt;br /&gt;
[[File:Visualizer.png|800px|Visualizer window (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
Right click on an element, for example &amp;quot;1&amp;quot; button, and select &amp;quot;send tap to SUT&amp;quot;. The calculator should receive a click to the &amp;quot;1&amp;quot; button. If so, congratulations you have a working TDriver environment!&lt;br /&gt;
&lt;br /&gt;
== Running Automated Tests == &lt;br /&gt;
&lt;br /&gt;
We are ready to run an automated test. We will need [[http://cukes.info Cucumber]], so let's install it:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo gem install cucumber # This will take a few minutes and require gherkin-2.3.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We still need to edit the tdriver parameters. Add the following line to &amp;lt;tt&amp;gt;/etc/tdriver/tdriver_parameters.xml&amp;lt;/tt&amp;gt; inside&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;parameters&amp;gt;&amp;lt;/tt&amp;gt; tag:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;parameter name=&amp;quot;default_sut&amp;quot; value=&amp;quot;sut_qt&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We can use the tests repository we got the calculator from as an example. From there, we will run one test:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# cd &amp;lt;wherever you cloned the tdriver/tests repository&amp;gt;&lt;br /&gt;
cd test/&lt;br /&gt;
cucumber features/qt_widget_tap.feature:8 # Run one scenario from one feature&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Something like this should be displayed on the console:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tests/test$ cucumber features/qt_widget_tap.feature:8&lt;br /&gt;
@qt_linux @qt_windows @qt_symbian @qt_meego&lt;br /&gt;
Feature: MobyBehaviour::QT::Widget#tap&lt;br /&gt;
  As a test script writer&lt;br /&gt;
  I want to use tap method to simulate user tapping or clicking an object,&lt;br /&gt;
  so that I can test the MobyBehaviour::QT::Widget behaviour&lt;br /&gt;
&lt;br /&gt;
  Scenario: Tap a QWidget button                           # features/qt_widget_tap.feature:8&lt;br /&gt;
    Given I launch application &amp;quot;calculator&amp;quot;                # features/step_definitions/feature_common.rb:65&lt;br /&gt;
    When I execute &amp;quot;@app.Button(:name =&amp;gt; 'oneButton').tap&amp;quot; # features/step_definitions/feature_common.rb:165&lt;br /&gt;
    Then The calculator display says &amp;quot;1&amp;quot;                   # features/step_definitions/feature_common.rb:235&lt;br /&gt;
&lt;br /&gt;
1 scenario (1 passed)&lt;br /&gt;
3 steps (3 passed)&lt;br /&gt;
0m1.598s&lt;br /&gt;
~/tests/test$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Everything should be up and running now. You are ready for test development!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Testing Your Application === &lt;br /&gt;
&lt;br /&gt;
If your application is a Meegotouch application, the qttas plugin will be loaded automatically. If it is a standard Qt application, pass &amp;quot;-testability&amp;quot; as a command line parameter.&lt;br /&gt;
&lt;br /&gt;
=== Connecting to your MeeGo device === &lt;br /&gt;
&lt;br /&gt;
Note: If you used the &amp;quot;testability-driver-host&amp;quot; package to install TDriver, the ip address is set automatically to the &amp;quot;sut_qt_maemo&amp;quot; device.&lt;br /&gt;
&lt;br /&gt;
You need a working network connection to the device. For the N900, see the [[ARM/N900/Tips and Tricks/N900 USB Networking|N900 Networkig Guide]]. TDriver works over TCP/IP, so any device in the network can be tested.&lt;br /&gt;
&lt;br /&gt;
As an example, connection to the N900 we add the N900 ip address into /etc/tdriver/tdriver_parameters.xml:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;sut id=&amp;quot;sut_qt&amp;quot; template=&amp;quot;qt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;parameter name=&amp;quot;qttas_server_ip&amp;quot; value=&amp;quot;192.168.2.15&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;!-- other parameters.... --&amp;gt;&lt;br /&gt;
&amp;lt;/sut&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On the device, make sure the package &amp;quot;qttas-server&amp;quot; is installed and &amp;quot;qttasserver&amp;quot; is running as user. If you just installed the package, you will need to restart the applications to make them load the qttas plugin. On the N900, the qttasserver should start automatically and all supported applications should be available.&lt;br /&gt;
&lt;br /&gt;
If you refresh the visualizer, you should see the application content that is running on the N900. Note - If you edit the configuration file, the visualizer must be restarted.&lt;br /&gt;
&lt;br /&gt;
== What's Next ==&lt;br /&gt;
&lt;br /&gt;
=== TODO === &lt;br /&gt;
&lt;br /&gt;
* Making your application load the testability plug-in&lt;br /&gt;
* Making your application testable&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Links === &lt;br /&gt;
&lt;br /&gt;
* [http://doc.qt.nokia.com/ Qt Online Reference Documentation]&lt;br /&gt;
* [https://projects.forum.nokia.com/Testabilitydriver/wiki/ TDriver wiki]&lt;br /&gt;
* [https://projects.forum.nokia.com/dav/Testabilitydriver/doc/api/qt_linux/ API Documentation]&lt;br /&gt;
* [http://gitorious.org/tdriver/ Gitorious project]&lt;br /&gt;
* [http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation Tutorial for test creation]&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation</id>
		<title>Quality/QA-tools/TDriver/Getting Started/Tutorial for test creation</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation"/>
				<updated>2011-04-29T14:48:04Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: OK, think I'm done :)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Testability Driver - Tutorial for test creation =&lt;br /&gt;
This page describes how to automate a simple test.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pre-requisites ==&lt;br /&gt;
TDriver and tests/calculator applications are installed.&lt;br /&gt;
&lt;br /&gt;
In file /etc/tdriver/tdriver_parameters.xml , “sut_id” section is empty like below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;sut id=&amp;quot;sut_qt&amp;quot; template=&amp;quot;qt&amp;quot;&amp;gt; &lt;br /&gt;
	&amp;lt;!-- use default values --&amp;gt; &lt;br /&gt;
&amp;lt;/sut&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For guidance, see http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We should ensure everything is ready for further actions by launching qttasserver, TDriver and calculator applications:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qttasserver &amp;amp;&lt;br /&gt;
tdriver_visualizer &amp;amp;&lt;br /&gt;
calculator -testability&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then clicking TDriver's “File &amp;gt; Refresh” menu item should lead to get the same view as below:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_0.png|800px|Visualizer's default view (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Get a copy of Ruby script template ==&lt;br /&gt;
We get a copy of the template ruby script available under /etc/tdriver/visualizer to your /home/$USER folder for instance, renaming it as my_script.rb:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp /etc/tdriver/visualizer/plain_tdriver.rb.template /home/$USER/my_script.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And update the file's execution attributes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod ugo+x /home/$USER/my_script.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open Ruby script in TDriver ==&lt;br /&gt;
From Tdriver, we click “View &amp;gt; Docks and toolbars &amp;gt; Code Editor” menu item.&lt;br /&gt;
Code Editor window appears at the bottom of TDriver, we click “File &amp;gt; Open...” menu item and browse to select my_script.rb, we should get the same view as below:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_1.png|800px|Ruby script into Code Editor (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Contents of Ruby script template ==&lt;br /&gt;
Now let's have a closer look at the script contents:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_2.png|800px|Template Ruby script (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
The first two lines mention:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require 'tdriver'&lt;br /&gt;
include TDriverVerify&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
“require” method loads the mentioned file whereas “include” method embeds the specified module into the current module (it can be used to enhance a class). More detail can be found [http://www.tutorialspoint.com/ruby/ruby_modules.htm here], [http://stackoverflow.com/questions/318144/what-is-the-difference-between-include-and-require-in-ruby here] or [http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/ae718697e28e2568?pli=1 here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following lines are preceeded by commented lines beginning with # character that help understanding their purpose, and we can see that the structure of a Ruby script basically consists of:&lt;br /&gt;
* Defining the SUT (system under test) TDriver should interact with&lt;br /&gt;
* Defining the application to run and test&lt;br /&gt;
* Defining the tests to be performed within the application&lt;br /&gt;
* Finally closing the application&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Writing a test using TDriver's graphical interface ==&lt;br /&gt;
So let's say we want to automate a test that clicks calculator's numbered buttons only, and takes a screenshot of the whole application after each click.&lt;br /&gt;
&lt;br /&gt;
First thing to do is update the application name, by completing existing line like below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@app = @sut.run( :name =&amp;gt; &amp;quot;calculator&amp;quot;, :arguments =&amp;gt; &amp;quot;-testability&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then from Code Editor (bottom of TDriver), we place the cursor after the &amp;quot;# Add your interaction and verify code here...&amp;quot; like below:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_3.png|800px|Writing a test from TDriver UI - 1 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
From Image View (right part of TDriver), we drag the mouse over “9” button for instance. A red line displays arount it, and “sut” item unfolds to display selected button:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_4.png|800px|Writing a test from TDriver UI - 2 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We right-click and from the contextual menu, we select “Insert into editor” item:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_5.png|800px|Writing a test from TDriver UI - 3 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following line is added to the script, as shown below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@app.Button( :name =&amp;gt; 'nineButton' )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_6.png|800px|Writing a test from TDriver UI - 4 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we need to append the method corresponding to a button click. From Properties (left part of TDriver), we select “Methods” tab, and browse its contents. To get more detail about an item, we simply drag the mouse over it:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_7.png|800px|Writing a test from TDriver UI - 5 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
“Tap” method seems to answer our needs, so here again we right-click the desired method and select “Insert to editor”:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_8.png|800px|Writing a test from TDriver UI - 6 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tap method will be appended to our button line:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_9.png|800px|Writing a test from TDriver UI - 7 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now let's save our script and test it so far:&lt;br /&gt;
* We don't forget to close calculator as our script will launch and stop it itself.&lt;br /&gt;
* From Code Editor, we click “File &amp;gt; Save” menu item.&lt;br /&gt;
* Then we click “Run &amp;gt; Run with Ruby” menu item.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Through this first test, we could quickly see that calculator opened, 9 number displayed in the editor, then the application closed. A new window called Script Console opened along with calculator, it displays traces resulting from our script's execution:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_10.png|800px|Writing a test from TDriver UI - 8 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now to complete the test, we will take a snapshot of the application. From the center part of TDriver, we select “Application Calculator” line, then we browse Methods tab to find the appropriate method to use, that is &amp;quot;capture_screen&amp;quot;. Finally, we write below line into Code Editor:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@app.capture_screen(&amp;quot;PNG&amp;quot;, &amp;quot;./calc_snapshot.png&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The method's arguments are the snapshot's format (i.e. “PNG”), and its path and name.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Seems we are done?! Let's give our script another try and check the snapshot's display.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Well, despite the Script Console not showing any error, instead of displaying number 9 the snapshot may show 0. As a result, this “issue” has more to see with asynchronicity than with a bug since what we observe here is that we kind of took the snapshot too early, and the edit had no time to refresh its display. So before taking the snapshot, we should take some time to verify our input, adding below line right after the call to button 9's tap method:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
verify(12, &amp;quot;The taped number should display&amp;quot;) {@app.QLineEdit( :&amp;quot;displayText&amp;quot; =&amp;gt; @app.Button( :name =&amp;gt; 'nineButton' ).attribute(&amp;quot;text&amp;quot;))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_11.png|800px|Writing a test from TDriver UI - 9 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We set a timeout (12 seconds) during which the edit's display value is compared with the text value of taped button. If both values correspond, script continues and snapshot is taken. But if values don't match before timeout expires, then script is halted and exits with code 1, and this information is reported into Script Console. 12 seconds is an arbitrary delay and we assume it is enough for the edit to show up correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Improving a test based on TDriver's features and Ruby syntax ==&lt;br /&gt;
In order to test every numbered button, we could duplicate the lines we have and just update the buttons and snapshots' name. Or we could take advantage of the functionalities offered by TDriver as well as by Ruby scripting language, and in order to prepare to write a program a bit more abstract, we can try to answer some questions like:&lt;br /&gt;
* Is there a way to list every buttons at once?&lt;br /&gt;
* Do numbered buttons have something in common?&lt;br /&gt;
* Do numbered buttons have differences?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Below is an example of a way to write such a script:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_12.png|800px|Ruby script example (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sources and useful links ==&lt;br /&gt;
* https://projects.forum.nokia.com/Testabilitydriver/wiki/FeatureVisualizerCodeEditor#WritingaScriptwithCodeEditor&lt;br /&gt;
* https://projects.forum.nokia.com/Testabilitydriver/wiki&lt;br /&gt;
* http://www.rubyist.net/~slagell/ruby/&lt;br /&gt;
* http://www.tutorialspoint.com/ruby/index.htm&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation</id>
		<title>Quality/QA-tools/TDriver/Getting Started/Tutorial for test creation</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation"/>
				<updated>2011-04-29T14:44:42Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Testability Driver - Tutorial for test creation =&lt;br /&gt;
This page describes how to automate a simple test.&lt;br /&gt;
&lt;br /&gt;
== Pre-requisites ==&lt;br /&gt;
TDriver and tests/calculator applications are installed.&lt;br /&gt;
&lt;br /&gt;
In file /etc/tdriver/tdriver_parameters.xml , “sut_id” section is empty like below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;sut id=&amp;quot;sut_qt&amp;quot; template=&amp;quot;qt&amp;quot;&amp;gt; &lt;br /&gt;
	&amp;lt;!-- use default values --&amp;gt; &lt;br /&gt;
&amp;lt;/sut&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For guidance, see http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We should ensure everything is ready for further actions by launching qttasserver, TDriver and calculator applications:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qttasserver &amp;amp;&lt;br /&gt;
tdriver_visualizer &amp;amp;&lt;br /&gt;
calculator -testability&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then clicking TDriver's “File &amp;gt; Refresh” menu item should lead to get the same view as below:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_0.png|800px|Visualizer's default view (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Get a copy of Ruby script template ==&lt;br /&gt;
We get a copy of the template ruby script available under /etc/tdriver/visualizer to your /home/$USER folder for instance, renaming it as my_script.rb:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp /etc/tdriver/visualizer/plain_tdriver.rb.template /home/$USER/my_script.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And update the file's execution attributes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod ugo+x /home/$USER/my_script.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open Ruby script in TDriver ==&lt;br /&gt;
From Tdriver, we click “View &amp;gt; Docks and toolbars &amp;gt; Code Editor” menu item.&lt;br /&gt;
Code Editor window appears at the bottom of TDriver, we click “File &amp;gt; Open...” menu item and browse to select my_script.rb, we should get the same view as below:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_1.png|800px|Ruby script into Code Editor (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Contents of Ruby script template ==&lt;br /&gt;
Now let's have a closer look at the script contents.&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_2.png|800px|Template Ruby script (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
The first two lines mention:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require 'tdriver'&lt;br /&gt;
include TDriverVerify&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
“require” method loads the mentioned file whereas “include” method embeds the specified module into the current module (it can be used to enhance a class). More detail can be found [http://www.tutorialspoint.com/ruby/ruby_modules.htm here], [http://stackoverflow.com/questions/318144/what-is-the-difference-between-include-and-require-in-ruby here] or [http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/ae718697e28e2568?pli=1 here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following lines are preceeded by commented lines beginning with # character that help understanding their purpose, and we can see that the structure of a Ruby script basically consists of:&lt;br /&gt;
* Defining the SUT (system under test) TDriver should interact with&lt;br /&gt;
* Defining the application to run and test&lt;br /&gt;
* Defining the tests to be performed within the application&lt;br /&gt;
* Finally closing the application&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Writing a test using TDriver's graphical interface ==&lt;br /&gt;
So let's say we want to automate a test that clicks calculator's numbered buttons only, and takes a screenshot of the whole application after each click.&lt;br /&gt;
&lt;br /&gt;
First thing to do is update the application name, by completing existing line like below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@app = @sut.run( :name =&amp;gt; &amp;quot;calculator&amp;quot;, :arguments =&amp;gt; &amp;quot;-testability&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then from Code Editor (bottom of TDriver), we place the cursor after the &amp;quot;# Add your interaction and verify code here...&amp;quot; like below:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_3.png|800px|Writing a test from TDriver UI - 1 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
From Image View (right part of TDriver), we drag the mouse over “9” button for instance. A red line displays arount it, and “sut” item unfolds to display selected button:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_4.png|800px|Writing a test from TDriver UI - 2 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We right-click and from the contextual menu, we select “Insert into editor” item:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_5.png|800px|Writing a test from TDriver UI - 3 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following line is added to the script, as shown below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@app.Button( :name =&amp;gt; 'nineButton' )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_6.png|800px|Writing a test from TDriver UI - 4 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we need to append the method corresponding to a button click. From Properties (left part of TDriver), we select “Methods” tab, and browse its contents. To get more detail about an item, we simply drag the mouse over it:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_7.png|800px|Writing a test from TDriver UI - 5 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
“Tap” method seems to answer our needs, so here again we right-click the desired method and select “Insert to editor”:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_8.png|800px|Writing a test from TDriver UI - 6 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tap method will be appended to our button line:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_9.png|800px|Writing a test from TDriver UI - 7 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now let's save our script and test it so far:&lt;br /&gt;
* We don't forget to close calculator as our script will launch and stop it itself.&lt;br /&gt;
* From Code Editor, we click “File &amp;gt; Save” menu item.&lt;br /&gt;
* Then we click “Run &amp;gt; Run with Ruby” menu item.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Through this first test, we could quickly see that calculator opened, 9 number displayed in the editor, then the application closed. A new window called Script Console opened along with calculator, it displays traces resulting from our script's execution:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_10.png|800px|Writing a test from TDriver UI - 8 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now to complete the test, we will take a snapshot of the application. From the center part of TDriver, we select “Application Calculator” line, then we browse Methods tab to find the appropriate method to use, that is &amp;quot;capture_screen&amp;quot;. Finally, we write below line into Code Editor:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@app.capture_screen(&amp;quot;PNG&amp;quot;, &amp;quot;./calc_snapshot.png&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The method's arguments are the snapshot's format (i.e. “PNG”), and its path and name.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Seems we are done?! Let's give our script another try and check the snapshot's display.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Well, despite the Script Console not showing any error, instead of displaying number 9 the snapshot may show 0. As a result, this “issue” has more to see with asynchronicity than with a bug since what we observe here is that we kind of took the snapshot too early, and the edit had no time to refresh its display. So before taking the snapshot, we should take some time to verify our input, adding below line right after the call to button 9's tap method:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
verify(12, &amp;quot;The taped number should display&amp;quot;) {@app.QLineEdit( :&amp;quot;displayText&amp;quot; =&amp;gt; @app.Button( :name =&amp;gt; 'nineButton' ).attribute(&amp;quot;text&amp;quot;))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_11.png|800px|Writing a test from TDriver UI - 9 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We set a timeout (12 seconds) during which the edit's display value is compared with the text value of taped button. If both values correspond, script continues and snapshot is taken. But if values don't match before timeout expires, then script is halted and exits with code 1, and this information is reported into Script Console. 12 seconds is an arbitrary delay and we assume it is enough for the edit to show up correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Improving a test based on TDriver's features and Ruby syntax ==&lt;br /&gt;
In order to test every numbered button, we could duplicate the lines we have and just update the buttons and snapshots' name. Or we could take advantage of the functionalities offered by TDriver as well as by Ruby scripting language, and in order to prepare to write a program a bit more abstract, we can try to answer some questions like:&lt;br /&gt;
* Is there a way to list every buttons at once?&lt;br /&gt;
* Do numbered buttons have something in common?&lt;br /&gt;
* Do numbered buttons have differences?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Below is an example of a way to write such a script:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_12.png|800px|Ruby script example (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sources and useful links ==&lt;br /&gt;
* https://projects.forum.nokia.com/Testabilitydriver/wiki/FeatureVisualizerCodeEditor#WritingaScriptwithCodeEditor&lt;br /&gt;
* https://projects.forum.nokia.com/Testabilitydriver/wiki&lt;br /&gt;
* http://www.rubyist.net/~slagell/ruby/&lt;br /&gt;
* http://www.tutorialspoint.com/ruby/index.htm&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation</id>
		<title>Quality/QA-tools/TDriver/Getting Started/Tutorial for test creation</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation"/>
				<updated>2011-04-29T14:43:48Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Testability Driver tutorial for test creation =&lt;br /&gt;
This page describes how to automate a simple test.&lt;br /&gt;
&lt;br /&gt;
== Pre-requisites ==&lt;br /&gt;
TDriver and tests/calculator applications are installed.&lt;br /&gt;
&lt;br /&gt;
In file /etc/tdriver/tdriver_parameters.xml , “sut_id” section is empty like below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;sut id=&amp;quot;sut_qt&amp;quot; template=&amp;quot;qt&amp;quot;&amp;gt; &lt;br /&gt;
	&amp;lt;!-- use default values --&amp;gt; &lt;br /&gt;
&amp;lt;/sut&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For guidance, see http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We should ensure everything is ready for further actions by launching qttasserver, TDriver and calculator applications:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qttasserver &amp;amp;&lt;br /&gt;
tdriver_visualizer &amp;amp;&lt;br /&gt;
calculator -testability&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then clicking TDriver's “File &amp;gt; Refresh” menu item should lead to get the same view as below:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_0.png|800px|Visualizer's default view (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Get a copy of Ruby script template ==&lt;br /&gt;
We get a copy of the template ruby script available under /etc/tdriver/visualizer to your /home/$USER folder for instance, renaming it as my_script.rb:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp /etc/tdriver/visualizer/plain_tdriver.rb.template /home/$USER/my_script.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And update the file's execution attributes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod ugo+x /home/$USER/my_script.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open Ruby script in TDriver ==&lt;br /&gt;
From Tdriver, we click “View &amp;gt; Docks and toolbars &amp;gt; Code Editor” menu item.&lt;br /&gt;
Code Editor window appears at the bottom of TDriver, we click “File &amp;gt; Open...” menu item and browse to select my_script.rb, we should get the same view as below:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_1.png|800px|Ruby script into Code Editor (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Contents of Ruby script template ==&lt;br /&gt;
Now let's have a closer look at the script contents.&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_2.png|800px|Template Ruby script (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
The first two lines mention:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require 'tdriver'&lt;br /&gt;
include TDriverVerify&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
“require” method loads the mentioned file whereas “include” method embeds the specified module into the current module (it can be used to enhance a class). More detail can be found [http://www.tutorialspoint.com/ruby/ruby_modules.htm here], [http://stackoverflow.com/questions/318144/what-is-the-difference-between-include-and-require-in-ruby here] or [http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/ae718697e28e2568?pli=1 here].&lt;br /&gt;
&lt;br /&gt;
Following lines are preceeded by commented lines beginning with # character that help understanding their purpose, and we can see that the structure of a Ruby script basically consists of:&lt;br /&gt;
* Defining the SUT (system under test) TDriver should interact with&lt;br /&gt;
* Defining the application to run and test&lt;br /&gt;
* Defining the tests to be performed within the application&lt;br /&gt;
* Finally closing the application&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Writing a test using TDriver's graphical interface ==&lt;br /&gt;
So let's say we want to automate a test that clicks calculator's numbered buttons only, and takes a screenshot of the whole application after each click.&lt;br /&gt;
&lt;br /&gt;
First thing to do is update the application name, by completing existing line like below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@app = @sut.run( :name =&amp;gt; &amp;quot;calculator&amp;quot;, :arguments =&amp;gt; &amp;quot;-testability&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then from Code Editor (bottom of TDriver), we place the cursor after the &amp;quot;# Add your interaction and verify code here...&amp;quot; like below:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_3.png|800px|Writing a test from TDriver UI - 1 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
From Image View (right part of TDriver), we drag the mouse over “9” button for instance. A red line displays arount it, and “sut” item unfolds to display selected button:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_4.png|800px|Writing a test from TDriver UI - 2 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We right-click and from the contextual menu, we select “Insert into editor” item:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_5.png|800px|Writing a test from TDriver UI - 3 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following line is added to the script, as shown below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@app.Button( :name =&amp;gt; 'nineButton' )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_6.png|800px|Writing a test from TDriver UI - 4 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we need to append the method corresponding to a button click. From Properties (left part of TDriver), we select “Methods” tab, and browse its contents. To get more detail about an item, we simply drag the mouse over it:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_7.png|800px|Writing a test from TDriver UI - 5 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
“Tap” method seems to answer our needs, so here again we right-click the desired method and select “Insert to editor”:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_8.png|800px|Writing a test from TDriver UI - 6 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tap method will be appended to our button line:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_9.png|800px|Writing a test from TDriver UI - 7 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now let's save our script and test it so far:&lt;br /&gt;
* We don't forget to close calculator as our script will launch and stop it itself.&lt;br /&gt;
* From Code Editor, we click “File &amp;gt; Save” menu item.&lt;br /&gt;
* Then we click “Run &amp;gt; Run with Ruby” menu item.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Through this first test, we could quickly see that calculator opened, 9 number displayed in the editor, then the application closed. A new window called Script Console opened along with calculator, it displays traces resulting from our script's execution:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_10.png|800px|Writing a test from TDriver UI - 8 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now to complete the test, we will take a snapshot of the application. From the center part of TDriver, we select “Application Calculator” line, then we browse Methods tab to find the appropriate method to use, that is &amp;quot;capture_screen&amp;quot;. Finally, we write below line into Code Editor:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@app.capture_screen(&amp;quot;PNG&amp;quot;, &amp;quot;./calc_snapshot.png&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The method's arguments are the snapshot's format (i.e. “PNG”), and its path and name.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Seems we are done?! Let's give our script another try and check the snapshot's display.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Well, despite the Script Console not showing any error, instead of displaying number 9 the snapshot may show 0. As a result, this “issue” has more to see with asynchronicity than with a bug since what we observe here is that we kind of took the snapshot too early, and the edit had no time to refresh its display. So before taking the snapshot, we should take some time to verify our input, adding below line right after the call to button 9's tap method:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
verify(12, &amp;quot;The taped number should display&amp;quot;) {@app.QLineEdit( :&amp;quot;displayText&amp;quot; =&amp;gt; @app.Button( :name =&amp;gt; 'nineButton' ).attribute(&amp;quot;text&amp;quot;))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_11.png|800px|Writing a test from TDriver UI - 9 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We set a timeout (12 seconds) during which the edit's display value is compared with the text value of taped button. If both values correspond, script continues and snapshot is taken. But if values don't match before timeout expires, then script is halted and exits with code 1, and this information is reported into Script Console. 12 seconds is an arbitrary delay and we assume it is enough for the edit to show up correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Improving a test based on TDriver's features and Ruby syntax ==&lt;br /&gt;
In order to test every numbered button, we could duplicate the lines we have and just update the buttons and snapshots' name. Or we could take advantage of the functionalities offered by TDriver as well as by Ruby scripting language, and in order to prepare to write a program a bit more abstract, we can try to answer some questions like:&lt;br /&gt;
* Is there a way to list every buttons at once?&lt;br /&gt;
* Do numbered buttons have something in common?&lt;br /&gt;
* Do numbered buttons have differences?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Below is an example of a way to write such a script:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_12.png|800px|Ruby script example (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sources and useful links ==&lt;br /&gt;
* https://projects.forum.nokia.com/Testabilitydriver/wiki/FeatureVisualizerCodeEditor#WritingaScriptwithCodeEditor&lt;br /&gt;
* https://projects.forum.nokia.com/Testabilitydriver/wiki&lt;br /&gt;
* http://www.rubyist.net/~slagell/ruby/&lt;br /&gt;
* http://www.tutorialspoint.com/ruby/index.htm&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation</id>
		<title>Quality/QA-tools/TDriver/Getting Started/Tutorial for test creation</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation"/>
				<updated>2011-04-29T14:39:32Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Testability Driver tutorial for test creation =&lt;br /&gt;
This page describes how to automate a simple test.&lt;br /&gt;
&lt;br /&gt;
== Pre-requisites ==&lt;br /&gt;
TDriver and tests/calculator applications are installed.&lt;br /&gt;
&lt;br /&gt;
In file /etc/tdriver/tdriver_parameters.xml , “sut_id” section is empty like below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;sut id=&amp;quot;sut_qt&amp;quot; template=&amp;quot;qt&amp;quot;&amp;gt; &lt;br /&gt;
	&amp;lt;!-- use default values --&amp;gt; &lt;br /&gt;
&amp;lt;/sut&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For guidance, see http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We should ensure everything is ready for further actions by launching qttasserver, TDriver and calculator applications:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qttasserver &amp;amp;&lt;br /&gt;
tdriver_visualizer &amp;amp;&lt;br /&gt;
calculator -testability&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then clicking TDriver's “File &amp;gt; Refresh” menu item should lead to get the same view as below:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_0.png|800px|Visualizer's default view (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Get a copy of Ruby script template ==&lt;br /&gt;
We get a copy of the template ruby script available under /etc/tdriver/visualizer to your /home/$USER folder for instance, renaming it as my_script.rb:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp /etc/tdriver/visualizer/plain_tdriver.rb.template /home/$USER/my_script.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And update the file's execution attributes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod ugo+x /home/$USER/my_script.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open Ruby script in TDriver ==&lt;br /&gt;
From Tdriver, we click “View &amp;gt; Docks and toolbars &amp;gt; Code Editor” menu item.&lt;br /&gt;
Code Editor window appears at the bottom of TDriver, we click “File &amp;gt; Open...” menu item and browse to select my_script.rb, we should get the same view as below:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_1.png|800px|Ruby script into Code Editor (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Contents of Ruby script template ==&lt;br /&gt;
Now let's have a closer look at the script contents.&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_2.png|800px|Template Ruby script (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
The first two lines mention:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require 'tdriver'&lt;br /&gt;
include TDriverVerify&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
“require” method loads the mentioned file whereas “include” method embeds the specified module into the current module (it can be used to enhance a class). More detail can be found [http://www.tutorialspoint.com/ruby/ruby_modules.htm here], [http://stackoverflow.com/questions/318144/what-is-the-difference-between-include-and-require-in-ruby here] or [http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/ae718697e28e2568?pli=1 here].&lt;br /&gt;
&lt;br /&gt;
Following lines are preceeded by commented lines beginning with # character that help understanding their purpose, and we can see that the structure of a Ruby script basically consists of:&lt;br /&gt;
&lt;br /&gt;
- defining the SUT (system under test) TDriver should interact with&lt;br /&gt;
&lt;br /&gt;
- defining the application to run and test&lt;br /&gt;
&lt;br /&gt;
- defining the tests to be performed within the application&lt;br /&gt;
&lt;br /&gt;
- finally closing the application&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Writing a test using TDriver's graphical interface ==&lt;br /&gt;
So let's say we want to automate a test that clicks calculator's numbered buttons only, and takes a screenshot of the whole application after each click.&lt;br /&gt;
&lt;br /&gt;
First thing to do is update the application name, by completing existing line like below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@app = @sut.run( :name =&amp;gt; &amp;quot;calculator&amp;quot;, :arguments =&amp;gt; &amp;quot;-testability&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then from Code Editor (bottom of TDriver), we place the cursor after the &amp;quot;# Add your interaction and verify code here...&amp;quot; like below:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_3.png|800px|Writing a test from TDriver UI - 1 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
From Image View (right part of TDriver), we drag the mouse over “9” button for instance. A red line displays arount it, and “sut” item unfolds to display selected button:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_4.png|800px|Writing a test from TDriver UI - 2 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We right-click and from the contextual menu, we select “Insert into editor” item:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_5.png|800px|Writing a test from TDriver UI - 3 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following line is added to the script, as shown below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@app.Button( :name =&amp;gt; 'nineButton' )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_6.png|800px|Writing a test from TDriver UI - 4 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we need to append the method corresponding to a button click. From Properties (left part of TDriver), we select “Methods” tab, and browse its contents. To get more detail about an item, we simply drag the mouse over it:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_7.png|800px|Writing a test from TDriver UI - 5 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
“Tap” method seems to answer our needs, so here again we right-click the desired method and select “Insert to editor”:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_8.png|800px|Writing a test from TDriver UI - 6 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tap method will be appended to our button line:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_9.png|800px|Writing a test from TDriver UI - 7 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now let's save our script and test it so far:&lt;br /&gt;
&lt;br /&gt;
- We don't forget to close calculator as our script will launch and stop it itself.&lt;br /&gt;
&lt;br /&gt;
- From Code Editor, we click “File &amp;gt; Save” menu item.&lt;br /&gt;
&lt;br /&gt;
- Then we click “Run &amp;gt; Run with Ruby” menu item.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We could quickly see that calculator opened, 9 number displayed in the editor, then the application closed. A new window called Script Console opened along with calculator, it displays traces resulting from our script's execution:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_10.png|800px|Writing a test from TDriver UI - 8 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now to complete the test, we will take a snapshot of the application. From the center part of TDriver, we select “Application Calculator” line, then we browse Methods tab to find the appropriate method to use, that is &amp;quot;capture_screen&amp;quot;. Finally, we write below line into Code Editor:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@app.capture_screen(&amp;quot;PNG&amp;quot;, &amp;quot;./calc_snapshot.png&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The method's arguments are the snapshot's format (i.e. “PNG”), and its path and name.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Seems we are done?! Let's give our script another try...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Well, despite the Script Console not showing any error, instead of displaying number 9 the snapshot may show 0. As a result, this “issue” has more to see with asynchronicity than with a bug since what we observe here is that we kind of took the snapshot too early, and the edit had no time to refresh its display. So before taking the snapshot, we should take some time to verify our input, adding below line right after the call to button 9's tap method:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
verify(12, &amp;quot;The taped number should display&amp;quot;) {@app.QLineEdit( :&amp;quot;displayText&amp;quot; =&amp;gt; @app.Button( :name =&amp;gt; 'nineButton' ).attribute(&amp;quot;text&amp;quot;))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_11.png|800px|Writing a test from TDriver UI - 9 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We set a timeout (12 seconds) during which the edit's display value is compared with the text value of taped button. If both values correspond, script continues and snapshot is taken. But if values don't match before timeout expires, then script is halted and exits with code 1, and this information is reported into Script Console. 12 seconds is an arbitrary delay and we assume it is enough for the edit to show up correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Improving a test based on TDriver's features and Ruby syntax ==&lt;br /&gt;
In order to test every numbered button, we could duplicate the lines we have and just update the buttons and snapshots' name. Or we could take advantage of the functionalities offered by TDriver as well as by Ruby scripting language, and in order to prepare to write a program a bit more abstract, we can try to answer some questions like:&lt;br /&gt;
&lt;br /&gt;
- is there a way to list every buttons at once?&lt;br /&gt;
&lt;br /&gt;
- do numbered buttons have something in common?&lt;br /&gt;
&lt;br /&gt;
- do numbered buttons have differences?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Below is an example of a way to write such a script:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_12.png|800px|Ruby script example (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sources and useful links ==&lt;br /&gt;
https://projects.forum.nokia.com/Testabilitydriver/wiki/FeatureVisualizerCodeEditor#WritingaScriptwithCodeEditor&lt;br /&gt;
https://projects.forum.nokia.com/Testabilitydriver/wiki&lt;br /&gt;
http://www.rubyist.net/~slagell/ruby/&lt;br /&gt;
http://www.tutorialspoint.com/ruby/index.htm&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation</id>
		<title>Quality/QA-tools/TDriver/Getting Started/Tutorial for test creation</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation"/>
				<updated>2011-04-29T14:33:38Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Pre-requisites ==&lt;br /&gt;
TDriver and tests/calculator applications are installed.&lt;br /&gt;
In file /etc/tdriver/tdriver_parameters.xml , “sut_id” section is empty like below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;sut id=&amp;quot;sut_qt&amp;quot; template=&amp;quot;qt&amp;quot;&amp;gt; &lt;br /&gt;
	&amp;lt;!-- use default values --&amp;gt; &lt;br /&gt;
&amp;lt;/sut&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For guidance, see http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We can ensure everything is ready for further actions by launching qttasserver, TDriver and calculator applications:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qttasserver &amp;amp;&lt;br /&gt;
tdriver_visualizer &amp;amp;&lt;br /&gt;
calculator -testability&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then clicking TDriver's “File &amp;gt; Refresh” menu item should lead to get the same view as below:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_0.png|800px|Visualizer's default view (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Get a copy of Ruby script template ==&lt;br /&gt;
We get a copy of the template ruby script available under /etc/tdriver/visualizer to your /home/$USER folder for instance, renaming it as my_script.rb:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp /etc/tdriver/visualizer/plain_tdriver.rb.template /home/$USER/my_script.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And update the file's execution attributes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod ugo+x /home/$USER/my_script.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open Ruby script in TDriver ==&lt;br /&gt;
From Tdriver, we click “View &amp;gt; Docks and toolbars &amp;gt; Code Editor” menu item.&lt;br /&gt;
Code Editor window appears at the bottom of TDriver, we click “File &amp;gt; Open...” menu item and browse to select my_script.rb, we should get the same view as below:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_1.png|800px|Ruby script into Code Editor (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Contents of Ruby script template ==&lt;br /&gt;
Now let's have a closer look at the script contents.&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_2.png|800px|Template Ruby script (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
The first two lines mention:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require 'tdriver'&lt;br /&gt;
include TDriverVerify&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
“require” method loads the mentioned file whereas “include” method embeds the specified module into the current module (it can be used to enhance a class). More detail can be found [http://www.tutorialspoint.com/ruby/ruby_modules.htm here], [http://stackoverflow.com/questions/318144/what-is-the-difference-between-include-and-require-in-ruby here] or [http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/ae718697e28e2568?pli=1 here].&lt;br /&gt;
&lt;br /&gt;
Following lines are preceeded by commented lines beginning with # character that help understanding their purpose, and we can see that the structure of a Ruby script basically consists of:&lt;br /&gt;
- defining the SUT (system under test) TDriver should interact with&lt;br /&gt;
- defining the application to run and test&lt;br /&gt;
- defining the tests to be performed within the application&lt;br /&gt;
- finally closing the application&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Writing a test using TDriver's graphical interface ==&lt;br /&gt;
So let's say we want to automate a test that clicks calculator's numbered buttons only, and takes a screenshot of the whole application after each click.&lt;br /&gt;
&lt;br /&gt;
First thing to do is update the application name, by completing existing line like below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@app = @sut.run( :name =&amp;gt; &amp;quot;calculator&amp;quot;, :arguments =&amp;gt; &amp;quot;-testability&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then from Code Editor (bottom of TDriver), we place the cursor after the &amp;quot;# Add your interaction and verify code here...&amp;quot; like below:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_3.png|800px|Writing a test from TDriver UI - 1 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
From Image View (right part of TDriver), we drag the mouse over “9” button for instance. A red line displays arount it, and “sut” item unfolds to display selected button:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_4.png|800px|Writing a test from TDriver UI - 2 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We right-click and from the contextual menu, we select “Insert into editor” item:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_5.png|800px|Writing a test from TDriver UI - 3 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following line is added to the script, as shown below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@app.Button( :name =&amp;gt; 'nineButton' )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_6.png|800px|Writing a test from TDriver UI - 4 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we need to append the method corresponding to a button click. From Properties (left part of TDriver), we select “Methods” tab, and browse its contents. To get more detail about an item, we simply drag the mouse over it:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_7.png|800px|Writing a test from TDriver UI - 5 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
“Tap” method seems to answer our needs, so here again we right-click the desired method and select “Insert to editor”:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_8.png|800px|Writing a test from TDriver UI - 6 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tap method will be appended to our button line:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_9.png|800px|Writing a test from TDriver UI - 7 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
Now let's save our script and test it so far:&lt;br /&gt;
- We don't forget to close calculator as our script will launch and stop it itself.&lt;br /&gt;
- From Code Editor, we click “File &amp;gt; Save” menu item.&lt;br /&gt;
- Then we click “Run &amp;gt; Run with Ruby” menu item.&lt;br /&gt;
&lt;br /&gt;
We could quickly see that calculator opened, 9 number displayed in the editor, then the application closed. A new window called Script Console opened along with calculator, it displays traces resulting from our script's execution:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_10.png|800px|Writing a test from TDriver UI - 8 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now to complete the test, we will take a snapshot of the application. From the center part of TDriver, we select “Application Calculator” line, then we browse Methods tab to find the appropriate method to use, that is &amp;quot;capture_screen&amp;quot;. Finally, we write below line into Code Editor:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@app.capture_screen(&amp;quot;PNG&amp;quot;, &amp;quot;./calc_snapshot.png&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The method's arguments are the snapshot's format (i.e. “PNG”), and its path and name.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Seems we are done?! Let's give our script another try...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Well, despite the Script Console not showing any error, instead of displaying number 9 the snapshot may show 0. As a result, this “issue” has more to see with asynchronicity than with a bug since what we observe here is that we kind of took the snapshot too early, and the edit had no time to refresh its display. So before taking the snapshot, we should take some time to verify our input, adding below line right after the call to button 9's tap method:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
verify(12, &amp;quot;The taped number should display&amp;quot;) {@app.QLineEdit( :&amp;quot;displayText&amp;quot; =&amp;gt; @app.Button( :name =&amp;gt; 'nineButton' ).attribute(&amp;quot;text&amp;quot;))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_11.png|800px|Writing a test from TDriver UI - 9 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We set a timeout (12 seconds) during which the edit's display value is compared with the text value of taped button. If both values correspond, script continues and snapshot is taken. But if values don't match before timeout expires, then script is halted and exits with code 1, and this information is reported into Script Console. 12 seconds is an arbitrary delay and we assume it is enough for the edit to show up correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Improving a test based on TDriver's features and Ruby syntax ==&lt;br /&gt;
In order to test every numbered button, we could duplicate the lines we have and just update the buttons and snapshots' name. Or we could take advantage of the functionalities offered by TDriver as well as by Ruby scripting language, and in order to prepare to write a program a bit more abstract, we can try to answer some questions like:&lt;br /&gt;
- is there a way to list every buttons at once?&lt;br /&gt;
- do numbered buttons have something in common?&lt;br /&gt;
- do numbered buttons have differences?&lt;br /&gt;
&lt;br /&gt;
Below is an example of a way to write such a script:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_12.png|800px|Ruby script example (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sources and useful links ==&lt;br /&gt;
https://projects.forum.nokia.com/Testabilitydriver/wiki/FeatureVisualizerCodeEditor#WritingaScriptwithCodeEditor&lt;br /&gt;
https://projects.forum.nokia.com/Testabilitydriver/wiki&lt;br /&gt;
http://www.rubyist.net/~slagell/ruby/&lt;br /&gt;
http://www.tutorialspoint.com/ruby/index.htm&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation</id>
		<title>Quality/QA-tools/TDriver/Getting Started/Tutorial for test creation</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation"/>
				<updated>2011-04-29T14:32:52Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Pre-requisites ==&lt;br /&gt;
TDriver and tests/calculator applications are installed.&lt;br /&gt;
In file /etc/tdriver/tdriver_parameters.xml , “sut_id” section is empty like below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;sut id=&amp;quot;sut_qt&amp;quot; template=&amp;quot;qt&amp;quot;&amp;gt; &lt;br /&gt;
	&amp;lt;!-- use default values --&amp;gt; &lt;br /&gt;
&amp;lt;/sut&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For guidance, see http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We can ensure everything is ready for further actions by launching qttasserver, TDriver and calculator applications:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qttasserver &amp;amp;&lt;br /&gt;
tdriver_visualizer &amp;amp;&lt;br /&gt;
calculator -testability&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then clicking TDriver's “File &amp;gt; Refresh” menu item should lead to get the same view as below:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_0.png|800px|Visualizer's default view (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Get a copy of Ruby script template ==&lt;br /&gt;
Get a copy of the template ruby script available under /etc/tdriver/visualizer to your /home/$USER folder for instance, renaming it as my_script.rb:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp /etc/tdriver/visualizer/plain_tdriver.rb.template /home/$USER/my_script.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Update your file's execution attributes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod ugo+x /home/$USER/my_script.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open Ruby script in TDriver ==&lt;br /&gt;
From Tdriver, we click “View &amp;gt; Docks and toolbars &amp;gt; Code Editor” menu item.&lt;br /&gt;
Code Editor window appears at the bottom of TDriver, we click “File &amp;gt; Open...” menu item and browse to select my_script.rb, we should get the same view as below:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_1.png|800px|Ruby script into Code Editor (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Contents of Ruby script template ==&lt;br /&gt;
Now let's have a closer look at the script contents.&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_2.png|800px|Template Ruby script (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
The first two lines mention:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require 'tdriver'&lt;br /&gt;
include TDriverVerify&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
“require” method loads the mentioned file whereas “include” method embeds the specified module into the current module (it can be used to enhance a class). More detail can be found [http://www.tutorialspoint.com/ruby/ruby_modules.htm here], [http://stackoverflow.com/questions/318144/what-is-the-difference-between-include-and-require-in-ruby here] or [http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/ae718697e28e2568?pli=1 here].&lt;br /&gt;
&lt;br /&gt;
Following lines are preceeded by commented lines beginning with # character that help understanding their purpose, and we can see that the structure of a Ruby script basically consists of:&lt;br /&gt;
- defining the SUT (system under test) TDriver should interact with&lt;br /&gt;
- defining the application to run and test&lt;br /&gt;
- defining the tests to be performed within the application&lt;br /&gt;
- finally closing the application&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Writing a test using TDriver's graphical interface ==&lt;br /&gt;
So let's say we want to automate a test that clicks calculator's numbered buttons only, and takes a screenshot of the whole application after each click.&lt;br /&gt;
&lt;br /&gt;
First thing to do is update the application name, by completing existing line like below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@app = @sut.run( :name =&amp;gt; &amp;quot;calculator&amp;quot;, :arguments =&amp;gt; &amp;quot;-testability&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then from Code Editor (bottom of TDriver), we place the cursor after the &amp;quot;# Add your interaction and verify code here...&amp;quot; like below:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_3.png|800px|Writing a test from TDriver UI - 1 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
From Image View (right part of TDriver), we drag the mouse over “9” button for instance. A red line displays arount it, and “sut” item unfolds to display selected button:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_4.png|800px|Writing a test from TDriver UI - 2 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We right-click and from the contextual menu, we select “Insert into editor” item:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_5.png|800px|Writing a test from TDriver UI - 3 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following line is added to the script, as shown below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@app.Button( :name =&amp;gt; 'nineButton' )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_6.png|800px|Writing a test from TDriver UI - 4 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we need to append the method corresponding to a button click. From Properties (left part of TDriver), we select “Methods” tab, and browse its contents. To get more detail about an item, we simply drag the mouse over it:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_7.png|800px|Writing a test from TDriver UI - 5 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
“Tap” method seems to answer our needs, so here again we right-click the desired method and select “Insert to editor”:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_8.png|800px|Writing a test from TDriver UI - 6 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tap method will be appended to our button line:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_9.png|800px|Writing a test from TDriver UI - 7 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
Now let's save our script and test it so far:&lt;br /&gt;
- We don't forget to close calculator as our script will launch and stop it itself.&lt;br /&gt;
- From Code Editor, we click “File &amp;gt; Save” menu item.&lt;br /&gt;
- Then we click “Run &amp;gt; Run with Ruby” menu item.&lt;br /&gt;
&lt;br /&gt;
We could quickly see that calculator opened, 9 number displayed in the editor, then the application closed. A new window called Script Console opened along with calculator, it displays traces resulting from our script's execution:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_10.png|800px|Writing a test from TDriver UI - 8 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now to complete the test, we will take a snapshot of the application. From the center part of TDriver, we select “Application Calculator” line, then we browse Methods tab to find the appropriate method to use, that is &amp;quot;capture_screen&amp;quot;. Finally, we write below line into Code Editor:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@app.capture_screen(&amp;quot;PNG&amp;quot;, &amp;quot;./calc_snapshot.png&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The method's arguments are the snapshot's format (i.e. “PNG”), and its path and name.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Seems we are done?! Let's give our script another try...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Well, despite the Script Console not showing any error, instead of displaying number 9 the snapshot may show 0. As a result, this “issue” has more to see with asynchronicity than with a bug since what we observe here is that we kind of took the snapshot too early, and the edit had no time to refresh its display. So before taking the snapshot, we should take some time to verify our input, adding below line right after the call to button 9's tap method:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
verify(12, &amp;quot;The taped number should display&amp;quot;) {@app.QLineEdit( :&amp;quot;displayText&amp;quot; =&amp;gt; @app.Button( :name =&amp;gt; 'nineButton' ).attribute(&amp;quot;text&amp;quot;))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_11.png|800px|Writing a test from TDriver UI - 9 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We set a timeout (12 seconds) during which the edit's display value is compared with the text value of taped button. If both values correspond, script continues and snapshot is taken. But if values don't match before timeout expires, then script is halted and exits with code 1, and this information is reported into Script Console. 12 seconds is an arbitrary delay and we assume it is enough for the edit to show up correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Improving a test based on TDriver's features and Ruby syntax ==&lt;br /&gt;
In order to test every numbered button, we could duplicate the lines we have and just update the buttons and snapshots' name. Or we could take advantage of the functionalities offered by TDriver as well as by Ruby scripting language, and in order to prepare to write a program a bit more abstract, we can try to answer some questions like:&lt;br /&gt;
- is there a way to list every buttons at once?&lt;br /&gt;
- do numbered buttons have something in common?&lt;br /&gt;
- do numbered buttons have differences?&lt;br /&gt;
&lt;br /&gt;
Below is an example of a way to write such a script:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_12.png|800px|Ruby script example (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sources and useful links ==&lt;br /&gt;
https://projects.forum.nokia.com/Testabilitydriver/wiki/FeatureVisualizerCodeEditor#WritingaScriptwithCodeEditor&lt;br /&gt;
https://projects.forum.nokia.com/Testabilitydriver/wiki&lt;br /&gt;
http://www.rubyist.net/~slagell/ruby/&lt;br /&gt;
http://www.tutorialspoint.com/ruby/index.htm&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation</id>
		<title>Quality/QA-tools/TDriver/Getting Started/Tutorial for test creation</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation"/>
				<updated>2011-04-29T14:32:00Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Pre-requisites ==&lt;br /&gt;
TDriver and tests/calculator applications are installed.&lt;br /&gt;
In file /etc/tdriver/tdriver_parameters.xml , “sut_id” section is empty like below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;sut id=&amp;quot;sut_qt&amp;quot; template=&amp;quot;qt&amp;quot;&amp;gt; &lt;br /&gt;
	&amp;lt;!-- use default values --&amp;gt; &lt;br /&gt;
&amp;lt;/sut&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For guidance, see http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We can ensure everything is ready for further actions by launching qttasserver, TDriver and calculator applications:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qttasserver &amp;amp;&lt;br /&gt;
tdriver_visualizer &amp;amp;&lt;br /&gt;
calculator -testability&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then clicking TDriver's “File &amp;gt; Refresh” menu item should lead to get the same view as below:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_0.png|800px|Visualizer's default view (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Get a copy of Ruby script template ==&lt;br /&gt;
Get a copy of the template ruby script available under /etc/tdriver/visualizer to your /home/$USER folder for instance, renaming it as my_script.rb:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp /etc/tdriver/visualizer/plain_tdriver.rb.template /home/$USER/my_script.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Update your file's execution attributes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod ugo+x /home/$USER/my_script.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open Ruby script in TDriver ==&lt;br /&gt;
From Tdriver, we click “View &amp;gt; Docks and toolbars &amp;gt; Code Editor” menu item.&lt;br /&gt;
Code Editor window appears at the bottom of TDriver, we click “File &amp;gt; Open...” menu item and browse to select my_script.rb, we should get the same view as below:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_1.png|800px|Ruby script into Code Editor (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Contents of Ruby script template ==&lt;br /&gt;
Now let's have a closer look at the script contents.&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_2.png|800px|Template Ruby script (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
The first two lines mention:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require 'tdriver'&lt;br /&gt;
include TDriverVerify&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
“require” method loads the mentioned file whereas “include” method embeds the specified module into the current module (it can be used to enhance a class). More detail can be found [http://www.tutorialspoint.com/ruby/ruby_modules.htm here], [http://stackoverflow.com/questions/318144/what-is-the-difference-between-include-and-require-in-ruby here] or [http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/ae718697e28e2568?pli=1 here].&lt;br /&gt;
&lt;br /&gt;
Following lines are preceeded by commented lines beginning with # character that help understanding their purpose, and we can see that the structure of a Ruby script basically consists of:&lt;br /&gt;
- defining the SUT (system under test) TDriver should interact with&lt;br /&gt;
- defining the application to run and test&lt;br /&gt;
- defining the tests to be performed within the application&lt;br /&gt;
- finally closing the application&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Writing a test using TDriver's graphical interface ==&lt;br /&gt;
So let's say we want to automate a test that clicks calculator's numbered buttons only, and takes a screenshot of the whole application after each click.&lt;br /&gt;
&lt;br /&gt;
First thing to do is update the application name, by completing existing line like below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@app = @sut.run( :name =&amp;gt; &amp;quot;calculator&amp;quot;, :arguments =&amp;gt; &amp;quot;-testability&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
From Code Editor (bottom of TDriver), we place the cursor after the &amp;quot;# Add your interaction and verify code here...&amp;quot; like below:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_3.png|800px|Writing a test from TDriver UI - 1 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
From Image View (right part of TDriver), we drag the mouse over “9” button for instance. A red line displays arount it, and “sut” item unfolds to display selected button:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_4.png|800px|Writing a test from TDriver UI - 2 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We right-click and from the contextual menu, we select “Insert into editor” item:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_5.png|800px|Writing a test from TDriver UI - 3 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following line is added to the script, as shown below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@app.Button( :name =&amp;gt; 'nineButton' )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_6.png|800px|Writing a test from TDriver UI - 4 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we need to append the method corresponding to a button click. From Properties (left part of TDriver), we select “Methods” tab, and browse its contents. To get more detail about an item, we simply drag the mouse over it:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_7.png|800px|Writing a test from TDriver UI - 5 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
“Tap” method seems to answer our needs, so here again we right-click the desired method and select “Insert to editor”:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_8.png|800px|Writing a test from TDriver UI - 6 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tap method will be appended to our button line:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_9.png|800px|Writing a test from TDriver UI - 7 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
Now let's save our script and test it so far:&lt;br /&gt;
- We don't forget to close calculator as our script will launch and stop it itself.&lt;br /&gt;
- From Code Editor, we click “File &amp;gt; Save” menu item.&lt;br /&gt;
- Then we click “Run &amp;gt; Run with Ruby” menu item.&lt;br /&gt;
&lt;br /&gt;
We could quickly see that calculator opened, 9 number displayed in the editor, then the application closed. A new window called Script Console opened along with calculator, it displays traces resulting from our script's execution:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_10.png|800px|Writing a test from TDriver UI - 8 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now to complete the test, we will take a snapshot of the application. From the center part of TDriver, we select “Application Calculator” line, then we browse Methods tab to find the appropriate method to use, that is &amp;quot;capture_screen&amp;quot;. Finally, we write below line into Code Editor:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@app.capture_screen(&amp;quot;PNG&amp;quot;, &amp;quot;./calc_snapshot.png&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The method's arguments are the snapshot's format (i.e. “PNG”), and its path and name.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Seems we are done?! Let's give our script another try...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Well, despite the Script Console not showing any error, instead of displaying number 9 the snapshot may show 0. As a result, this “issue” has more to see with asynchronicity than with a bug since what we observe here is that we kind of took the snapshot too early, and the edit had no time to refresh its display. So before taking the snapshot, we should take some time to verify our input, adding below line right after the call to button 9's tap method:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
verify(12, &amp;quot;The taped number should display&amp;quot;) {@app.QLineEdit( :&amp;quot;displayText&amp;quot; =&amp;gt; @app.Button( :name =&amp;gt; 'nineButton' ).attribute(&amp;quot;text&amp;quot;))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_11.png|800px|Writing a test from TDriver UI - 9 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We set a timeout (12 seconds) during which the edit's display value is compared with the text value of taped button. If both values correspond, script continues and snapshot is taken. But if values don't match before timeout expires, then script is halted and exits with code 1, and this information is reported into Script Console. 12 seconds is an arbitrary delay and we assume it is enough for the edit to show up correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Improving a test based on TDriver's features and Ruby syntax ==&lt;br /&gt;
In order to test every numbered button, we could duplicate the lines we have and just update the buttons and snapshots' name. Or we could take advantage of the functionalities offered by TDriver as well as by Ruby scripting language, and in order to prepare to write a program a bit more abstract, we can try to answer some questions like:&lt;br /&gt;
- is there a way to list every buttons at once?&lt;br /&gt;
- do numbered buttons have something in common?&lt;br /&gt;
- do numbered buttons have differences?&lt;br /&gt;
&lt;br /&gt;
Below is an example of a way to write such a script:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_12.png|800px|Ruby script example (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sources and useful links ==&lt;br /&gt;
https://projects.forum.nokia.com/Testabilitydriver/wiki/FeatureVisualizerCodeEditor#WritingaScriptwithCodeEditor&lt;br /&gt;
https://projects.forum.nokia.com/Testabilitydriver/wiki&lt;br /&gt;
http://www.rubyist.net/~slagell/ruby/&lt;br /&gt;
http://www.tutorialspoint.com/ruby/index.htm&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation</id>
		<title>Quality/QA-tools/TDriver/Getting Started/Tutorial for test creation</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation"/>
				<updated>2011-04-29T14:31:28Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Pre-requisites ==&lt;br /&gt;
TDriver and tests/calculator applications are installed.&lt;br /&gt;
In file /etc/tdriver/tdriver_parameters.xml , “sut_id” section is empty like below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;sut id=&amp;quot;sut_qt&amp;quot; template=&amp;quot;qt&amp;quot;&amp;gt; &lt;br /&gt;
	&amp;lt;!-- use default values --&amp;gt; &lt;br /&gt;
&amp;lt;/sut&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For guidance, see http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We can ensure everything is ready for further actions by launching qttasserver, TDriver and calculator applications:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qttasserver &amp;amp;&lt;br /&gt;
tdriver_visualizer &amp;amp;&lt;br /&gt;
calculator -testability&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then clicking TDriver's “File &amp;gt; Refresh” menu item should lead to get the same view as below:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_0.png|800px|Visualizer's default view (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Get a copy of Ruby script template ==&lt;br /&gt;
Get a copy of the template ruby script available under /etc/tdriver/visualizer to your /home/$USER folder for instance, renaming it as my_script.rb:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp /etc/tdriver/visualizer/plain_tdriver.rb.template /home/$USER/my_script.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Update your file's execution attributes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod ugo+x /home/$USER/my_script.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open your Ruby script in TDriver ==&lt;br /&gt;
From Tdriver, we click “View &amp;gt; Docks and toolbars &amp;gt; Code Editor” menu item.&lt;br /&gt;
Code Editor window appears at the bottom of TDriver, we click “File &amp;gt; Open...” menu item and browse to select my_script.rb, we should get the same view as below:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_1.png|800px|Ruby script into Code Editor (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Contents of Ruby script template ==&lt;br /&gt;
Now let's have a closer look at the script contents.&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_2.png|800px|Template Ruby script (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
The first two lines mention:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require 'tdriver'&lt;br /&gt;
include TDriverVerify&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
“require” method loads the mentioned file whereas “include” method embeds the specified module into the current module (it can be used to enhance a class). More detail can be found [http://www.tutorialspoint.com/ruby/ruby_modules.htm here], [http://stackoverflow.com/questions/318144/what-is-the-difference-between-include-and-require-in-ruby here] or [http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/ae718697e28e2568?pli=1 here].&lt;br /&gt;
&lt;br /&gt;
Following lines are preceeded by commented lines beginning with # character that help understanding their purpose, and we can see that the structure of a Ruby script basically consists of:&lt;br /&gt;
- defining the SUT (system under test) TDriver should interact with&lt;br /&gt;
- defining the application to run and test&lt;br /&gt;
- defining the tests to be performed within the application&lt;br /&gt;
- finally closing the application&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Writing a test using TDriver's graphical interface ==&lt;br /&gt;
So let's say we want to automate a test that clicks calculator's numbered buttons only, and takes a screenshot of the whole application after each click.&lt;br /&gt;
&lt;br /&gt;
First thing to do is update the application name, by completing existing line like below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@app = @sut.run( :name =&amp;gt; &amp;quot;calculator&amp;quot;, :arguments =&amp;gt; &amp;quot;-testability&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
From Code Editor (bottom of TDriver), we place the cursor after the &amp;quot;# Add your interaction and verify code here...&amp;quot; like below:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_3.png|800px|Writing a test from TDriver UI - 1 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
From Image View (right part of TDriver), we drag the mouse over “9” button for instance. A red line displays arount it, and “sut” item unfolds to display selected button:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_4.png|800px|Writing a test from TDriver UI - 2 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We right-click and from the contextual menu, we select “Insert into editor” item:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_5.png|800px|Writing a test from TDriver UI - 3 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following line is added to the script, as shown below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@app.Button( :name =&amp;gt; 'nineButton' )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_6.png|800px|Writing a test from TDriver UI - 4 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we need to append the method corresponding to a button click. From Properties (left part of TDriver), we select “Methods” tab, and browse its contents. To get more detail about an item, we simply drag the mouse over it:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_7.png|800px|Writing a test from TDriver UI - 5 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
“Tap” method seems to answer our needs, so here again we right-click the desired method and select “Insert to editor”:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_8.png|800px|Writing a test from TDriver UI - 6 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tap method will be appended to our button line:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_9.png|800px|Writing a test from TDriver UI - 7 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
Now let's save our script and test it so far:&lt;br /&gt;
- We don't forget to close calculator as our script will launch and stop it itself.&lt;br /&gt;
- From Code Editor, we click “File &amp;gt; Save” menu item.&lt;br /&gt;
- Then we click “Run &amp;gt; Run with Ruby” menu item.&lt;br /&gt;
&lt;br /&gt;
We could quickly see that calculator opened, 9 number displayed in the editor, then the application closed. A new window called Script Console opened along with calculator, it displays traces resulting from our script's execution:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_10.png|800px|Writing a test from TDriver UI - 8 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now to complete the test, we will take a snapshot of the application. From the center part of TDriver, we select “Application Calculator” line, then we browse Methods tab to find the appropriate method to use, that is &amp;quot;capture_screen&amp;quot;. Finally, we write below line into Code Editor:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@app.capture_screen(&amp;quot;PNG&amp;quot;, &amp;quot;./calc_snapshot.png&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The method's arguments are the snapshot's format (i.e. “PNG”), and its path and name.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Seems we are done?! Let's give our script another try...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Well, despite the Script Console not showing any error, instead of displaying number 9 the snapshot may show 0. As a result, this “issue” has more to see with asynchronicity than with a bug since what we observe here is that we kind of took the snapshot too early, and the edit had no time to refresh its display. So before taking the snapshot, we should take some time to verify our input, adding below line right after the call to button 9's tap method:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
verify(12, &amp;quot;The taped number should display&amp;quot;) {@app.QLineEdit( :&amp;quot;displayText&amp;quot; =&amp;gt; @app.Button( :name =&amp;gt; 'nineButton' ).attribute(&amp;quot;text&amp;quot;))}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_11.png|800px|Writing a test from TDriver UI - 9 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We set a timeout (12 seconds) during which the edit's display value is compared with the text value of taped button. If both values correspond, script continues and snapshot is taken. But if values don't match before timeout expires, then script is halted and exits with code 1, and this information is reported into Script Console. 12 seconds is an arbitrary delay and we assume it is enough for the edit to show up correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Improving a test based on TDriver's features and Ruby syntax ==&lt;br /&gt;
In order to test every numbered button, we could duplicate the lines we have and just update the buttons and snapshots' name. Or we could take advantage of the functionalities offered by TDriver as well as by Ruby scripting language, and in order to prepare to write a program a bit more abstract, we can try to answer some questions like:&lt;br /&gt;
- is there a way to list every buttons at once?&lt;br /&gt;
- do numbered buttons have something in common?&lt;br /&gt;
- do numbered buttons have differences?&lt;br /&gt;
&lt;br /&gt;
Below is an example of a way to write such a script:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_12.png|800px|Ruby script example (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sources and useful links ==&lt;br /&gt;
https://projects.forum.nokia.com/Testabilitydriver/wiki/FeatureVisualizerCodeEditor#WritingaScriptwithCodeEditor&lt;br /&gt;
https://projects.forum.nokia.com/Testabilitydriver/wiki&lt;br /&gt;
http://www.rubyist.net/~slagell/ruby/&lt;br /&gt;
http://www.tutorialspoint.com/ruby/index.htm&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation</id>
		<title>Quality/QA-tools/TDriver/Getting Started/Tutorial for test creation</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation"/>
				<updated>2011-04-29T14:26:39Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Pre-requisites ==&lt;br /&gt;
TDriver and tests/calculator applications are installed.&lt;br /&gt;
In file /etc/tdriver/tdriver_parameters.xml , “sut_id” section is empty like below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;sut id=&amp;quot;sut_qt&amp;quot; template=&amp;quot;qt&amp;quot;&amp;gt; &lt;br /&gt;
	&amp;lt;!-- use default values --&amp;gt; &lt;br /&gt;
&amp;lt;/sut&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For guidance, see http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We can ensure everything is ready for further actions by launching qttasserver, TDriver and calculator applications:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qttasserver &amp;amp;&lt;br /&gt;
tdriver_visualizer &amp;amp;&lt;br /&gt;
calculator -testability&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then clicking TDriver's “File &amp;gt; Refresh” menu item should lead to get the same view as below:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_0.png|800px|Visualizer's default view (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Get a copy of Ruby script template ==&lt;br /&gt;
Get a copy of the template ruby script available under /etc/tdriver/visualizer to your /home/$USER folder for instance, renaming it as my_script.rb:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp /etc/tdriver/visualizer/plain_tdriver.rb.template /home/$USER/my_script.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Update your file's execution attributes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod ugo+x /home/$USER/my_script.rb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Open your Ruby script in TDriver ==&lt;br /&gt;
From Tdriver, we click “View &amp;gt; Docks and toolbars &amp;gt; Code Editor” menu item.&lt;br /&gt;
Code Editor window appears at the bottom of TDriver, we click “File &amp;gt; Open...” menu item and browse to select my_script.rb, we should get the same view as below:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_1.png|800px|Ruby script into Code Editor (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Contents of Ruby script template ==&lt;br /&gt;
Now let's have a closer look at the script contents.&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_2.png|800px|Template Ruby script (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
The first two lines mention:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require 'tdriver'&lt;br /&gt;
include TDriverVerify&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
“require” method loads the mentioned file whereas “include” method embeds the specified module into the current module (it can be used to enhance a class). More detail can be found [http://www.tutorialspoint.com/ruby/ruby_modules.htm here], [http://stackoverflow.com/questions/318144/what-is-the-difference-between-include-and-require-in-ruby here] or [http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/ae718697e28e2568?pli=1 here].&lt;br /&gt;
&lt;br /&gt;
Following lines are preceeded by commented lines beginning with # character that help understanding their purpose, and we can see that the structure of a Ruby script basically consists of:&lt;br /&gt;
- defining the SUT (system under test) TDriver should interact with&lt;br /&gt;
- defining the application to run and test&lt;br /&gt;
- defining the tests to be performed within the application&lt;br /&gt;
- finally closing the application&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Writing a test using TDriver's graphical interface ==&lt;br /&gt;
So let's say we want to automate a test that clicks calculator's numbered buttons only, and takes a screenshot of the whole application after each click.&lt;br /&gt;
&lt;br /&gt;
First thing to do is update the application name, by completing existing line like below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@app = @sut.run( :name =&amp;gt; &amp;quot;calculator&amp;quot;, :arguments =&amp;gt; &amp;quot;-testability&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
From Code Editor (bottom of TDriver), we place the cursor after the &amp;quot;# Add your interaction and verify code here...&amp;quot; like below:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_3.png|800px|Writing a test from TDriver UI - 1 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
From Image View (right part of TDriver), we drag the mouse over “9” button for instance. A red line displays arount it, and “sut” item unfolds to display selected button:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_4.png|800px|Writing a test from TDriver UI - 2 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
We right-click and from the contextual menu, we select “Insert into editor” item:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_5.png|800px|Writing a test from TDriver UI - 3 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
The following line is added to the script, as shown below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@app.Button( :name =&amp;gt; 'nineButton' )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_6.png|800px|Writing a test from TDriver UI - 4 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
Now we need to append the method corresponding to a button click. From Properties (left part of TDriver), we select “Methods” tab, and browse its contents. To get more detail about an item, we simply drag the mouse over it:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_7.png|800px|Writing a test from TDriver UI - 5 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
“Tap” method seems to answer our needs, so here again we right-click the desired method and select “Insert to editor”:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_8.png|800px|Writing a test from TDriver UI - 6 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
Tap method will be appended to our button line:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_9.png|800px|Writing a test from TDriver UI - 7 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
Now let's save our script and test it so far:&lt;br /&gt;
- We don't forget to close calculator as our script will launch and stop it itself.&lt;br /&gt;
- From Code Editor, we click “File &amp;gt; Save” menu item.&lt;br /&gt;
- Then we click “Run &amp;gt; Run with Ruby” menu item.&lt;br /&gt;
&lt;br /&gt;
We could quickly see that calculator opened, 9 number displayed in the editor, then the application closed. A new window called Script Console opened along with calculator, it displays traces resulting from our script's execution:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_10.png|800px|Writing a test from TDriver UI - 8 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
Now to complete the test, we will take a snapshot of the application. From the center part of TDriver, we select “Application Calculator” line, then we browse Methods tab to find the appropriate method to use, that is &amp;quot;capture_screen&amp;quot;. Finally, we write below line into Code Editor:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@app.capture_screen(&amp;quot;PNG&amp;quot;, &amp;quot;./calc_snapshot.png&amp;quot;) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The method's arguments are the snapshot's format (i.e. “PNG”), and its path and name.&lt;br /&gt;
&lt;br /&gt;
Seems we are done?! Let's give our script another try...&lt;br /&gt;
&lt;br /&gt;
Well, despite the Script Console not showing any error, instead of displaying number 9 the snapshot may show 0. As a result, this “issue” has more to see with asynchronicity than with a bug: what we observe here is that we kind of took the snapshot too early, and the edit had no time to refresh its display.&lt;br /&gt;
&lt;br /&gt;
So before taking the snapshot, we should take some time to verify our input, adding below line right after the call to button 9's tap method:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
verify(12, &amp;quot;The taped number should display&amp;quot;) {@app.QLineEdit( :&amp;quot;displayText&amp;quot; =&amp;gt; @app.Button( :name =&amp;gt; 'nineButton' ).attribute(&amp;quot;text&amp;quot;))}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_11.png|800px|Writing a test from TDriver UI - 9 (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
We set a timeout (12 seconds) during which the edit's display value is compared with the text value of taped button. If both values correspond, script continues and snapshot is taken. But if values don't match before timeout expires, then script is halted and exits with code 1, and this information is reported into Script Console. 12 seconds is an arbitrary delay and we assume it is enough for the edit to show up correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Improving a test based on TDriver's features and Ruby syntax ==&lt;br /&gt;
In order to test every numbered button, we could duplicate the lines we have and just update the buttons and snapshots' name. Or we could take advantage of the functionalities offered by TDriver as well as by Ruby scripting language, and in order to prepare to write a program a bit more abstract, we can try to answer some questions like:&lt;br /&gt;
- is there a way to list every buttons at once?&lt;br /&gt;
- do numbered buttons have something in common?&lt;br /&gt;
- do numbered buttons have differences?&lt;br /&gt;
&lt;br /&gt;
Below is an example of a way to write such a script:&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_12.png|800px|Ruby script example (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sources and useful links ==&lt;br /&gt;
https://projects.forum.nokia.com/Testabilitydriver/wiki/FeatureVisualizerCodeEditor#WritingaScriptwithCodeEditor&lt;br /&gt;
https://projects.forum.nokia.com/Testabilitydriver/wiki&lt;br /&gt;
http://www.rubyist.net/~slagell/ruby/ &lt;br /&gt;
http://www.tutorialspoint.com/ruby/index.htm&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/File:TDriver_Tutorial_for_test_creation_12.png</id>
		<title>File:TDriver Tutorial for test creation 12.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/File:TDriver_Tutorial_for_test_creation_12.png"/>
				<updated>2011-04-29T14:25:20Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: uploaded a new version of &amp;amp;quot;File:TDriver Tutorial for test creation 12.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/File:TDriver_Tutorial_for_test_creation_12.png</id>
		<title>File:TDriver Tutorial for test creation 12.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/File:TDriver_Tutorial_for_test_creation_12.png"/>
				<updated>2011-04-29T14:19:45Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/File:TDriver_Tutorial_for_test_creation_11.png</id>
		<title>File:TDriver Tutorial for test creation 11.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/File:TDriver_Tutorial_for_test_creation_11.png"/>
				<updated>2011-04-29T14:04:14Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/File:TDriver_Tutorial_for_test_creation_10.png</id>
		<title>File:TDriver Tutorial for test creation 10.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/File:TDriver_Tutorial_for_test_creation_10.png"/>
				<updated>2011-04-29T13:59:56Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/File:TDriver_Tutorial_for_test_creation_9.png</id>
		<title>File:TDriver Tutorial for test creation 9.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/File:TDriver_Tutorial_for_test_creation_9.png"/>
				<updated>2011-04-29T13:57:51Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/File:TDriver_Tutorial_for_test_creation_8.png</id>
		<title>File:TDriver Tutorial for test creation 8.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/File:TDriver_Tutorial_for_test_creation_8.png"/>
				<updated>2011-04-29T13:57:09Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/File:TDriver_Tutorial_for_test_creation_7.png</id>
		<title>File:TDriver Tutorial for test creation 7.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/File:TDriver_Tutorial_for_test_creation_7.png"/>
				<updated>2011-04-29T13:55:30Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/File:TDriver_Tutorial_for_test_creation_6.png</id>
		<title>File:TDriver Tutorial for test creation 6.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/File:TDriver_Tutorial_for_test_creation_6.png"/>
				<updated>2011-04-29T13:53:52Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/File:TDriver_Tutorial_for_test_creation_5.png</id>
		<title>File:TDriver Tutorial for test creation 5.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/File:TDriver_Tutorial_for_test_creation_5.png"/>
				<updated>2011-04-29T13:51:47Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/File:TDriver_Tutorial_for_test_creation_4.png</id>
		<title>File:TDriver Tutorial for test creation 4.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/File:TDriver_Tutorial_for_test_creation_4.png"/>
				<updated>2011-04-29T13:50:21Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/File:TDriver_Tutorial_for_test_creation_3.png</id>
		<title>File:TDriver Tutorial for test creation 3.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/File:TDriver_Tutorial_for_test_creation_3.png"/>
				<updated>2011-04-29T13:47:46Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/File:TDriver_Tutorial_for_test_creation_2.png</id>
		<title>File:TDriver Tutorial for test creation 2.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/File:TDriver_Tutorial_for_test_creation_2.png"/>
				<updated>2011-04-29T13:42:04Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/File:TDriver_Tutorial_for_test_creation_1.png</id>
		<title>File:TDriver Tutorial for test creation 1.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/File:TDriver_Tutorial_for_test_creation_1.png"/>
				<updated>2011-04-29T13:40:06Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation</id>
		<title>Quality/QA-tools/TDriver/Getting Started/Tutorial for test creation</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation"/>
				<updated>2011-04-29T13:36:07Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Pre-requisites ==&lt;br /&gt;
TDriver and tests/calculator applications are installed.&lt;br /&gt;
In file /etc/tdriver/tdriver_parameters.xml , “sut_id” section is empty like below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	&amp;lt;sut id=&amp;quot;sut_qt&amp;quot; template=&amp;quot;qt&amp;quot;&amp;gt; &lt;br /&gt;
		&amp;lt;!-- use default values --&amp;gt; &lt;br /&gt;
	&amp;lt;/sut&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For detail, see http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started&lt;br /&gt;
&lt;br /&gt;
We can ensure everything is ready for further actions, by launching qttasserver, TDriver and calculator applications:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qttasserver &amp;amp;&lt;br /&gt;
tdriver_visualizer &amp;amp;&lt;br /&gt;
calculator -testability&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then clicking TDriver's “File &amp;gt; Refresh” menu item should lead to get the same view as below:&lt;br /&gt;
&lt;br /&gt;
[[File:TDriver_Tutorial_for_test_creation_0.png|800px|Default view (click to enlarge)]]&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation</id>
		<title>Quality/QA-tools/TDriver/Getting Started/Tutorial for test creation</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation"/>
				<updated>2011-04-29T13:32:58Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Pre-requisites ==&lt;br /&gt;
TDriver and tests/calculator applications are installed.&lt;br /&gt;
In file /etc/tdriver/tdriver_parameters.xml , “sut_id” section is empty like below:&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;sut id=&amp;quot;sut_qt&amp;quot; template=&amp;quot;qt&amp;quot;&amp;gt; &lt;br /&gt;
		&amp;lt;!-- use default values --&amp;gt; &lt;br /&gt;
	&amp;lt;/sut&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For detail, see http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started&lt;br /&gt;
&lt;br /&gt;
We can ensure everything is ready for further actions, by launching qttasserver, TDriver and calculator applications:&lt;br /&gt;
qttasserver &amp;amp;&lt;br /&gt;
tdriver_visualizer &amp;amp;&lt;br /&gt;
calculator -testability&lt;br /&gt;
&lt;br /&gt;
Then clicking TDriver's “File &amp;gt; Refresh” menu item should lead to get the same view as below:&lt;br /&gt;
&lt;br /&gt;
[[File:http://wiki.meego.com/File:TDriver_Tutorial_for_test_creation_0.png|800px|Default view (click to enlarge)]]&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation</id>
		<title>Quality/QA-tools/TDriver/Getting Started/Tutorial for test creation</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation"/>
				<updated>2011-04-29T13:31:44Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Pre-requisites ==&lt;br /&gt;
TDriver and tests/calculator applications are installed&lt;br /&gt;
In file /etc/tdriver/tdriver_parameters.xml , “sut_id” section is empty like below:&lt;br /&gt;
	&amp;lt;sut id=&amp;quot;sut_qt&amp;quot; template=&amp;quot;qt&amp;quot;&amp;gt; &lt;br /&gt;
		&amp;lt;!-- use default values --&amp;gt; &lt;br /&gt;
	&amp;lt;/sut&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For detail, see http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started&lt;br /&gt;
&lt;br /&gt;
We can ensure everything is ready for further actions, by launching qttasserver, TDriver and calculator applications:&lt;br /&gt;
qttasserver &amp;amp;&lt;br /&gt;
tdriver_visualizer &amp;amp;&lt;br /&gt;
calculator -testability&lt;br /&gt;
&lt;br /&gt;
Then clicking TDriver's “File &amp;gt; Refresh” menu item should lead to get the same view as below:&lt;br /&gt;
&lt;br /&gt;
[[File:http://wiki.meego.com/images/TDriver_Tutorial_for_test_creation_0.png|800px|Default view (click to enlarge)]]&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation</id>
		<title>Quality/QA-tools/TDriver/Getting Started/Tutorial for test creation</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation"/>
				<updated>2011-04-29T13:28:27Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: Adding a tutorial for test creation.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Pre-requisites ==&lt;br /&gt;
TDriver and tests/calculator applications are installed&lt;br /&gt;
In file /etc/tdriver/tdriver_parameters.xml , “sut_id” section is empty like below:&lt;br /&gt;
	&amp;lt;sut id=&amp;quot;sut_qt&amp;quot; template=&amp;quot;qt&amp;quot;&amp;gt; &lt;br /&gt;
		&amp;lt;!-- use default values --&amp;gt; &lt;br /&gt;
	&amp;lt;/sut&amp;gt; &lt;br /&gt;
&lt;br /&gt;
For detail, see http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started&lt;br /&gt;
&lt;br /&gt;
We can ensure everything is ready for further actions, by launching qttasserver, TDriver and calculator applications:&lt;br /&gt;
qttasserver &amp;amp;&lt;br /&gt;
tdriver_visualizer &amp;amp;&lt;br /&gt;
calculator -testability&lt;br /&gt;
&lt;br /&gt;
Then clicking TDriver's “File &amp;gt; Refresh” menu item should lead to get the same view as below:&lt;br /&gt;
[[File:Tutorial_for_test_creation_0.png|800px|Visualizer - default view (click to enlarge)]]&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/File:TDriver_Tutorial_for_test_creation_0.png</id>
		<title>File:TDriver Tutorial for test creation 0.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/File:TDriver_Tutorial_for_test_creation_0.png"/>
				<updated>2011-04-29T13:24:59Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started</id>
		<title>Quality/QA-tools/TDriver/Getting Started</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started"/>
				<updated>2011-04-29T13:17:53Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Testability Driver Getting Started Guide =&lt;br /&gt;
&lt;br /&gt;
This page describes the installation of the Testability Driver (TDriver) on your host machine.&lt;br /&gt;
&lt;br /&gt;
== Installing required packages from repositories ==&lt;br /&gt;
&lt;br /&gt;
We provide repositories for Fedora 13 and Ubuntu 10.04/10.10, and more will be added as soon as it's possible from OBS. For other platforms and versions you will need to compile the Qt components from source. &lt;br /&gt;
&lt;br /&gt;
First wee need to enable the Testing:Tools repository. See the [[Quality/QA-tools/How_to_set_up_repositories|How to set up repositories for QA-tools]] guide.&lt;br /&gt;
&lt;br /&gt;
For Ubuntu:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install qttas testability-driver-host visualizer # This can take several minutes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fedora:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install qttas testability-driver-host testability-driver-visualizer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start a new shell and you should have all the required environmental parameters set.&lt;br /&gt;
&lt;br /&gt;
== Other platforms == &lt;br /&gt;
&lt;br /&gt;
TDriver components can be installed on most Qt and Ruby supported platforms. The ruby components can be found from rubygems.org. You will need the following packages, or their equivalents installed:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rubygems ruby1.8-dev libxslt-dev libxml2-dev &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then install the gems:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo gem install testability-driver testability-driver-qt-sut-plugin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Building Qt components ===&lt;br /&gt;
&lt;br /&gt;
Build requirements for ubuntu 10.04:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libqt4-dev x11proto-xext-dev libxtst-dev &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Build requirements for Ubuntu 10.10:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libqt4-dev x11proto-xext-dev libxtst-dev libqtwebkit-dev &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Build requirements for Fedora:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo yum install libxtst-devel libqtwebkit-devel qt4-qmake gcc-c++ libqt4-devel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Compilation === &lt;br /&gt;
&lt;br /&gt;
Compile and install qttas-server:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone http://git.gitorious.org/tdriver/agent_qt.git # Note that this our development master. See the list of available tags if you want to checkout a released version.&lt;br /&gt;
cd agent_qt &lt;br /&gt;
qmake -r CONFIG+=no_mobility &lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualizer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone http://git.gitorious.org/tdriver/visualizer.git&lt;br /&gt;
cd visualizer&lt;br /&gt;
qmake -r &lt;br /&gt;
make &lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing the installation == &lt;br /&gt;
&lt;br /&gt;
Everything should now be installed. We need an application to test it with, so let's get one. Let's use a classic calculator application that is used in TDriver tests.&lt;br /&gt;
&lt;br /&gt;
Let's get it from git and compile it:&lt;br /&gt;
Build requiremens for Ubuntu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install git-core qt4-qmake qt4-dev-tools build-essential&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fedora&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo yum install git qt4-qmake gcc-c++&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compile and install&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone http://git.gitorious.org/tdriver/tests.git&lt;br /&gt;
cd tests/calculator&lt;br /&gt;
qmake # in Fedora qmake command is qmake-qt4&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we are ready to start the qttas-server and the calculator&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qttasserver &amp;amp;&lt;br /&gt;
calculator -testability &amp;amp;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see a simple calculator application. Next, let's start the visualizer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tdriver_visualizer &amp;amp; # If you compiled visualizer from source, it will be under /opt/tdriver_visualizer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the visualizer, select File-&amp;gt;Refresh. You should see a picture of the calculator application. If you hover your mouse above the picture, the visualizer will highlight the object that is currently under the cursor. &lt;br /&gt;
&lt;br /&gt;
[[File:Visualizer.png|800px|Visualizer window (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
Right click on an element, for example &amp;quot;1&amp;quot; button, and select &amp;quot;send tap to SUT&amp;quot;. The calculator should receive a click to the &amp;quot;1&amp;quot; button. If so, congratulations you have a working TDriver environment!&lt;br /&gt;
&lt;br /&gt;
== Running Automated Tests == &lt;br /&gt;
&lt;br /&gt;
We are ready to run an automated test. We will need [[http://cukes.info Cucumber]], so let's install it:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo gem install cucumber # This will take a few minutes and require gherkin-2.3.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We still need to edit the tdriver parameters. Add the following line to &amp;lt;tt&amp;gt;/etc/tdriver/tdriver_parameters.xml&amp;lt;/tt&amp;gt; inside&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;parameters&amp;gt;&amp;lt;/tt&amp;gt; tag:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;parameter name=&amp;quot;default_sut&amp;quot; value=&amp;quot;sut_qt&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We can use the tests repository we got the calculator from as an example. From there, we will run one test:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# cd &amp;lt;wherever you cloned the tdriver/tests repository&amp;gt;&lt;br /&gt;
cd test/&lt;br /&gt;
cucumber features/qt_widget_tap.feature:8 # Run one scenario from one feature&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Something like this should be displayed on the console:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tests/test$ cucumber features/qt_widget_tap.feature:8&lt;br /&gt;
@qt_linux @qt_windows @qt_symbian @qt_meego&lt;br /&gt;
Feature: MobyBehaviour::QT::Widget#tap&lt;br /&gt;
  As a test script writer&lt;br /&gt;
  I want to use tap method to simulate user tapping or clicking an object,&lt;br /&gt;
  so that I can test the MobyBehaviour::QT::Widget behaviour&lt;br /&gt;
&lt;br /&gt;
  Scenario: Tap a QWidget button                           # features/qt_widget_tap.feature:8&lt;br /&gt;
    Given I launch application &amp;quot;calculator&amp;quot;                # features/step_definitions/feature_common.rb:65&lt;br /&gt;
    When I execute &amp;quot;@app.Button(:name =&amp;gt; 'oneButton').tap&amp;quot; # features/step_definitions/feature_common.rb:165&lt;br /&gt;
    Then The calculator display says &amp;quot;1&amp;quot;                   # features/step_definitions/feature_common.rb:235&lt;br /&gt;
&lt;br /&gt;
1 scenario (1 passed)&lt;br /&gt;
3 steps (3 passed)&lt;br /&gt;
0m1.598s&lt;br /&gt;
~/tests/test$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Everything should be up and running now. You are ready for test development!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Testing Your Application === &lt;br /&gt;
&lt;br /&gt;
If your application is a Meegotouch application, the qttas plugin will be loaded automatically. If it is a standard Qt application, pass &amp;quot;-testability&amp;quot; as a command line parameter.&lt;br /&gt;
&lt;br /&gt;
=== Connecting to your MeeGo device === &lt;br /&gt;
&lt;br /&gt;
Note: If you used the &amp;quot;testability-driver-host&amp;quot; package to install TDriver, the ip address is set automatically to the &amp;quot;sut_qt_maemo&amp;quot; device.&lt;br /&gt;
&lt;br /&gt;
You need a working network connection to the device. For the N900, see the [[ARM/N900/Tips and Tricks/N900 USB Networking|N900 Networkig Guide]]. TDriver works over TCP/IP, so any device in the network can be tested.&lt;br /&gt;
&lt;br /&gt;
As an example, connection to the N900 we add the N900 ip address into /etc/tdriver/tdriver_parameters.xml:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;sut id=&amp;quot;sut_qt&amp;quot; template=&amp;quot;qt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;parameter name=&amp;quot;qttas_server_ip&amp;quot; value=&amp;quot;192.168.2.15&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;!-- other parameters.... --&amp;gt;&lt;br /&gt;
&amp;lt;/sut&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On the device, make sure the package &amp;quot;qttas-server&amp;quot; is installed and &amp;quot;qttasserver&amp;quot; is running as user. If you just installed the package, you will need to restart the applications to make them load the qttas plugin. On the N900, the qttasserver should start automatically and all supported applications should be available.&lt;br /&gt;
&lt;br /&gt;
If you refresh the visualizer, you should see the application content that is running on the N900. Note - If you edit the configuration file, the visualizer must be restarted.&lt;br /&gt;
&lt;br /&gt;
== What's Next ==&lt;br /&gt;
&lt;br /&gt;
=== TODO === &lt;br /&gt;
&lt;br /&gt;
* Making your application load the testability plug-in&lt;br /&gt;
* Making your application testable&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Links === &lt;br /&gt;
&lt;br /&gt;
* [https://projects.forum.nokia.com/Testabilitydriver/wiki/ TDriver wiki]&lt;br /&gt;
* [https://projects.forum.nokia.com/dav/Testabilitydriver/doc/api/qt_linux/ API Documentation]&lt;br /&gt;
* [http://gitorious.org/tdriver/ Gitorious project]&lt;br /&gt;
* [http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation Tutorial for test creation]&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started</id>
		<title>Quality/QA-tools/TDriver/Getting Started</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started"/>
				<updated>2011-04-29T13:17:14Z</updated>
		
		<summary type="html">&lt;p&gt;Heliacorreia: Adding link to &amp;quot;Tutorial for test creation&amp;quot; page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Testability Driver Getting Started Guide =&lt;br /&gt;
&lt;br /&gt;
This page describes the installation of the Testability Driver (TDriver) on your host machine.&lt;br /&gt;
&lt;br /&gt;
== Installing required packages from repositories ==&lt;br /&gt;
&lt;br /&gt;
We provide repositories for Fedora 13 and Ubuntu 10.04/10.10, and more will be added as soon as it's possible from OBS. For other platforms and versions you will need to compile the Qt components from source. &lt;br /&gt;
&lt;br /&gt;
First wee need to enable the Testing:Tools repository. See the [[Quality/QA-tools/How_to_set_up_repositories|How to set up repositories for QA-tools]] guide.&lt;br /&gt;
&lt;br /&gt;
For Ubuntu:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install qttas testability-driver-host visualizer # This can take several minutes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fedora:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install qttas testability-driver-host testability-driver-visualizer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start a new shell and you should have all the required environmental parameters set.&lt;br /&gt;
&lt;br /&gt;
== Other platforms == &lt;br /&gt;
&lt;br /&gt;
TDriver components can be installed on most Qt and Ruby supported platforms. The ruby components can be found from rubygems.org. You will need the following packages, or their equivalents installed:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rubygems ruby1.8-dev libxslt-dev libxml2-dev &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then install the gems:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo gem install testability-driver testability-driver-qt-sut-plugin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Building Qt components ===&lt;br /&gt;
&lt;br /&gt;
Build requirements for ubuntu 10.04:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libqt4-dev x11proto-xext-dev libxtst-dev &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Build requirements for Ubuntu 10.10:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libqt4-dev x11proto-xext-dev libxtst-dev libqtwebkit-dev &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Build requirements for Fedora:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo yum install libxtst-devel libqtwebkit-devel qt4-qmake gcc-c++ libqt4-devel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Compilation === &lt;br /&gt;
&lt;br /&gt;
Compile and install qttas-server:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone http://git.gitorious.org/tdriver/agent_qt.git # Note that this our development master. See the list of available tags if you want to checkout a released version.&lt;br /&gt;
cd agent_qt &lt;br /&gt;
qmake -r CONFIG+=no_mobility &lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Visualizer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone http://git.gitorious.org/tdriver/visualizer.git&lt;br /&gt;
cd visualizer&lt;br /&gt;
qmake -r &lt;br /&gt;
make &lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing the installation == &lt;br /&gt;
&lt;br /&gt;
Everything should now be installed. We need an application to test it with, so let's get one. Let's use a classic calculator application that is used in TDriver tests.&lt;br /&gt;
&lt;br /&gt;
Let's get it from git and compile it:&lt;br /&gt;
Build requiremens for Ubuntu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install git-core qt4-qmake qt4-dev-tools build-essential&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fedora&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo yum install git qt4-qmake gcc-c++&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compile and install&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone http://git.gitorious.org/tdriver/tests.git&lt;br /&gt;
cd tests/calculator&lt;br /&gt;
qmake # in Fedora qmake command is qmake-qt4&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we are ready to start the qttas-server and the calculator&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
qttasserver &amp;amp;&lt;br /&gt;
calculator -testability &amp;amp;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see a simple calculator application. Next, let's start the visualizer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tdriver_visualizer &amp;amp; # If you compiled visualizer from source, it will be under /opt/tdriver_visualizer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the visualizer, select File-&amp;gt;Refresh. You should see a picture of the calculator application. If you hover your mouse above the picture, the visualizer will highlight the object that is currently under the cursor. &lt;br /&gt;
&lt;br /&gt;
[[File:Visualizer.png|800px|Visualizer window (click to enlarge)]]&lt;br /&gt;
&lt;br /&gt;
Right click on an element, for example &amp;quot;1&amp;quot; button, and select &amp;quot;send tap to SUT&amp;quot;. The calculator should receive a click to the &amp;quot;1&amp;quot; button. If so, congratulations you have a working TDriver environment!&lt;br /&gt;
&lt;br /&gt;
== Running Automated Tests == &lt;br /&gt;
&lt;br /&gt;
We are ready to run an automated test. We will need [[http://cukes.info Cucumber]], so let's install it:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo gem install cucumber # This will take a few minutes and require gherkin-2.3.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We still need to edit the tdriver parameters. Add the following line to &amp;lt;tt&amp;gt;/etc/tdriver/tdriver_parameters.xml&amp;lt;/tt&amp;gt; inside&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;parameters&amp;gt;&amp;lt;/tt&amp;gt; tag:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;parameter name=&amp;quot;default_sut&amp;quot; value=&amp;quot;sut_qt&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We can use the tests repository we got the calculator from as an example. From there, we will run one test:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# cd &amp;lt;wherever you cloned the tdriver/tests repository&amp;gt;&lt;br /&gt;
cd test/&lt;br /&gt;
cucumber features/qt_widget_tap.feature:8 # Run one scenario from one feature&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Something like this should be displayed on the console:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/tests/test$ cucumber features/qt_widget_tap.feature:8&lt;br /&gt;
@qt_linux @qt_windows @qt_symbian @qt_meego&lt;br /&gt;
Feature: MobyBehaviour::QT::Widget#tap&lt;br /&gt;
  As a test script writer&lt;br /&gt;
  I want to use tap method to simulate user tapping or clicking an object,&lt;br /&gt;
  so that I can test the MobyBehaviour::QT::Widget behaviour&lt;br /&gt;
&lt;br /&gt;
  Scenario: Tap a QWidget button                           # features/qt_widget_tap.feature:8&lt;br /&gt;
    Given I launch application &amp;quot;calculator&amp;quot;                # features/step_definitions/feature_common.rb:65&lt;br /&gt;
    When I execute &amp;quot;@app.Button(:name =&amp;gt; 'oneButton').tap&amp;quot; # features/step_definitions/feature_common.rb:165&lt;br /&gt;
    Then The calculator display says &amp;quot;1&amp;quot;                   # features/step_definitions/feature_common.rb:235&lt;br /&gt;
&lt;br /&gt;
1 scenario (1 passed)&lt;br /&gt;
3 steps (3 passed)&lt;br /&gt;
0m1.598s&lt;br /&gt;
~/tests/test$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Everything should be up and running now. You are ready for test development!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Testing Your Application === &lt;br /&gt;
&lt;br /&gt;
If your application is a Meegotouch application, the qttas plugin will be loaded automatically. If it is a standard Qt application, pass &amp;quot;-testability&amp;quot; as a command line parameter.&lt;br /&gt;
&lt;br /&gt;
=== Connecting to your MeeGo device === &lt;br /&gt;
&lt;br /&gt;
Note: If you used the &amp;quot;testability-driver-host&amp;quot; package to install TDriver, the ip address is set automatically to the &amp;quot;sut_qt_maemo&amp;quot; device.&lt;br /&gt;
&lt;br /&gt;
You need a working network connection to the device. For the N900, see the [[ARM/N900/Tips and Tricks/N900 USB Networking|N900 Networkig Guide]]. TDriver works over TCP/IP, so any device in the network can be tested.&lt;br /&gt;
&lt;br /&gt;
As an example, connection to the N900 we add the N900 ip address into /etc/tdriver/tdriver_parameters.xml:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;sut id=&amp;quot;sut_qt&amp;quot; template=&amp;quot;qt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;parameter name=&amp;quot;qttas_server_ip&amp;quot; value=&amp;quot;192.168.2.15&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;!-- other parameters.... --&amp;gt;&lt;br /&gt;
&amp;lt;/sut&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On the device, make sure the package &amp;quot;qttas-server&amp;quot; is installed and &amp;quot;qttasserver&amp;quot; is running as user. If you just installed the package, you will need to restart the applications to make them load the qttas plugin. On the N900, the qttasserver should start automatically and all supported applications should be available.&lt;br /&gt;
&lt;br /&gt;
If you refresh the visualizer, you should see the application content that is running on the N900. Note - If you edit the configuration file, the visualizer must be restarted.&lt;br /&gt;
&lt;br /&gt;
== What's Next ==&lt;br /&gt;
&lt;br /&gt;
=== TODO === &lt;br /&gt;
&lt;br /&gt;
* Making your application load the testability plug-in&lt;br /&gt;
* Making your application testable&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Links === &lt;br /&gt;
&lt;br /&gt;
* [https://projects.forum.nokia.com/Testabilitydriver/wiki/ TDriver wiki]&lt;br /&gt;
* [https://projects.forum.nokia.com/dav/Testabilitydriver/doc/api/qt_linux/ API Documentation]&lt;br /&gt;
* [http://gitorious.org/tdriver/ Gitorious project]&lt;br /&gt;
* [http://wiki.meego.com/Quality/QA-tools/TDriver/Getting_Started/Tutorial_for_test_creation Tutorial/ for test creation]&lt;/div&gt;</summary>
		<author><name>Heliacorreia</name></author>	</entry>

	</feed>