Bug 1098071 - Move uitour.js library out of test directory. r=MattN
authorBlair McBride <bmcbride@mozilla.com>
Tue, 06 Jan 2015 19:13:46 +1300
changeset 222230 1f6ca2c7d05a89a27e8b22df0bfc19953cb8857b
parent 222229 9477cb31bf80a66b74c27a3848891f1f13a4667f
child 222231 f9d665c7c6675bacf91613bca0c7e8de2a24df87
push id28060
push userryanvm@gmail.com
push dateTue, 06 Jan 2015 16:02:34 +0000
treeherdermozilla-central@b42615e51c81 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersMattN
bugs1098071
milestone37.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1098071 - Move uitour.js library out of test directory. r=MattN
browser/base/content/content-UITour.js
browser/base/jar.mn
browser/components/moz.build
browser/components/uitour/UITour-lib.js
browser/components/uitour/UITour.jsm
browser/components/uitour/content-UITour.js
browser/components/uitour/jar.mn
browser/components/uitour/moz.build
browser/components/uitour/test/browser.ini
browser/components/uitour/test/browser_UITour.js
browser/components/uitour/test/browser_UITour2.js
browser/components/uitour/test/browser_UITour3.js
browser/components/uitour/test/browser_UITour_annotation_size_attributes.js
browser/components/uitour/test/browser_UITour_availableTargets.js
browser/components/uitour/test/browser_UITour_detach_tab.js
browser/components/uitour/test/browser_UITour_loop.js
browser/components/uitour/test/browser_UITour_modalDialog.js
browser/components/uitour/test/browser_UITour_observe.js
browser/components/uitour/test/browser_UITour_panel_close_annotation.js
browser/components/uitour/test/browser_UITour_registerPageID.js
browser/components/uitour/test/browser_UITour_resetProfile.js
browser/components/uitour/test/browser_UITour_sync.js
browser/components/uitour/test/head.js
browser/components/uitour/test/image.png
browser/components/uitour/test/uitour.html
browser/modules/UITour.jsm
browser/modules/moz.build
browser/modules/test/browser.ini
browser/modules/test/browser_UITour.js
browser/modules/test/browser_UITour2.js
browser/modules/test/browser_UITour3.js
browser/modules/test/browser_UITour_annotation_size_attributes.js
browser/modules/test/browser_UITour_availableTargets.js
browser/modules/test/browser_UITour_detach_tab.js
browser/modules/test/browser_UITour_loop.js
browser/modules/test/browser_UITour_modalDialog.js
browser/modules/test/browser_UITour_observe.js
browser/modules/test/browser_UITour_panel_close_annotation.js
browser/modules/test/browser_UITour_registerPageID.js
browser/modules/test/browser_UITour_resetProfile.js
browser/modules/test/browser_UITour_sync.js
browser/modules/test/head.js
browser/modules/test/image.png
browser/modules/test/uitour.html
browser/modules/test/uitour.js
--- a/browser/base/jar.mn
+++ b/browser/base/jar.mn
@@ -72,17 +72,16 @@ browser.jar:
         content/browser/aboutTabCrashed.js            (content/aboutTabCrashed.js)
         content/browser/aboutTabCrashed.xhtml         (content/aboutTabCrashed.xhtml)
 *       content/browser/browser.css                   (content/browser.css)
 *       content/browser/browser.js                    (content/browser.js)
 *       content/browser/browser.xul                   (content/browser.xul)
 *       content/browser/browser-tabPreviews.xml       (content/browser-tabPreviews.xml)
 *       content/browser/chatWindow.xul                (content/chatWindow.xul)
         content/browser/content.js                    (content/content.js)
