Skip to content

Commit

Permalink
Merge pull request #174 from Kevin-Lee/task/168/add-Either.getLeftOrElse
Browse files Browse the repository at this point in the history
Close #168 - Add Either.getLeftOrElse
  • Loading branch information
kevin-lee committed Dec 31, 2021
2 parents e22ebaf + 4325989 commit 5ba0361
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 0 deletions.
12 changes: 12 additions & 0 deletions src/main/java/j8plus/types/Either.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ public abstract <C> C fold(

public abstract B getOrElse(Supplier<B> alternative);

public abstract A getLeftOrElse(Supplier<A> alternative);

public abstract void forEach(Consumer<? super B> f);

public abstract Optional<B> toOptional();
Expand Down Expand Up @@ -140,6 +142,11 @@ public B getOrElse(final Supplier<B> alternative) {
return alternative.get();
}

@Override
public A getLeftOrElse(final Supplier<A> alternative) {
return this.value;
}

@Override
public void forEach(final Consumer<? super B> f) {
}
Expand Down Expand Up @@ -232,6 +239,11 @@ public B getOrElse(final Supplier<B> alternative) {
return this.value;
}

@Override
public A getLeftOrElse(final Supplier<A> alternative) {
return alternative.get();
}

@Override
public void forEach(final Consumer<? super B> f) {
f.accept(this.value);
Expand Down
32 changes: 32 additions & 0 deletions src/test/java/j8plus/types/EitherTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,38 @@ public void getOrElse_RightCase() {
);
}

@Test
public void getLeftOrElse_LeftCase() {
final String input = "Some error";
final String expected = input;
test("Either.getLeftOrElse on Left", "Either.getLeftOrElse on Left should return the the Left value")
.when(() ->
Either.<String, Integer>left(input)
)
.then(actual ->
assertThat(actual.isLeft()).isTrue()
)
.then(actual ->
assertThat(actual.getLeftOrElse(() -> expected)).isEqualTo(expected)
);
}

@Test
public void getLeftOrElse_RightCase() {
final Integer input = 999;
final String expected = "Alternative message";
test("Either.getLeftOrElse on Right", "Either.getLeftOrElse on Right should return the given alternative")
.when(() ->
Either.<String, Integer>right(input)
)
.then(actual ->
assertThat(actual.isRight()).isTrue()
)
.then(actual ->
assertThat(actual.getLeftOrElse(() -> expected)).isEqualTo(expected)
);
}

@Test
public void forEach_LeftCase() {
final String input = "Some error";
Expand Down

0 comments on commit 5ba0361

Please sign in to comment.