Skip to content

Commit

Permalink
improves queue tests to use async await
Browse files Browse the repository at this point in the history
  • Loading branch information
RobertoPrevato committed Jun 25, 2020
1 parent 6d50cf2 commit 876ecb7
Showing 1 changed file with 22 additions and 23 deletions.
45 changes: 22 additions & 23 deletions test/queues.test.ts
Expand Up @@ -18,20 +18,19 @@

import {LifoQueue} from "../src/queues";

test("LifoQueue `get` awaits for items in the queue", async (done) => {
test("LifoQueue `get` awaits for items in the queue", async () => {
let result = -1;
const queue = new LifoQueue<number>();

queue.get().then((value: number) => {
expect(value).toBe(result);

done();
});

setTimeout(() => {
result = new Date().getTime();
queue.push(result);
}, 10);

const value = await queue.get();

expect(value).toBe(result);
expect(value).toBeGreaterThan(-1);
});

test("LifoQueue resolves items in LIFO order", async (done) => {
Expand Down Expand Up @@ -70,27 +69,12 @@ test("LifoQueue resolves items in LIFO order", async (done) => {
}, 30);
});

test("LifoQueue resolves `get` as soon as items are pushed", async (done) => {
test("LifoQueue resolves `get` as soon as items are pushed", async () => {
let result1 = -1;
let result2 = -1;
let result3 = -1;
const queue = new LifoQueue<number>();

// Note: here queue.get() is called in advance.
// Since promises are resolved as soon as they become available,
// the end result of Promise.all looks like FIFO.
// This is right and cannot be changed: it depends on how the queue is used
// in this specific case.
Promise.all([queue.get(), queue.get(), queue.get()]).then(
([value1, value2, value3]) => {
expect(value1).toBe(result1);
expect(value2).toBe(result2);
expect(value3).toBe(result3);

done();
}
);

setTimeout(() => {
result1 = new Date().getTime();
queue.push(result1);
Expand All @@ -105,6 +89,21 @@ test("LifoQueue resolves `get` as soon as items are pushed", async (done) => {
result3 = new Date().getTime();
queue.push(result3);
}, 30);

const [value1, value2, value3] = await Promise.all([
queue.get(),
queue.get(),
queue.get(),
]);

// Note: here queue.get() is called in advance.
// Since promises are resolved as soon as they become available,
// the end result of Promise.all looks like FIFO.
// This is right and cannot be changed: it depends on how the queue is used
// in this specific case.
expect(value1).toBe(result1);
expect(value2).toBe(result2);
expect(value3).toBe(result3);
});

test("LifoQueue returns first the last items in the queue", async () => {
Expand Down

0 comments on commit 876ecb7

Please sign in to comment.