/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/*
 * Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/licenses/publicdomain/
 * Contributor: 
 */


/**
 *  File Name:          template.js
 *  Reference:          ** replace with bugzilla URL or document reference **
 *  Description:        ** replace with description of test **
 *  Author:             ** replace with your e-mail address **
 */

var SECTION = "";       // provide a document reference (ie, ECMA section)
var VERSION = "ECMA";   // Version of JavaScript or ECMA
var TITLE   = "";       // Provide ECMA section title or a description
var BUGNUMBER = "";     // Provide URL to bugsplat or bugzilla report

startTest();               // leave this alone

/*
 * Calls to AddTestCase here. AddTestCase is a function that is defined
 * in shell.js and takes three arguments:
 * - a string representation of what is being tested
 * - the expected result
 * - the actual result
 *
 * For example, a test might look like this:
 *
 * AddTestCase("** description",
 *             "** expected value",
 *             "** actual value");
 */

// leave this alone.  this executes the test cases and
// displays results.
test();      
