org.saynotobugs.confidence.rxjava3.procedure.Emit Maven / Gradle / Ivy
/*
* Copyright 2022 dmfs GmbH
*
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.saynotobugs.confidence.rxjava3.procedure;
import io.reactivex.rxjava3.core.CompletableSource;
import io.reactivex.rxjava3.core.MaybeSource;
import io.reactivex.rxjava3.core.SingleSource;
import org.dmfs.jems2.Procedure;
import org.dmfs.jems2.iterable.Mapped;
import org.dmfs.jems2.iterable.Seq;
import org.dmfs.jems2.procedure.Batch;
import org.dmfs.srcless.annotations.staticfactory.StaticFactories;
import org.saynotobugs.confidence.description.Spaced;
import org.saynotobugs.confidence.description.Structured;
import org.saynotobugs.confidence.description.Text;
import org.saynotobugs.confidence.description.Value;
import org.saynotobugs.confidence.quality.composite.QualityComposition;
import org.saynotobugs.confidence.quality.object.Successfully;
import org.saynotobugs.confidence.rxjava3.RxSubjectAdapter;
@StaticFactories(value = "RxJava3", packageName = "org.saynotobugs.confidence.rxjava3")
public final class Emit extends QualityComposition>
{
/**
* Creates a {@link Procedure} causes the upstream subject to emit the given value(s).
*
* Note, this has no effect on {@link CompletableSource}s because they don't have any values.
*
* {@link SingleSource}s and {@link MaybeSource}s can only emit a single value and trying to emit more than one value will
* cause an Exception to be thrown. Also note that {@link SingleSource}s and {@link MaybeSource}s automatically complete when
* a value is emitted.
*/
@SafeVarargs
public Emit(Up... emissions)
{
this(new Seq<>(emissions));
}
/**
* Creates a {@link Procedure} causes the upstream subject to emit the given value(s).
*
* Note, this has no effect on {@link CompletableSource}s because they don't have any values.
*
* {@link SingleSource}s and {@link MaybeSource}s can only emit a single value and trying to emit more than one value will
* cause an Exception to be thrown. Also note that {@link SingleSource}s and {@link MaybeSource}s automatically complete when
* a value is emitted.
*/
public Emit(Iterable emissions)
{
super(new Successfully<>(
new Spaced(new Text("emissions"), new Structured("[", ",", "]", new Mapped<>(Value::new, emissions))),
new Spaced(new Text("emissions"),
new Structured("[", ",", "]", new Mapped<>(Value::new, emissions)),
new Text("failed with")),
rxSubjectAdapter -> new Batch<>(rxSubjectAdapter::onNext).process(emissions)));
}
}