DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Mercurial (d1ed7de67f5a)

VCS Links

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
<!DOCTYPE HTML>
<html>
<head>
  <meta charset="utf-8">
  <title>Test date Paramter for Alarm API</title>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
</head>
<body>
<p id="display"></p>
<div id="content" style="display: none"></div>
<pre id="test">
  <script type="application/javascript">

  "use strict";

  // Verify passing a Date in the future doesn't fail
  function testFutureDate() {
    var tomorrow = new Date();
    tomorrow.setDate(tomorrow.getDate() + 1);

    var domRequest;
    try {
      domRequest = navigator.mozAlarms.add(tomorrow, "honorTimezone", {});
    } catch (e) {
      ok(false,
         "Unexpected exception trying to add alarm for tomorrow.");

      // Proceed to next test.
      return testPastDate();
    }
    domRequest.onsuccess = function(e) {
      navigator.mozAlarms.remove(e.target.result);
      ok(true, "Add alarm for future date.");

      // Awesome, no error so proceed to next test.
      testPastDate();
    };
    domRequest.onerror = function(e) {
      ok(false, "Unable to add alarm for tomorrow`.");

      // Proceed to next test.
      testPastDate();
    };
  }

  // Verify passing a Date that's already past doesn't fail (it should fire immediately).
  function testPastDate() {
    var yesterday = new Date();
    yesterday.setDate(yesterday.getDate() - 1);

    var domRequest;
    try {
      domRequest = navigator.mozAlarms.add(yesterday, "honorTimezone", {});
    } catch (e) {
      ok(false,
         "Unexpected exception trying to add alarm for yesterday.");

      // Move on to the next test.
      return testNullDate();
    }
    domRequest.onsuccess = function(e) {
      navigator.mozAlarms.remove(e.target.result);

      ok(true, "Should be able to add alarm for already past date, which should fire immediately.");

      // Move on to the next test.
      testNullDate();
    };
    domRequest.onerror = function(e) {
      ok(false, "Unable to add alarm for yesterday.");

      // Move on to the next test.
      testNullDate();
    }
  }

  // Verify passing null does indeed fail
  function testNullDate() {
    try {
      navigator.mozAlarms.add(null, "honorTimezone", {});
      ok(false, "Expected an exception to be thrown for alarm with null date.");
    } catch(e) {
      ok(true, "Exception thrown for alarm with null date.");
    }

    // Move on to the next test.
    testInvalidTimeZone()
  }

  function testInvalidTimeZone() {
    try {
      navigator.mozAlarms.add(new Date(), "badTimeZoneArg", {});
      ok(false, "Expected an exception to be thrown while testing bad time zone arg.");
    } catch(e) {
      ok(true, "Exception thrown while testing bad time zone arg.");
    }
    SimpleTest.finish();
  }

  function startTests() {
    SpecialPowers.pushPrefEnv({
      "set": [["dom.mozAlarms.enabled", true]]
    }, function() {
      var isAllowedToTest = true;

      if (navigator.appVersion.indexOf("Android") !== -1) {
        ok(true, "mozAlarms is not allowed on Android for now. " +
                 "TODO Bug 863557.");
        isAllowedToTest = false;
      } else if (SpecialPowers.wrap(document).nodePrincipal.appStatus ==
                 SpecialPowers.Ci.nsIPrincipal.APP_STATUS_NOT_INSTALLED) {
        ok(true, "mozAlarms is not allowed for non-installed apps. " +
                 "TODO Bug 876981.");
        isAllowedToTest = false;
      }

      if (isAllowedToTest) {
        ok(true, "Start to test...");
        testFutureDate();
      } else {
        // A sanity check to make sure we must run tests on Firefox OS (B2G).
        if (navigator.userAgent.indexOf("Mobile") != -1 &&
            navigator.appVersion.indexOf("Android") == -1) {
          ok(false, "Should run the test on Firefox OS (B2G)!");
        }

        SimpleTest.finish();
      }
    });
  }

  SimpleTest.expectAssertions(0, 9);
  SimpleTest.waitForExplicitFinish();
  if (SpecialPowers.hasPermission("alarms", document)) {
    startTests();
  } else {
    // Add the permissions and reload so they propogate
    SpecialPowers.addPermission("alarms", true, document);
    window.location.reload();
  }

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