-        content/browser/content-UITour.js             (content/content-UITour.js)
         content/browser/defaultthemes/1.footer.jpg    (content/defaultthemes/1.footer.jpg)
         content/browser/defaultthemes/1.header.jpg    (content/defaultthemes/1.header.jpg)
         content/browser/defaultthemes/1.icon.jpg      (content/defaultthemes/1.icon.jpg)
         content/browser/defaultthemes/1.preview.jpg   (content/defaultthemes/1.preview.jpg)
         content/browser/defaultthemes/2.footer.jpg    (content/defaultthemes/2.footer.jpg)
         content/browser/defaultthemes/2.header.jpg    (content/defaultthemes/2.header.jpg)
         content/browser/defaultthemes/2.icon.jpg      (content/defaultthemes/2.icon.jpg)
         content/browser/defaultthemes/2.preview.jpg   (content/defaultthemes/2.preview.jpg)
--- a/browser/components/moz.build
+++ b/browser/components/moz.build
@@ -6,27 +6,28 @@
 
 DIRS += [
     'about',
     'customizableui',
     'dirprovider',
     'downloads',
     'feeds',
     'loop',
+    'migration',
     'places',
     'preferences',
     'privatebrowsing',
     'search',
     'sessionstore',
     'shell',
     'selfsupport',
     'sidebar',
     'tabview',
+    'uitour',
     'translation',
-    'migration',
 ]
 
 DIRS += ['build']
 
 XPIDL_SOURCES += [
     'nsIBrowserGlue.idl',
     'nsIBrowserHandler.idl',
 ]
