tor-browser

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

observable-last.any.js (2560B)


      1 promise_test(async () => {
      2  const source = new Observable(subscriber => {
      3    // Never exposed to the `last()` promise.
      4    subscriber.next(1);
      5 
      6    subscriber.next(2);
      7    subscriber.complete();
      8  });
      9 
     10  const value = await source.last();
     11 
     12  assert_equals(value, 2);
     13 }, "last(): Promise resolves to last value");
     14 
     15 promise_test(async (t) => {
     16  const error = new Error("error from source");
     17  const source = new Observable(subscriber => {
     18    subscriber.error(error);
     19  });
     20 
     21  return promise_rejects_exactly(t, error, source.last());
     22 }, "last(): Promise rejects with emitted error");
     23 
     24 promise_test(async (t) => {
     25  const source = new Observable(subscriber => {
     26    subscriber.complete();
     27  });
     28 
     29  return promise_rejects_js(t, RangeError, source.last());
     30 }, "last(): Promise rejects with RangeError when source Observable " +
     31   "completes without emitting any values");
     32 
     33 promise_test(async (t) => {
     34  const source = new Observable(subscriber => {});
     35 
     36  const controller = new AbortController();
     37  const promise = source.last({ signal: controller.signal });
     38 
     39  controller.abort();
     40 
     41  return promise_rejects_dom(t, "AbortError", promise, "Promise rejects with a DOMException for abortion");
     42 }, "last(): Aborting a signal rejects the Promise with an AbortError DOMException");
     43 
     44 promise_test(async () => {
     45  const results = [];
     46  const source = new Observable(subscriber => {
     47    results.push("source subscribe");
     48    subscriber.addTeardown(() => results.push("source teardown"));
     49    subscriber.signal.addEventListener("abort", () => results.push("source abort"));
     50    results.push("before source next 1");
     51    subscriber.next(1);
     52    results.push("after source next 1");
     53    results.push("before source complete");
     54    subscriber.complete();
     55    results.push("after source complete");
     56  });
     57 
     58  results.push("calling last");
     59  const promise = source.last();
     60 
     61  assert_array_equals(results, [
     62    "calling last",
     63    "source subscribe",
     64    "before source next 1",
     65    "after source next 1",
     66    "before source complete",
     67    "source abort",
     68    "source teardown",
     69    "after source complete",
     70  ], "Array values after last() is called");
     71 
     72  const lastValue = await promise;
     73  results.push(`last resolved with: ${lastValue}`);
     74 
     75  assert_array_equals(results, [
     76    "calling last",
     77    "source subscribe",
     78    "before source next 1",
     79    "after source next 1",
     80    "before source complete",
     81    "source abort",
     82    "source teardown",
     83    "after source complete",
     84    "last resolved with: 1",
     85  ], "Array values after Promise is awaited");
     86 }, "last(): Lifecycle");