Skip to content

Commit ea5b8a7

Browse files
authored
Add another decorator using lambda expression: TextValidator (#41)
1 parent ddc31bd commit ea5b8a7

File tree

3 files changed

+50
-3
lines changed

3 files changed

+50
-3
lines changed

DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/decorator/TextProcessor.java renamed to DesignPatterns/src/main/java/pl/mperor/lab/java/design/pattern/structural/decorator/lambda/expression/TextProcessor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package pl.mperor.lab.java.design.pattern.structural.decorator;
1+
package pl.mperor.lab.java.design.pattern.structural.decorator.lambda.expression;
22

33
import java.util.Arrays;
44
import java.util.function.UnaryOperator;
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package pl.mperor.lab.java.design.pattern.structural.decorator.lambda.expression;
2+
3+
import java.util.function.Predicate;
4+
5+
public class TextValidator {
6+
7+
private TextValidator() {
8+
}
9+
10+
public static Predicate<String> notEmpty() {
11+
return Predicate.not(String::isEmpty);
12+
}
13+
14+
public static Predicate<String> lengthBetween(int min, int max) {
15+
return minLength(min).and(maxLength(max));
16+
}
17+
18+
public static Predicate<String> minLength(int min) {
19+
return text -> text.length() >= min;
20+
}
21+
22+
public static Predicate<String> maxLength(int max) {
23+
return text -> text.length() >= max;
24+
}
25+
26+
public static Predicate<String> numeric() {
27+
return text -> text.matches("\\d+");
28+
}
29+
30+
public static Predicate<String> nan() {
31+
return numeric().negate();
32+
}
33+
34+
}

DesignPatterns/src/test/java/pl/mperor/lab/java/design/pattern/structural/decorator/TextProcessorTest.java renamed to DesignPatterns/src/test/java/pl/mperor/lab/java/design/pattern/structural/decorator/lambda/expression/TextProcessorAndValidatorTest.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
package pl.mperor.lab.java.design.pattern.structural.decorator;
1+
package pl.mperor.lab.java.design.pattern.structural.decorator.lambda.expression;
22

33
import org.junit.jupiter.api.Assertions;
44
import org.junit.jupiter.api.Test;
55

6-
public class TextProcessorTest {
6+
public class TextProcessorAndValidatorTest {
77

88
@Test
99
public void shouldAllowToCreateTextProcessorAsChainOfFunctions() {
@@ -23,4 +23,17 @@ public void shouldAllowToCreateTextProcessorAsChainOfFunctions() {
2323
);
2424
}
2525

26+
@Test
27+
public void shouldAllowToCreateTextValidator() {
28+
Assertions.assertTrue(
29+
TextValidator.notEmpty()
30+
.and(TextValidator.nan())
31+
.and(TextValidator.lengthBetween(1, 3))
32+
.test("abc")
33+
);
34+
35+
var blankOrNumeric = TextValidator.numeric().or(String::isBlank);
36+
Assertions.assertTrue(blankOrNumeric.test(" ") && blankOrNumeric.test("123"));
37+
}
38+
2639
}

0 commit comments

Comments
 (0)