rename from browser/modules/test/uitour.js
rename to browser/components/uitour/UITour-lib.js
rename from browser/modules/UITour.jsm
rename to browser/components/uitour/UITour.jsm
rename from browser/base/content/content-UITour.js
rename to browser/components/uitour/content-UITour.js
--- a/browser/base/content/content-UITour.js
+++ b/browser/components/uitour/content-UITour.js
@@ -1,8 +1,12 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+* License, v. 2.0. If a copy of the MPL was not distributed with this
+* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
 let {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
 
 const PREF_TEST_WHITELIST = "browser.uitour.testingOrigins";
 const UITOUR_PERMISSION   = "uitour";
 
 let UITourListener = {
   handleEvent: function (event) {
     if (!Services.prefs.getBoolPref("browser.uitour.enabled")) {
new file mode 100644
--- /dev/null
+++ b/browser/components/uitour/jar.mn
@@ -0,0 +1,6 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+browser.jar:
+       content/browser/content-UITour.js
new file mode 100644
--- /dev/null
+++ b/browser/components/uitour/moz.build
@@ -0,0 +1,13 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+EXTRA_PP_JS_MODULES += [
+    'UITour.jsm',
+]
+
+JAR_MANIFESTS += ['jar.mn']
+
+BROWSER_CHROME_MANIFESTS += [
+    'test/browser.ini',
+]
new file mode 100644
--- /dev/null
+++ b/browser/components/uitour/test/browser.ini
@@ -0,0 +1,34 @@
+[DEFAULT]
+support-files =
+  head.js
+  image.png
+  uitour.html
+  ../UITour-lib.js
+
+[browser_UITour.js]
+skip-if = os == "linux" || e10s # Intermittent failures, bug 951965
+[browser_UITour2.js]
+skip-if = e10s # Bug 941428 - UITour.jsm not e10s friendly
+[browser_UITour3.js]
+skip-if = os == "linux" || e10s # Linux: Bug 986760, Bug 989101; e10s: Bug 941428 - UITour.jsm not e10s friendly
+[browser_UITour_availableTargets.js]
+skip-if = e10s # Bug 941428 - UITour.jsm not e10s friendly
+[browser_UITour_detach_tab.js]
+skip-if = e10s # Bug 941428 - UITour.jsm not e10s friendly
+[browser_UITour_annotation_size_attributes.js]
+skip-if = e10s # Bug 941428 - UITour.jsm not e10s friendly.
+[browser_UITour_loop.js]
+skip-if = e10s # Bug 941428 - UITour.jsm not e10s friendly.
+[browser_UITour_modalDialog.js]
+run-if = os == "mac" # modal dialog disabling only working on OS X
+skip-if = e10s # Bug 941428 - UITour.jsm not e10s friendly
+[browser_UITour_observe.js]
+skip-if = e10s # Bug 941428 - UITour.jsm not e10s friendly.
+[browser_UITour_panel_close_annotation.js]
+skip-if = true # Disabled due to frequent failures, bugs 1026310 and 1032137
+[browser_UITour_registerPageID.js]
+skip-if = e10s # Bug 941428 - UITour.jsm not e10s friendly
+[browser_UITour_sync.js]
+skip-if = e10s # Bug 941428 - UITour.jsm not e10s friendly
+[browser_UITour_resetProfile.js]
+skip-if = e10s # Bug 941428 - UITour.jsm not e10s friendly
rename from browser/modules/test/browser_UITour.js
rename to browser/components/uitour/test/browser_UITour.js
rename from browser/modules/test/browser_UITour2.js
rename to browser/components/uitour/test/browser_UITour2.js
rename from browser/modules/test/browser_UITour3.js
rename to browser/components/uitour/test/browser_UITour3.js
rename from browser/modules/test/browser_UITour_annotation_size_attributes.js
rename to browser/components/uitour/test/browser_UITour_annotation_size_attributes.js
rename from browser/modules/test/browser_UITour_availableTargets.js
rename to browser/components/uitour/test/browser_UITour_availableTargets.js
rename from browser/modules/test/browser_UITour_detach_tab.js
rename to browser/components/uitour/test/browser_UITour_detach_tab.js
rename from browser/modules/test/browser_UITour_loop.js
rename to browser/components/uitour/test/browser_UITour_loop.js
rename from browser/modules/test/browser_UITour_modalDialog.js
rename to browser/components/uitour/test/browser_UITour_modalDialog.js
rename from browser/modules/test/browser_UITour_observe.js
rename to browser/components/uitour/test/browser_UITour_observe.js
rename from browser/modules/test/browser_UITour_panel_close_annotation.js
rename to browser/components/uitour/test/browser_UITour_panel_close_annotation.js
rename from browser/modules/test/browser_UITour_registerPageID.js
rename to browser/components/uitour/test/browser_UITour_registerPageID.js
rename from browser/modules/test/browser_UITour_resetProfile.js
rename to browser/components/uitour/test/browser_UITour_resetProfile.js
rename from browser/modules/test/browser_UITour_sync.js
rename to browser/components/uitour/test/browser_UITour_sync.js
copy from browser/modules/test/head.js
copy to browser/components/uitour/test/head.js
--- a/browser/modules/test/head.js
+++ b/browser/components/uitour/test/head.js
@@ -1,15 +1,13 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
+Cu.import("resource://gre/modules/Promise.jsm");
+Cu.import("resource://gre/modules/Task.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "UITour",
+                                  "resource:///modules/UITour.jsm");
 
-Cu.import("resource://gre/modules/Promise.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "UITour",
-  "resource:///modules/UITour.jsm");
-Cu.import("resource://gre/modules/Task.jsm");
 
 const SINGLE_TRY_TIMEOUT = 100;
 const NUMBER_OF_TRIES = 30;
 
 function waitForConditionPromise(condition, timeoutMsg, tryCount=NUMBER_OF_TRIES) {
   let defer = Promise.defer();
   let tries = 0;
   function checkCondition() {
rename from browser/modules/test/image.png
rename to browser/components/uitour/test/image.png
rename from browser/modules/test/uitour.html
rename to browser/components/uitour/test/uitour.html
--- a/browser/modules/test/uitour.html
+++ b/browser/components/uitour/test/uitour.html
@@ -1,14 +1,14 @@
 <!DOCTYPE html>
 <html>
   <head>
     <meta charset="utf-8" />
     <title>UITour test</title>
-    <script type="application/javascript" src="uitour.js">
+    <script type="application/javascript" src="UITour-lib.js">
     </script>
     <script type="application/javascript">
       var callbackResult, callbackData;
       function makeCallback(name) {
         return (function(data) {
           callbackResult = name;
           callbackData = data;
         });
--- a/browser/modules/moz.build
+++ b/browser/modules/moz.build
@@ -45,17 +45,16 @@ if CONFIG['NIGHTLY_BUILD']:
     EXTRA_JS_MODULES += [
         'SignInToWebsite.jsm',
     ]
 
 EXTRA_PP_JS_MODULES += [
     'AboutHome.jsm',
     'PluginContent.jsm',
     'RecentWindow.jsm',
-    'UITour.jsm',
     'webrtcUI.jsm',
 ]
 
 EXTRA_PP_COMPONENTS += [
     'browsermodules.manifest',
 ]
 
 if CONFIG['MOZILLA_OFFICIAL']:
--- a/browser/modules/test/browser.ini
+++ b/browser/modules/test/browser.ini
@@ -1,48 +1,19 @@
 [DEFAULT]
 support-files =
   head.js
-  image.png
-  uitour.*
 
 [browser_BrowserUITelemetry_buckets.js]
 [browser_ContentSearch.js]
 skip-if = e10s
 support-files =
   contentSearch.js
   contentSearchBadImage.xml
   contentSearchSuggestions.sjs
   contentSearchSuggestions.xml
 [browser_NetworkPrioritizer.js]
 skip-if = e10s # Bug 666804 - Support NetworkPrioritizer in e10s
 [browser_SignInToWebsite.js]
 skip-if = e10s # Bug 941426 - SignIntoWebsite.jsm not e10s friendly
-[browser_UITour.js]
-skip-if = os == "linux" || e10s # Intermittent failures, bug 951965
-[browser_UITour2.js]
-skip-if = e10s # Bug 941428 - UITour.jsm not e10s friendly
-[browser_UITour3.js]
-skip-if = os == "linux" || e10s # Linux: Bug 986760, Bug 989101; e10s: Bug 941428 - UITour.jsm not e10s friendly
-[browser_UITour_availableTargets.js]
-skip-if = e10s # Bug 941428 - UITour.jsm not e10s friendly
-[browser_UITour_detach_tab.js]
-skip-if = e10s # Bug 941428 - UITour.jsm not e10s friendly
-[browser_UITour_annotation_size_attributes.js]
-skip-if = e10s # Bug 941428 - UITour.jsm not e10s friendly.
-[browser_UITour_loop.js]
-skip-if = e10s # Bug 941428 - UITour.jsm not e10s friendly.
-[browser_UITour_modalDialog.js]
-run-if = os == "mac" # modal dialog disabling only working on OS X
-skip-if = e10s # Bug 941428 - UITour.jsm not e10s friendly
-[browser_UITour_observe.js]
-skip-if = e10s # Bug 941428 - UITour.jsm not e10s friendly.
-[browser_UITour_panel_close_annotation.js]
-skip-if = true # Disabled due to frequent failures, bugs 1026310 and 1032137
-[browser_UITour_registerPageID.js]
-skip-if = e10s # Bug 941428 - UITour.jsm not e10s friendly
-[browser_UITour_sync.js]
-skip-if = e10s # Bug 941428 - UITour.jsm not e10s friendly
-[browser_UITour_resetProfile.js]
-skip-if = e10s # Bug 941428 - UITour.jsm not e10s friendly
 [browser_taskbar_preview.js]
 run-if = os == "win"
 skip-if = e10s # Bug 666808 - AeroPeek support for e10s
--- a/browser/modules/test/head.js
+++ b/browser/modules/test/head.js
@@ -1,15 +1,9 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
 Cu.import("resource://gre/modules/Promise.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "UITour",
-  "resource:///modules/UITour.jsm");
-Cu.import("resource://gre/modules/Task.jsm");
 
 const SINGLE_TRY_TIMEOUT = 100;
 const NUMBER_OF_TRIES = 30;
 
 function waitForConditionPromise(condition, timeoutMsg, tryCount=NUMBER_OF_TRIES) {
   let defer = Promise.defer();
   let tries = 0;
   function checkCondition() {
@@ -32,245 +26,8 @@ function waitForConditionPromise(conditi
   return defer.promise;
 }
 
 function waitForCondition(condition, nextTest, errorMsg) {
   waitForConditionPromise(condition, errorMsg).then(nextTest, (reason) => {
     ok(false, reason + (reason.stack ? "\n" + e.stack : ""));
   });
 }
-
-/**
- * Wrapper to partially transition tests to Task.
- */
-function taskify(fun) {
-  return (done) => {
-    return Task.spawn(fun).then(done, (reason) => {
-      ok(false, reason);
-      done();
-    });
-  }
-}
-
-function is_hidden(element) {
-  var style = element.ownerDocument.defaultView.getComputedStyle(element, "");
-  if (style.display == "none")
-    return true;
-  if (style.visibility != "visible")
-    return true;
-  if (style.display == "-moz-popup")
-    return ["hiding","closed"].indexOf(element.state) != -1;
-
-  // Hiding a parent element will hide all its children
-  if (element.parentNode != element.ownerDocument)
-    return is_hidden(element.parentNode);
-
-  return false;
-}
-
-function is_visible(element) {
-  var style = element.ownerDocument.defaultView.getComputedStyle(element, "");
-  if (style.display == "none")
-    return false;
-  if (style.visibility != "visible")
-    return false;
-  if (style.display == "-moz-popup" && element.state != "open")
-    return false;
-
-  // Hiding a parent element will hide all its children
-  if (element.parentNode != element.ownerDocument)
-    return is_visible(element.parentNode);
-
-  return true;
-}
-
-function is_element_visible(element, msg) {
-  isnot(element, null, "Element should not be null, when checking visibility");
-  ok(is_visible(element), msg);
-}
-
-function waitForElementToBeVisible(element, nextTest, msg) {
-  waitForCondition(() => is_visible(element),
-                   () => {
-                     ok(true, msg);
-                     nextTest();
-                   },
-                   "Timeout waiting for visibility: " + msg);
-}
-
-function waitForElementToBeHidden(element, nextTest, msg) {
-  waitForCondition(() => is_hidden(element),
-                   () => {
-                     ok(true, msg);
-                     nextTest();
-                   },
-                   "Timeout waiting for invisibility: " + msg);
-}
-
-function elementVisiblePromise(element, msg) {
-  return waitForConditionPromise(() => is_visible(element), "Timeout waiting for visibility: " + msg);
-}
-
-function elementHiddenPromise(element, msg) {
-  return waitForConditionPromise(() => is_hidden(element), "Timeout waiting for invisibility: " + msg);
-}
-
-function waitForPopupAtAnchor(popup, anchorNode, nextTest, msg) {
-  waitForCondition(() => is_visible(popup) && popup.popupBoxObject.anchorNode == anchorNode,
-                   () => {
-                     ok(true, msg);
-                     is_element_visible(popup, "Popup should be visible");
-                     nextTest();
-                   },
-                   "Timeout waiting for popup at anchor: " + msg);
-}
-
-function hideInfoPromise(...args) {
-  let popup = document.getElementById("UITourTooltip");
-  gContentAPI.hideInfo.apply(gContentAPI, args);
-  return promisePanelElementHidden(window, popup);
-}
-
-function showInfoPromise(...args) {
-  let popup = document.getElementById("UITourTooltip");
-  gContentAPI.showInfo.apply(gContentAPI, args);
-  return promisePanelElementShown(window, popup);
-}
-
-function showMenuPromise(name) {
-  return new Promise(resolve => {
-    gContentAPI.showMenu(name, () => resolve());
-  });
-}
-
-function waitForCallbackResultPromise() {
-  return waitForConditionPromise(() => {
-    return gContentWindow.callbackResult;
-  }, "callback should be called");
-}
-
-function addPinnedTabPromise() {
-  gContentAPI.addPinnedTab();
-  return waitForConditionPromise(() => {
-    let tabInfo = UITour.pinnedTabs.get(window);
-    if (!tabInfo) {
-      return false;
-    }
-    return tabInfo.tab.pinned;
-  });
-}
-
-function removePinnedTabPromise() {
-  gContentAPI.removePinnedTab();
-  return waitForConditionPromise(() => {
-    let tabInfo = UITour.pinnedTabs.get(window);
-    return tabInfo == null;
-  });
-}
-
-function promisePanelShown(win) {
-  let panelEl = win.PanelUI.panel;
-  return promisePanelElementShown(win, panelEl);
-}
-
-function promisePanelElementEvent(win, aPanel, aEvent) {
-  let deferred = Promise.defer();
-  let timeoutId = win.setTimeout(() => {
-    deferred.reject("Panel did not show within 5 seconds.");
-  }, 5000);
-  aPanel.addEventListener(aEvent, function onPanelEvent(e) {
-    aPanel.removeEventListener(aEvent, onPanelEvent);
-    win.clearTimeout(timeoutId);
-    deferred.resolve();
-  });
-  return deferred.promise;
-}
-
-function promisePanelElementShown(win, aPanel) {
-  return promisePanelElementEvent(win, aPanel, "popupshown");
-}
-
-function promisePanelElementHidden(win, aPanel) {
-  return promisePanelElementEvent(win, aPanel, "popuphidden");
-}
-
-function is_element_hidden(element, msg) {
-  isnot(element, null, "Element should not be null, when checking visibility");
-  ok(is_hidden(element), msg);
-}
-
-function loadUITourTestPage(callback, host = "https://example.com/") {
-  if (gTestTab)
-    gBrowser.removeTab(gTestTab);
-
-  let url = getRootDirectory(gTestPath) + "uitour.html";
-  url = url.replace("chrome://mochitests/content/", host);
-
-  gTestTab = gBrowser.addTab(url);
-  gBrowser.selectedTab = gTestTab;
-
-  gTestTab.linkedBrowser.addEventListener("load", function onLoad() {
-    gTestTab.linkedBrowser.removeEventListener("load", onLoad, true);
-
-    gContentWindow = Components.utils.waiveXrays(gTestTab.linkedBrowser.contentDocument.defaultView);
-    gContentAPI = gContentWindow.Mozilla.UITour;
-
-    waitForFocus(callback, gContentWindow);
-  }, true);
-}
-
-function UITourTest() {
-  Services.prefs.setBoolPref("browser.uitour.enabled", true);
-  let testUri = Services.io.newURI("http://example.com", null, null);
-  Services.perms.add(testUri, "uitour", Services.perms.ALLOW_ACTION);
-
-  waitForExplicitFinish();
-
-  registerCleanupFunction(function() {
-    delete window.UITour;
-    delete window.UITourMetricsProvider;
-    delete window.gContentWindow;
-    delete window.gContentAPI;
-    if (gTestTab)
-      gBrowser.removeTab(gTestTab);
-    delete window.gTestTab;
-    Services.prefs.clearUserPref("browser.uitour.enabled", true);
-    Services.perms.remove("example.com", "uitour");
-  });
-
-  function done() {
-    executeSoon(() => {
-      if (gTestTab)
-        gBrowser.removeTab(gTestTab);
-      gTestTab = null;
-
-      let highlight = document.getElementById("UITourHighlightContainer");
-      is_element_hidden(highlight, "Highlight should be closed/hidden after UITour tab is closed");
-
-      let tooltip = document.getElementById("UITourTooltip");
-      is_element_hidden(tooltip, "Tooltip should be closed/hidden after UITour tab is closed");
-
-      ok(!PanelUI.panel.hasAttribute("noautohide"), "@noautohide on the menu panel should have been cleaned up");
-      ok(!PanelUI.panel.hasAttribute("panelopen"), "The panel shouldn't have @panelopen");
-      isnot(PanelUI.panel.state, "open", "The panel shouldn't be open");
-      is(document.getElementById("PanelUI-menu-button").hasAttribute("open"), false, "Menu button should know that the menu is closed");
-
-      is(UITour.pinnedTabs.get(window), null, "Any pinned tab should be closed after UITour tab is closed");
-
-      executeSoon(nextTest);
-    });
-  }
-
-  function nextTest() {
-    if (tests.length == 0) {
-      finish();
-      return;
-    }
-    let test = tests.shift();
-    info("Starting " + test.name);
-    waitForFocus(function() {
-      loadUITourTestPage(function() {
-        test(done);
-      });
-    });
-  }
-  nextTest();
-}