Skip to content

Commit e909cc9

Browse files
committed
add
1 parent 7cd3c82 commit e909cc9

File tree

8 files changed

+78
-205
lines changed

8 files changed

+78
-205
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public static void main(String[] args) {
1212

1313
MapSchema schema = v.map();
1414

15-
Map<String, BaseSchema<?>> schemas = new HashMap<>();
15+
Map<String, BaseSchema<?, ?>> schemas = new HashMap<>();
1616
schemas.put("name", v.string().required());
1717
schemas.put("age", v.number().positive());
1818

app/src/main/java/hexlet/code/schemas/BaseSchema.java

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

3-
public abstract class BaseSchema<T> {
3+
public abstract class BaseSchema<T, S extends BaseSchema<T, S>> {
44
protected boolean isRequired = false;
55

66
@SuppressWarnings("unchecked")
7-
public T required() {
7+
public S required() {
88
this.isRequired = true;
9-
return (T) this;
9+
return (S) this;
1010
}
1111

1212
public abstract boolean isValid(Object value);

app/src/main/java/hexlet/code/schemas/MapSchema.java

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,17 @@
22

33
import java.util.Map;
44

5-
public class MapSchema extends BaseSchema<MapSchema> {
5+
public class MapSchema extends BaseSchema<Map<String, ?>, MapSchema> {
66
private int requiredSize = -1;
7-
private Map<String, BaseSchema<?>> schemas;
8-
9-
@Override
10-
public MapSchema required() {
11-
super.required();
12-
return this;
13-
}
7+
private Map<String, BaseSchema<?, ?>> schemas;
148

159
public MapSchema sizeof(int size) {
1610
this.requiredSize = size;
1711
return this;
1812
}
1913

20-
public MapSchema shape(Map<String, ? extends BaseSchema<?>> shapeSchemas) {
21-
this.schemas = (Map<String, BaseSchema<?>>) shapeSchemas;
14+
public MapSchema shape(Map<String, ? extends BaseSchema<?, ?>> shapeSchemas) {
15+
this.schemas = (Map<String, BaseSchema<?, ?>>) shapeSchemas;
2216
return this;
2317
}
2418

@@ -38,9 +32,9 @@ public boolean isValid(Object value) {
3832
return false;
3933
}
4034
if (schemas != null) {
41-
for (Map.Entry<String, BaseSchema<?>> entry : schemas.entrySet()) {
35+
for (Map.Entry<String, BaseSchema<?, ?>> entry : schemas.entrySet()) {
4236
String key = entry.getKey();
43-
BaseSchema<?> schema = entry.getValue();
37+
BaseSchema<?, ?> schema = entry.getValue();
4438
if (!map.containsKey(key) || !schema.isValid(map.get(key))) {
4539
return false;
4640
}

app/src/main/java/hexlet/code/schemas/NumberSchema.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,10 @@
11
package hexlet.code.schemas;
22

3-
public class NumberSchema extends BaseSchema<NumberSchema> {
3+
public class NumberSchema extends BaseSchema<Number, NumberSchema> {
44
private boolean isPositive = false;
55
private int minRange = Integer.MIN_VALUE;
66
private int maxRange = Integer.MAX_VALUE;
77

8-
@Override
9-
public NumberSchema required() {
10-
super.required();
11-
return this;
12-
}
13-
148
public NumberSchema positive() {
159
this.isPositive = true;
1610
return this;
@@ -34,12 +28,15 @@ public boolean isValid(Object value) {
3428
return false;
3529
}
3630
int number = (int) value;
31+
3732
if (isPositive && number <= 0) {
3833
return false;
3934
}
35+
4036
if (number < minRange || number > maxRange) {
4137
return false;
4238
}
39+
4340
return true;
4441
}
4542
}

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

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

3-
public class StringSchema extends BaseSchema<StringSchema> {
3+
public class StringSchema extends BaseSchema<String, StringSchema> {
44
private int minLength = 0;
55
private String containsSubstring = null;
66

7-
@Override
8-
public StringSchema required() {
9-
super.required();
10-
return this;
11-
}
12-
137
public StringSchema minLength(int length) {
148
this.minLength = length;
159
return this;
@@ -32,15 +26,19 @@ public boolean isValid(Object value) {
3226
return false;
3327
}
3428
String str = (String) value;
29+
3530
if (isRequired && str.isEmpty()) {
3631
return false;
3732
}
33+
3834
if (str.length() < minLength) {
3935
return false;
4036
}
37+
4138
if (containsSubstring != null && !str.contains(containsSubstring)) {
4239
return false;
4340
}
41+
4442
return true;
4543
}
4644
}

app/src/test/java/hexlet/code/MapSchemaTest.java

Lines changed: 27 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -2,109 +2,55 @@
22

33
import hexlet.code.schemas.BaseSchema;
44
import hexlet.code.schemas.MapSchema;
5+
import hexlet.code.schemas.NumberSchema;
6+
import hexlet.code.schemas.StringSchema;
57
import org.junit.jupiter.api.Test;
6-
import java.util.HashMap;
78
import java.util.Map;
89
import static org.junit.jupiter.api.Assertions.assertTrue;
910
import static org.junit.jupiter.api.Assertions.assertFalse;
1011

1112
public class MapSchemaTest {
1213

13-
@Test
14-
public void testDefaultSchema() {
15-
Validator v = new Validator();
16-
MapSchema schema = v.map();
17-
18-
assertTrue(schema.isValid(null));
19-
assertTrue(schema.isValid(new HashMap<>()));
20-
}
21-
2214
@Test
2315
public void testRequired() {
24-
Validator v = new Validator();
25-
MapSchema schema = v.map().required();
26-
27-
assertFalse(schema.isValid(null));
28-
assertTrue(schema.isValid(new HashMap<>()));
29-
30-
Map<String, String> data = new HashMap<>();
31-
data.put("key1", "value1");
32-
assertTrue(schema.isValid(data));
16+
MapSchema schema = new MapSchema();
17+
assertFalse(schema.required().isValid(null));
18+
assertTrue(schema.isValid(Map.of()));
3319
}
3420

3521
@Test
3622
public void testSizeof() {
37-
Validator v = new Validator();
38-
MapSchema schema = v.map().sizeof(2);
39-
40-
Map<String, String> data = new HashMap<>();
41-
data.put("key1", "value1");
42-
43-
assertFalse(schema.isValid(data));
44-
45-
data.put("key2", "value2");
46-
assertTrue(schema.isValid(data));
47-
}
48-
49-
@Test
50-
public void testCombinedRules() {
51-
Validator v = new Validator();
52-
MapSchema schema = v.map()
53-
.required()
54-
.sizeof(2);
55-
56-
assertFalse(schema.isValid(null));
57-
58-
assertFalse(schema.isValid(new HashMap<>()));
59-
60-
Map<String, String> data = new HashMap<>();
61-
data.put("key1", "value1");
62-
63-
assertFalse(schema.isValid(data));
64-
65-
data.put("key2", "value2");
66-
assertTrue(schema.isValid(data));
23+
MapSchema schema = new MapSchema();
24+
schema.sizeof(2);
25+
assertTrue(schema.isValid(Map.of("key1", "value1", "key2", "value2")));
26+
assertFalse(schema.isValid(Map.of("key1", "value1")));
6727
}
6828

6929
@Test
7030
public void testShape() {
71-
Validator v = new Validator();
72-
MapSchema schema = v.map();
73-
74-
Map<String, BaseSchema<?>> schemas = new HashMap<>();
75-
schemas.put("firstName", v.string().required());
76-
schemas.put("lastName", v.string().required().minLength(2));
77-
78-
schema.shape(schemas);
31+
MapSchema schema = new MapSchema();
7932

80-
Map<String, String> human1 = new HashMap<>();
81-
human1.put("firstName", "John");
82-
human1.put("lastName", "Smith");
83-
assertTrue(schema.isValid(human1)); // true
33+
StringSchema stringSchema = new StringSchema().required().minLength(3);
34+
NumberSchema numberSchema = new NumberSchema().required().positive();
8435

85-
Map<String, String> human2 = new HashMap<>();
86-
human2.put("firstName", "John");
87-
human2.put("lastName", null);
88-
assertFalse(schema.isValid(human2)); // false
36+
Map<String, BaseSchema<?, ?>> shapeSchemas = Map.of(
37+
"name", stringSchema,
38+
"age", numberSchema
39+
);
8940

90-
Map<String, String> human3 = new HashMap<>();
91-
human3.put("firstName", "Anna");
92-
human3.put("lastName", "B");
93-
assertFalse(schema.isValid(human3)); // false
41+
schema.shape(shapeSchemas);
9442

95-
Map<String, String> human4 = new HashMap<>();
96-
human4.put("firstName", "Alice");
97-
human4.put("lastName", "Johnson");
98-
assertTrue(schema.isValid(human4)); // true
43+
Map<String, Object> validData = Map.of(
44+
"name", "Alice",
45+
"age", 25
46+
);
9947

100-
Map<String, String> human5 = new HashMap<>();
101-
human5.put("firstName", null);
102-
human5.put("lastName", "Doe");
103-
assertFalse(schema.isValid(human5)); // false
48+
Map<String, Object> invalidData = Map.of(
49+
"name", "Bo",
50+
"age", -5
51+
);
10452

105-
Map<String, String> human6 = new HashMap<>();
106-
human6.put("firstName", "Bob");
107-
human6.put("lastName", "");
108-
assertFalse(schema.isValid(human6)); // false
53+
assertTrue(schema.isValid(validData));
54+
assertFalse(schema.isValid(invalidData));
10955
}
11056
}
Lines changed: 18 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,45 @@
11
package hexlet.code;
22

33
import hexlet.code.schemas.NumberSchema;
4-
import hexlet.code.schemas.StringSchema;
54
import org.junit.jupiter.api.Test;
65
import static org.junit.jupiter.api.Assertions.assertTrue;
76
import static org.junit.jupiter.api.Assertions.assertFalse;
87

98
public class NumberSchemaTest {
109

11-
@Test
12-
public void testDefaultSchema() {
13-
Validator v = new Validator();
14-
NumberSchema schema = v.number();
15-
16-
assertTrue(schema.isValid(null));
17-
assertTrue(schema.isValid(5));
18-
}
19-
2010
@Test
2111
public void testRequired() {
22-
Validator v = new Validator();
23-
StringSchema schema = v.string().required();
12+
NumberSchema schema1 = new NumberSchema();
13+
assertFalse(schema1.required().isValid(null));
2414

25-
assertFalse(schema.isValid(null));
26-
assertFalse(schema.isValid(""));
27-
assertTrue(schema.isValid("hexlet"));
15+
NumberSchema schema2 = new NumberSchema();
16+
assertTrue(schema2.isValid(null));
2817
}
2918

3019
@Test
3120
public void testPositive() {
32-
Validator v = new Validator();
33-
NumberSchema schema = v.number().positive();
34-
35-
assertTrue(schema.isValid(10));
36-
assertFalse(schema.isValid(-10));
37-
assertFalse(schema.isValid(0));
21+
NumberSchema schema = new NumberSchema();
22+
assertTrue(schema.positive().isValid(10));
23+
assertFalse(schema.positive().isValid(-5));
24+
assertFalse(schema.positive().isValid(0));
3825
}
3926

4027
@Test
4128
public void testRange() {
42-
Validator v = new Validator();
43-
NumberSchema schema = v.number().range(5, 10);
44-
45-
assertTrue(schema.isValid(5));
46-
assertTrue(schema.isValid(10));
29+
NumberSchema schema = new NumberSchema();
30+
schema.range(5, 10);
31+
assertTrue(schema.isValid(7));
4732
assertFalse(schema.isValid(4));
4833
assertFalse(schema.isValid(11));
4934
}
5035

5136
@Test
52-
public void testCombinedRules() {
53-
Validator v = new Validator();
54-
NumberSchema schema = v.number()
55-
.required()
56-
.positive()
57-
.range(5, 10);
58-
59-
assertFalse(schema.isValid(null)); // required
60-
assertFalse(schema.isValid(-5)); // positive
61-
assertFalse(schema.isValid(0)); // positive
62-
assertFalse(schema.isValid(4)); // range
63-
assertFalse(schema.isValid(11)); // range
64-
assertTrue(schema.isValid(5)); // valid
65-
assertTrue(schema.isValid(10)); // valid
37+
public void testCombined() {
38+
NumberSchema schema = new NumberSchema();
39+
schema.required().positive().range(1, 10);
40+
assertTrue(schema.isValid(5));
41+
assertFalse(schema.isValid(null));
42+
assertFalse(schema.isValid(-3));
43+
assertFalse(schema.isValid(15));
6644
}
6745
}

0 commit comments

Comments
 (0)