add cancellation and refractor PromiseFactory

This commit is contained in:
WhatCats
2024-04-04 17:36:35 +02:00
parent e6eee4e849
commit 5bbcfdc9b3
24 changed files with 670 additions and 445 deletions

View File

@@ -0,0 +1,48 @@
package dev.tommyjs.futur;
import dev.tommyjs.futur.executor.PromiseExecutor;
import dev.tommyjs.futur.executor.SinglePoolExecutor;
import dev.tommyjs.futur.impl.SimplePromiseFactory;
import dev.tommyjs.futur.promise.PromiseFactory;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import reactor.core.publisher.Mono;
import java.util.Objects;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
public final class PromiseTests {
private final Logger logger = LoggerFactory.getLogger(PromiseTests.class);
private final PromiseExecutor<ScheduledFuture<?>> executor = SinglePoolExecutor.create(1);
private final PromiseFactory pfac = new SimplePromiseFactory<>(executor, logger);
@Test
void testMono() {
Exception value = new Exception("Test Error");
var error = pfac.wrap(Mono.error(value));
assert Objects.requireNonNull(error.getCompletion()).isError();
assert error.getCompletion().getException() == value;
var resolved = pfac.wrap(Mono.just(value));
assert !Objects.requireNonNull(resolved.getCompletion()).isError();
assert resolved.getCompletion().getResult() == value;
}
@Test
void testErrorCancellation() throws InterruptedException {
var finish = new AtomicBoolean();
pfac.start()
.thenRunDelayedAsync(() -> finish.set(true), 50, TimeUnit.MILLISECONDS)
.thenRunAsync(() -> {})
.cancel();
Thread.sleep(100L);
assert !finish.get();
}
}