All Downloads are FREE. Search and download functionalities are using the official Maven repository.

uk.camsw.rxjava.test.dsl.when.BaseWhen Maven / Gradle / Ivy

The newest version!
package uk.camsw.rxjava.test.dsl.when;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import rx.functions.Action0;
import uk.camsw.rxjava.test.dsl.KeyConstants;
import uk.camsw.rxjava.test.dsl.scenario.ExecutionContext;
import uk.camsw.rxjava.test.dsl.subscriber.ISubscriber;
import uk.camsw.rxjava.test.dsl.then.BaseThen;
import uk.camsw.rxjava.test.dsl.then.IThen;
import uk.camsw.rxjava.test.dsl.time.BaseTime;

import java.time.Duration;
import java.time.temporal.TemporalUnit;

public class BaseWhen implements IWhen {
    private static final Logger logger = LoggerFactory.getLogger(BaseWhen.class);

    private final ExecutionContext context;

    public BaseWhen(ExecutionContext context) {
        this.context = context;
    }

    @Override
    public ISubscriber subscriber(int id) {
        return subscriber(String.valueOf(id));
    }

    public ISubscriber subscriber(String id) {
        return context.getOrCreateSubscriber(id);
    }

    @Override
    public ISubscriber theSubscriber(String id) {
        return subscriber(id);
    }

    @Override
    public WHEN theCurrentThreadSleepsFor(long amount, TemporalUnit unit) {
        return theCurrentThreadSleepsFor(Duration.of(amount, unit));
    }

    @Override
    public WHEN theCurrentThreadSleepsFor(Duration duration) {
        logger.info("Sleeping current thread: [{}]", duration);
        try {
            Thread.sleep(duration.toMillis());
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
        return context.getWhen();
    }

    @Override
    public ISubscriber theSubscriber() {
        return subscriber(KeyConstants.THE_SUBSCRIBER);
    }

    @Override
    public IThen then() {
        BaseThen then = new BaseThen<>(context);
        try {
            then.executeCommands();
        } finally {
            context.cleanUp();
        }
        return then;
    }

    @Override
    public void go() {
        then();
    }

    @Override
    public BaseTime time() {
        return new BaseTime<>(context);
    }

    @Override
    public WHEN actionIsPerformed(Action0 action) {
        context.addCommand(ctx -> action.call());
        return context.getWhen();
    }

    @Override
    public WHEN theActionIsPerformed(Action0 action) {
        return actionIsPerformed(action);
    }

}