gecko/testing/mochitest
William Lachance 382c927895 Bug 795496 - Make mozdevice raise exceptions on error;r=ahal,jmaher
It turns out that relying on the user to check return codes for every
command was non-intuitive and resulted in many hard to trace bugs.
Now most functinos just return "None", and raise a DMError when there's an
exception. The exception to this are functions like dirExists, which now return
booleans, and throw exceptions on error. This is a fairly major refactor,
and also involved the following internal changes:

* Removed FileError and AgentError exceptions, replaced with DMError
  (having to manage three different types of exceptions was confusing,
  all the more so when we're raising them)
* Docstrings updated to remove references to return values where no
  longer relevant
* pushFile no longer will create a directory to accomodate the file
  if it doesn't exist (this makes it consistent with devicemanagerADB)
* dmSUT we validate the file, but assume that we get something back
  from the agent, instead of falling back to manual validation in the
  case that we didn't
* isDir and dirExists had the same intention, but different
  implementations for dmSUT. Replaced the dmSUT impl of getDirectory
  with that of isDir's (which was much simpler). Removed
  isDir from devicemanager.py, since it wasn't used externally
* killProcess modified to check for process existence before running
  (since the actual internal kill command will throw an exception
  if the process doesn't exist)

In addition to all this, more unit tests have been added to test these
changes for devicemanagerSUT.
2012-10-04 11:28:07 -04:00
..
chrome
dynamic
MochiKit
pywebsocket
roboextender
ssltunnel Bug 789847 - Remove PR_CALLBACK usage from tree 2012-09-25 11:18:38 -05:00
static
tests b=683143,792462; Some tests call SimpleTest.finish() twice/guard against that; r=ehsan 2012-10-01 17:51:10 -04:00
android.json Bug 789392 - Allow mozapp frames to window.close() themselves. r=bz 2012-10-04 00:44:50 -04:00
browser-harness.xul
browser-test-overlay.xul
browser-test.js bug 770770: refactor webapp runtime test harness to reduce complexity/special-casing; r=adw 2012-08-14 15:27:26 -07:00
cc-analyzer.js
chrome-harness.js
gen_template.pl
harness-overlay.xul
harness.xul
install.rdf
jar.mn Bug 762908 - Rip enablePrivilege out of spidermonkey tests. r=ted 2012-09-20 09:06:50 -04:00
Makefile.in Bug 762908 - Rip enablePrivilege out of spidermonkey tests. r=ted 2012-09-20 09:06:50 -04:00
plain-loop.html
pywebsocket_wrapper.py
README.txt
redirect.html
runtests.py Bug 787916 - Hide Mochitest test table with --close-when-done option. r=jmaher 2012-09-19 01:28:39 +02:00
runtestsb2g.py Bug 795496 - Make mozdevice raise exceptions on error;r=ahal,jmaher 2012-10-04 11:28:07 -04:00
runtestsremote.py Bug 795496 - Make mozdevice raise exceptions on error;r=ahal,jmaher 2012-10-04 11:28:07 -04:00
runtestsvmware.py
server.js Bug 787916 - Hide Mochitest test table with --close-when-done option. r=jmaher 2012-09-19 01:28:39 +02:00

 ----------------
 mochitest README
 ----------------

Steps to get started:

 1.) Run the runtests.pl script to start the server.
 
     Currently, the test script automatically determines the location
     of *Firefox*.

 2.) gen_template.pl will generate test templates for HTML, XUL, and XHTML.
     Read the comment at the top of the file for usage instructions.

 3.) Write a test.


Example test:

<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=345656
-->
<head>
  <title>Test for Bug 345656</title>
  <script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>        
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
<p id="display"></p>
<div id="content" style="display: none">
  
</div>
<pre id="test">
<script class="testbody" type="text/javascript">

/** Test for Bug 345656 **/
//
//add information to show on the test page
//
$("display").innerHTML = "doing stuff...";

//
// The '$' is function is shorthand for getElementById. This is the same thing:
//
document.getElementById("display").innerHTML = "doing stuff...";

//
// you can add content that you don't want to clutter 
// the display to the content div.
//
// You can write directly, or you can use MochiKit functions
// to do it in JS like this:
//
appendChildNodes($("content"),
                 DIV({class: "qux"},
                     SPAN({id: "span42"}, "content"))
                 );

//
// the ok() function is like assert
//
ok(true, "checking to see if true is true);

//
// this will fail
//
ok(1==2, "1 equals 2?");


//
// this will be marked as a todo.
// When we fix 1 so it equals 2, we'll need to change this 
// function to ok() or is().
//
todo(1==2, "1 equals 2?");

//
// is() takes two args
//
myVar = "foo";
is(myVar, "foo", "checking to see if myVar is 'foo'");

//
// Tests can run in event handlers.
// Call this to tell SimpleTest to wait for SimpleTest.finish() 
//
SimpleTest.waitForExplicitFinish();

//
// event handler:
//
function event_fired(ev) {
  is(ev.newValue, "width: auto;", "DOMAttrModified event reports correct newValue");
  SimpleTest.finish(); // trigger the end of our test sequence
}

//
// Hook up the event. Mochikit.Signal has many conveniences for this, if you want.
//
$("content").addEventListener("DOMAttrModified", event_fired, false);

//
// Fire the event.
//
$("content").style.width = "auto";

</script>
</pre>
</body>
</html>