tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

event.any.js (6592B)


      1 // META: global=window,dedicatedworker,shadowrealm
      2 
      3 test(t => {
      4  const c = new AbortController(),
      5        s = c.signal;
      6  let state = "begin";
      7 
      8  assert_false(s.aborted);
      9  assert_true("reason" in s, "signal has reason property");
     10  assert_equals(s.reason, undefined, "signal.reason is initially undefined");
     11 
     12  s.addEventListener("abort",
     13    t.step_func(e => {
     14      assert_equals(state, "begin");
     15      state = "aborted";
     16    })
     17  );
     18  c.abort();
     19 
     20  assert_equals(state, "aborted");
     21  assert_true(s.aborted);
     22  assert_true(s.reason instanceof DOMException, "signal.reason is DOMException");
     23  assert_equals(s.reason.name, "AbortError", "signal.reason is AbortError");
     24 
     25  c.abort();
     26 }, "AbortController abort() should fire event synchronously");
     27 
     28 test(t => {
     29  const controller = new AbortController();
     30  const signal = controller.signal;
     31  assert_equals(controller.signal, signal,
     32                "value of controller.signal should not have changed");
     33  controller.abort();
     34  assert_equals(controller.signal, signal,
     35                "value of controller.signal should still not have changed");
     36 }, "controller.signal should always return the same object");
     37 
     38 test(t => {
     39  const controller = new AbortController();
     40  const signal = controller.signal;
     41  let eventCount = 0;
     42  signal.onabort = () => {
     43    ++eventCount;
     44  };
     45  controller.abort();
     46  assert_true(signal.aborted);
     47  assert_equals(eventCount, 1, "event handler should have been called once");
     48  controller.abort();
     49  assert_true(signal.aborted);
     50  assert_equals(eventCount, 1,
     51                "event handler should not have been called again");
     52 }, "controller.abort() should do nothing the second time it is called");
     53 
     54 test(t => {
     55  const controller = new AbortController();
     56  controller.abort();
     57  controller.signal.onabort =
     58      t.unreached_func("event handler should not be called");
     59 }, "event handler should not be called if added after controller.abort()");
     60 
     61 test(t => {
     62  const controller = new AbortController();
     63  const signal = controller.signal;
     64  signal.onabort = t.step_func(e => {
     65    assert_equals(e.type, "abort", "event type should be abort");
     66    assert_equals(e.target, signal, "event target should be signal");
     67    assert_false(e.bubbles, "event should not bubble");
     68    assert_true(e.isTrusted, "event should be trusted");
     69  });
     70  controller.abort();
     71 }, "the abort event should have the right properties");
     72 
     73 test(t => {
     74  const controller = new AbortController();
     75  const signal = controller.signal;
     76 
     77  assert_true("reason" in signal, "signal has reason property");
     78  assert_equals(signal.reason, undefined, "signal.reason is initially undefined");
     79 
     80  const reason = Error("hello");
     81  controller.abort(reason);
     82 
     83  assert_true(signal.aborted, "signal.aborted");
     84  assert_equals(signal.reason, reason, "signal.reason");
     85 }, "AbortController abort(reason) should set signal.reason");
     86 
     87 test(t => {
     88  const controller = new AbortController();
     89  const signal = controller.signal;
     90 
     91  assert_true("reason" in signal, "signal has reason property");
     92  assert_equals(signal.reason, undefined, "signal.reason is initially undefined");
     93 
     94  controller.abort();
     95 
     96  assert_true(signal.aborted, "signal.aborted");
     97  assert_true(signal.reason instanceof DOMException, "signal.reason is DOMException");
     98  assert_equals(signal.reason.name, "AbortError", "signal.reason is AbortError");
     99 }, "aborting AbortController without reason creates an \"AbortError\" DOMException");
    100 
    101 test(t => {
    102  const controller = new AbortController();
    103  const signal = controller.signal;
    104 
    105  assert_true("reason" in signal, "signal has reason property");
    106  assert_equals(signal.reason, undefined, "signal.reason is initially undefined");
    107 
    108  controller.abort(undefined);
    109 
    110  assert_true(signal.aborted, "signal.aborted");
    111  assert_true(signal.reason instanceof DOMException, "signal.reason is DOMException");
    112  assert_equals(signal.reason.name, "AbortError", "signal.reason is AbortError");
    113 }, "AbortController abort(undefined) creates an \"AbortError\" DOMException");
    114 
    115 test(t => {
    116  const controller = new AbortController();
    117  const signal = controller.signal;
    118 
    119  assert_true("reason" in signal, "signal has reason property");
    120  assert_equals(signal.reason, undefined, "signal.reason is initially undefined");
    121 
    122  controller.abort(null);
    123 
    124  assert_true(signal.aborted, "signal.aborted");
    125  assert_equals(signal.reason, null, "signal.reason");
    126 }, "AbortController abort(null) should set signal.reason");
    127 
    128 test(t => {
    129  const signal = AbortSignal.abort();
    130 
    131  assert_true(signal.aborted, "signal.aborted");
    132  assert_true(signal.reason instanceof DOMException, "signal.reason is DOMException");
    133  assert_equals(signal.reason.name, "AbortError", "signal.reason is AbortError");
    134 }, "static aborting signal should have right properties");
    135 
    136 test(t => {
    137  const reason = Error("hello");
    138  const signal = AbortSignal.abort(reason);
    139 
    140  assert_true(signal.aborted, "signal.aborted");
    141  assert_equals(signal.reason, reason, "signal.reason");
    142 }, "static aborting signal with reason should set signal.reason");
    143 
    144 test(t => {
    145  const signal = AbortSignal.abort();
    146 
    147  assert_true(
    148    signal.reason instanceof DOMException,
    149    "signal.reason is a DOMException"
    150  );
    151  assert_equals(
    152    signal.reason,
    153    signal.reason,
    154    "signal.reason returns the same DOMException"
    155  );
    156 }, "AbortSignal.reason returns the same DOMException");
    157 
    158 test(t => {
    159  const controller = new AbortController();
    160  controller.abort();
    161 
    162  assert_true(
    163    controller.signal.reason instanceof DOMException,
    164    "signal.reason is a DOMException"
    165  );
    166  assert_equals(
    167    controller.signal.reason,
    168    controller.signal.reason,
    169    "signal.reason returns the same DOMException"
    170  );
    171 }, "AbortController.signal.reason returns the same DOMException");
    172 
    173 test(t => {
    174  const reason = new Error('boom');
    175  const message = reason.message;
    176  const signal = AbortSignal.abort(reason);
    177  assert_true(signal.aborted);
    178  assert_throws_exactly(reason, () => signal.throwIfAborted());
    179  assert_equals(reason.message, message,
    180                "abort.reason should not be changed by throwIfAborted()");
    181 }, "throwIfAborted() should throw abort.reason if signal aborted");
    182 
    183 test(t => {
    184  const signal = AbortSignal.abort('hello');
    185  assert_true(signal.aborted);
    186  assert_throws_exactly('hello', () => signal.throwIfAborted());
    187 }, "throwIfAborted() should throw primitive abort.reason if signal aborted");
    188 
    189 test(t => {
    190  const controller = new AbortController();
    191  assert_false(controller.signal.aborted);
    192  controller.signal.throwIfAborted();
    193 }, "throwIfAborted() should not throw if signal not aborted");
    194 
    195 done();