Skip to content

Commit f3f71ee

Browse files
committed
add
1 parent 093f19b commit f3f71ee

File tree

4 files changed

+102
-2
lines changed

4 files changed

+102
-2
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package hexlet.code;
2+
3+
import java.util.Map;
4+
5+
public class MapSchema extends BaseSchema<MapSchema> {
6+
private int requiredSize = -1;
7+
8+
@Override
9+
public boolean isValid(Object value) {
10+
if (!super.isValid(value)) {
11+
return false;
12+
}
13+
if (value == null) {
14+
return !isRequired;
15+
}
16+
if (!(value instanceof Map)) {
17+
return false;
18+
}
19+
Map<?, ?> map = (Map<?, ?>) value;
20+
if (requiredSize != -1 && map.size() != requiredSize) {
21+
return false;
22+
}
23+
return true;
24+
}
25+
26+
public MapSchema sizeof(int size) {
27+
this.requiredSize = size;
28+
return this;
29+
}
30+
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@ public boolean isValid(Object value) {
2020
return false;
2121
}
2222
if (value == null) {
23-
return !isRequired; // Если значение null, оно валидно только если isRequired == false
23+
return !isRequired;
2424
}
2525
if (!(value instanceof String)) {
2626
return false;
2727
}
2828
String str = (String) value;
2929
if (isRequired && str.isEmpty()) {
30-
return false; // Пустая строка не валидна, если isRequired == true
30+
return false;
3131
}
3232
if (str.length() < minLength) {
3333
return false;

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

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

0 commit comments

Comments
 (0)