Skip to content

Commit 093f19b

Browse files
committed
add
1 parent 5e100c5 commit 093f19b

File tree

5 files changed

+139
-12
lines changed

5 files changed

+139
-12
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package hexlet.code;
2+
3+
public abstract class BaseSchema<T> {
4+
protected boolean isRequired = false;
5+
6+
public T required() {
7+
this.isRequired = true;
8+
return (T) this;
9+
}
10+
11+
public boolean isValid(Object value) {
12+
if (isRequired && value == null) {
13+
return false;
14+
}
15+
return true;
16+
}
17+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package hexlet.code;
2+
3+
public class NumberSchema extends BaseSchema<NumberSchema> {
4+
private boolean isPositive = false;
5+
private int minRange = Integer.MIN_VALUE;
6+
private int maxRange = Integer.MAX_VALUE;
7+
8+
public NumberSchema positive() {
9+
this.isPositive = true;
10+
return this;
11+
}
12+
13+
public NumberSchema range(int min, int max) {
14+
this.minRange = min;
15+
this.maxRange = max;
16+
return this;
17+
}
18+
19+
@Override
20+
public boolean isValid(Object value) {
21+
if (!super.isValid(value)) {
22+
return false;
23+
}
24+
if (value == null) {
25+
return true;
26+
}
27+
if (!(value instanceof Integer)) {
28+
return false;
29+
}
30+
int number = (int) value;
31+
if (isPositive && number <= 0) {
32+
return false;
33+
}
34+
if (number < minRange || number > maxRange) {
35+
return false;
36+
}
37+
return true;
38+
}
39+
}

app/src/main/java/hexlet/code/StringSchema.java

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,9 @@
11
package hexlet.code;
22

3-
public class StringSchema {
4-
private boolean isRequired = false;
3+
public class StringSchema extends BaseSchema<StringSchema> {
54
private int minLength = 0;
65
private String containsSubstring = null;
76

8-
public StringSchema required() {
9-
this.isRequired = true;
10-
return this;
11-
}
12-
137
public StringSchema minLength(int length) {
148
this.minLength = length;
159
return this;
@@ -20,17 +14,25 @@ public StringSchema contains(String substring) {
2014
return this;
2115
}
2216

23-
public boolean isValid(String value) {
17+
@Override
18+
public boolean isValid(Object value) {
19+
if (!super.isValid(value)) {
20+
return false;
21+
}
2422
if (value == null) {
25-
return !isRequired;
23+
return !isRequired; // Если значение null, оно валидно только если isRequired == false
2624
}
27-
if (isRequired && value.isEmpty()) {
25+
if (!(value instanceof String)) {
2826
return false;
2927
}
30-
if (value.length() < minLength) {
28+
String str = (String) value;
29+
if (isRequired && str.isEmpty()) {
30+
return false; // Пустая строка не валидна, если isRequired == true
31+
}
32+
if (str.length() < minLength) {
3133
return false;
3234
}
33-
if (containsSubstring != null && !value.contains(containsSubstring)) {
35+
if (containsSubstring != null && !str.contains(containsSubstring)) {
3436
return false;
3537
}
3638
return true;

app/src/main/java/hexlet/code/Validator.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,8 @@ public class Validator {
44
public StringSchema string() {
55
return new StringSchema();
66
}
7+
8+
public NumberSchema number() {
9+
return new NumberSchema();
10+
}
711
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package hexlet.code;
2+
3+
import org.junit.jupiter.api.Test;
4+
import static org.junit.jupiter.api.Assertions.assertTrue;
5+
import static org.junit.jupiter.api.Assertions.assertFalse;
6+
7+
public class NumberSchemaTest {
8+
9+
@Test
10+
public void testDefaultSchema() {
11+
Validator v = new Validator();
12+
NumberSchema schema = v.number();
13+
14+
assertTrue(schema.isValid(null));
15+
assertTrue(schema.isValid(5));
16+
}
17+
18+
@Test
19+
public void testRequired() {
20+
Validator v = new Validator();
21+
StringSchema schema = v.string().required();
22+
23+
assertFalse(schema.isValid(null));
24+
assertFalse(schema.isValid(""));
25+
assertTrue(schema.isValid("hexlet"));
26+
}
27+
28+
@Test
29+
public void testPositive() {
30+
Validator v = new Validator();
31+
NumberSchema schema = v.number().positive();
32+
33+
assertTrue(schema.isValid(10));
34+
assertFalse(schema.isValid(-10));
35+
assertFalse(schema.isValid(0));
36+
}
37+
38+
@Test
39+
public void testRange() {
40+
Validator v = new Validator();
41+
NumberSchema schema = v.number().range(5, 10);
42+
43+
assertTrue(schema.isValid(5));
44+
assertTrue(schema.isValid(10));
45+
assertFalse(schema.isValid(4));
46+
assertFalse(schema.isValid(11));
47+
}
48+
49+
@Test
50+
public void testCombinedRules() {
51+
Validator v = new Validator();
52+
NumberSchema schema = v.number()
53+
.required()
54+
.positive()
55+
.range(5, 10);
56+
57+
assertFalse(schema.isValid(null)); // required
58+
assertFalse(schema.isValid(-5)); // positive
59+
assertFalse(schema.isValid(0)); // positive
60+
assertFalse(schema.isValid(4)); // range
61+
assertFalse(schema.isValid(11)); // range
62+
assertTrue(schema.isValid(5)); // valid
63+
assertTrue(schema.isValid(10)); // valid
64+
}
65+
}

0 commit comments

Comments
 (0)