Skip to content

Commit e2f8fd0

Browse files
committed
added Parser, Stylish, tests for new yml and json files
1 parent 910b7fa commit e2f8fd0

File tree

11 files changed

+289
-72
lines changed

11 files changed

+289
-72
lines changed

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,16 @@ public static String generateDiff(Map<String, Object> fileInfo1, Map<String, Obj
2323
StringBuilder differences = new StringBuilder("\n{\n");
2424

2525
for (String key : allKeys) {
26-
Object value1 = fileInfo1.get(key);
27-
Object value2 = fileInfo2.get(key);
26+
Object value1 = fileInfo1.getOrDefault(key, null);
27+
Object value2 = fileInfo2.getOrDefault(key, null);
2828

2929
if (value1 != null && value2 != null && value1.equals(value2)) {
3030
differences.append(" ").append(key).append(": ").append(value1).append("\n");
3131
} else {
32-
if (value1 != null) {
32+
if (fileInfo1.containsKey(key)) { // Ключ был в первом файле
3333
differences.append(" - ").append(key).append(": ").append(value1).append("\n");
3434
}
35-
if (value2 != null) {
35+
if (fileInfo2.containsKey(key)) { // Ключ был во втором файле
3636
differences.append(" + ").append(key).append(": ").append(value2).append("\n");
3737
}
3838
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package hexlet.code;
2+
3+
import java.util.List;
4+
import java.util.Map;
5+
6+
public class Stylish {
7+
public static String format(List<Map<String, Object>> diff) {
8+
StringBuilder result = new StringBuilder("\n{\n");
9+
for (Map<String, Object> entry : diff) {
10+
String sign = (String) entry.get("sign");
11+
String key = (String) entry.get("key");
12+
Object value = entry.get("value");
13+
14+
result.append(" ").append(sign).append(" ").append(key).append(": ").append(value).append("\n");
15+
}
16+
result.append("}\n");
17+
return result.toString();
18+
}
19+
}

app/src/main/resources/file1.json

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
{
2-
"host": "hexlet.io",
3-
"timeout": 50,
4-
"proxy": "123.234.53.22",
5-
"follow": false
2+
"setting1": "Some value",
3+
"setting2": 200,
4+
"setting3": true,
5+
"key1": "value1",
6+
"numbers1": [1, 2, 3, 4],
7+
"numbers2": [2, 3, 4, 5],
8+
"id": 45,
9+
"default": null,
10+
"checked": false,
11+
"numbers3": [3, 4, 5],
12+
"chars1": ["a", "b", "c"],
13+
"chars2": ["d", "e", "f"]
614
}

app/src/main/resources/file1.yml

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,29 @@
1-
host: hexlet.io
2-
timeout: 50
3-
proxy: 123.234.53.22
4-
follow: false
1+
setting1: Some value
2+
setting2: 200
3+
setting3: true
4+
key1: value1
5+
numbers1:
6+
- 1
7+
- 2
8+
- 3
9+
- 4
10+
numbers2:
11+
- 2
12+
- 3
13+
- 4
14+
- 5
15+
id: 45
16+
default: null
17+
checked: false
18+
numbers3:
19+
- 3
20+
- 4
21+
- 5
22+
chars1:
23+
- a
24+
- b
25+
- c
26+
chars2:
27+
- d
28+
- e
29+
- f

app/src/main/resources/file2.json

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,18 @@
11
{
2-
"timeout": 20,
3-
"verbose": true,
4-
"host": "hexlet.io"
2+
"setting1": "Another value",
3+
"setting2": 300,
4+
"setting3": "none",
5+
"key2": "value2",
6+
"numbers1": [1, 2, 3, 4],
7+
"numbers2": [22, 33, 44, 55],
8+
"id": null,
9+
"default": ["value1", "value2"],
10+
"checked": true,
11+
"numbers4": [4, 5, 6],
12+
"chars1": ["a", "b", "c"],
13+
"chars2": false,
14+
"obj1": {
15+
"nestedKey": "value",
16+
"isNested": true
17+
}
518
}

app/src/main/resources/file2.yml

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,31 @@
1-
timeout: 20
2-
verbose: true
3-
host: hexlet.io
1+
setting1: Another value
2+
setting2: 300
3+
setting3: none
4+
key2: value2
5+
numbers1:
6+
- 1
7+
- 2
8+
- 3
9+
- 4
10+
numbers2:
11+
- 22
12+
- 33
13+
- 44
14+
- 55
15+
id: null
16+
default:
17+
- value1
18+
- value2
19+
checked: true
20+
numbers4:
21+
- 4
22+
- 5
23+
- 6
24+
chars1:
25+
- a
26+
- b
27+
- c
28+
chars2: false
29+
obj1:
30+
nestedKey: value
31+
isNested: true

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

Lines changed: 90 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -5,56 +5,106 @@
55
import static org.junit.jupiter.api.Assertions.assertEquals;
66

77
class DifferTest {
8-
9-
@Test
10-
void testGenerateDiffJson() throws IOException {
11-
// Указываем пути к фикстурам
12-
String filePath1 = "file1.json";
13-
String filePath2 = "file2.json";
14-
15-
// Ожидаемый результат сравнения JSON-файлов
16-
String expectedDiff = """
8+
private static final String EXPECTED_DIFF = """
179
{
18-
- follow: false
19-
host: hexlet.io
20-
- proxy: 123.234.53.22
21-
- timeout: 50
22-
+ timeout: 20
23-
+ verbose: true
10+
chars1: [a, b, c]
11+
- chars2: [d, e, f]
12+
+ chars2: false
13+
- checked: false
14+
+ checked: true
15+
- default: null
16+
+ default: [value1, value2]
17+
- id: 45
18+
+ id: null
19+
- key1: value1
20+
+ key2: value2
21+
numbers1: [1, 2, 3, 4]
22+
- numbers2: [2, 3, 4, 5]
23+
+ numbers2: [22, 33, 44, 55]
24+
- numbers3: [3, 4, 5]
25+
+ numbers4: [4, 5, 6]
26+
+ obj1: {nestedKey=value, isNested=true}
27+
- setting1: Some value
28+
+ setting1: Another value
29+
- setting2: 200
30+
+ setting2: 300
31+
- setting3: true
32+
+ setting3: none
2433
}
2534
""";
2635

27-
// Запускаем метод сравнения
36+
@Test
37+
void testGenerateDiffForJson() throws IOException {
38+
String filePath1 = "file1.json";
39+
String filePath2 = "file2.json";
2840
String actualDiff = Differ.generate(filePath1, filePath2);
29-
30-
// Проверяем, что результат совпадает с ожидаемым
31-
assertEquals(expectedDiff.trim(), actualDiff.trim());
32-
System.out.println("ВСЕ РАБОТАЕТ!!");
41+
assertEquals(EXPECTED_DIFF.trim(), actualDiff.trim());
42+
System.out.println("ВСЕ РАБОТАЕТ!");
3343
}
3444

3545
@Test
36-
void testGenerateDiffYml() throws IOException {
37-
// Указываем пути к фикстурам
46+
void testGenerateDiffForYaml() throws IOException {
3847
String filePath1 = "file1.yml";
3948
String filePath2 = "file2.yml";
40-
41-
// Ожидаемый результат сравнения YML-файлов
42-
String expectedDiff = """
43-
{
44-
- follow: false
45-
host: hexlet.io
46-
- proxy: 123.234.53.22
47-
- timeout: 50
48-
+ timeout: 20
49-
+ verbose: true
50-
}
51-
""";
52-
53-
// Запускаем метод сравнения
5449
String actualDiff = Differ.generate(filePath1, filePath2);
55-
56-
// Проверяем, что результат совпадает с ожидаемым
57-
assertEquals(expectedDiff.trim(), actualDiff.trim());
50+
assertEquals(EXPECTED_DIFF.trim(), actualDiff.trim());
5851
System.out.println("ВСЕ РАБОТАЕТ! лала!");
5952
}
60-
}
53+
54+
}
55+
56+
57+
58+
59+
//
60+
//@Test
61+
//void testGenerateDiffJson() throws IOException {
62+
// // Указываем пути к фикстурам
63+
// String filePath1 = "file1.json";
64+
// String filePath2 = "file2.json";
65+
//
66+
// // Ожидаемый результат сравнения JSON-файлов
67+
// String expectedDiff = """
68+
// {
69+
// - follow: false
70+
// host: hexlet.io
71+
// - proxy: 123.234.53.22
72+
// - timeout: 50
73+
// + timeout: 20
74+
// + verbose: true
75+
// }
76+
// """;
77+
//
78+
// // Запускаем метод сравнения
79+
// String actualDiff = Differ.generate(filePath1, filePath2);
80+
//
81+
// // Проверяем, что результат совпадает с ожидаемым
82+
// assertEquals(expectedDiff.trim(), actualDiff.trim());
83+
// System.out.println("ВСЕ РАБОТАЕТ!!");
84+
//}
85+
//
86+
//@Test
87+
//void testGenerateDiffYml() throws IOException {
88+
// // Указываем пути к фикстурам
89+
// String filePath1 = "file1.yml";
90+
// String filePath2 = "file2.yml";
91+
//
92+
// // Ожидаемый результат сравнения YML-файлов
93+
// String expectedDiff = """
94+
// {
95+
// - follow: false
96+
// host: hexlet.io
97+
// - proxy: 123.234.53.22
98+
// - timeout: 50
99+
// + timeout: 20
100+
// + verbose: true
101+
// }
102+
// """;
103+
//
104+
// // Запускаем метод сравнения
105+
// String actualDiff = Differ.generate(filePath1, filePath2);
106+
//
107+
// // Проверяем, что результат совпадает с ожидаемым
108+
// assertEquals(expectedDiff.trim(), actualDiff.trim());
109+
// System.out.println("ВСЕ РАБОТАЕТ! лала!");
110+
//}

app/src/test/resources/file1.json

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
{
2-
"host": "hexlet.io",
3-
"timeout": 50,
4-
"proxy": "123.234.53.22",
5-
"follow": false
2+
"setting1": "Some value",
3+
"setting2": 200,
4+
"setting3": true,
5+
"key1": "value1",
6+
"numbers1": [1, 2, 3, 4],
7+
"numbers2": [2, 3, 4, 5],
8+
"id": 45,
9+
"default": null,
10+
"checked": false,
11+
"numbers3": [3, 4, 5],
12+
"chars1": ["a", "b", "c"],
13+
"chars2": ["d", "e", "f"]
614
}

app/src/test/resources/file1.yml

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,29 @@
1-
host: hexlet.io
2-
timeout: 50
3-
proxy: 123.234.53.22
4-
follow: false
1+
setting1: Some value
2+
setting2: 200
3+
setting3: true
4+
key1: value1
5+
numbers1:
6+
- 1
7+
- 2
8+
- 3
9+
- 4
10+
numbers2:
11+
- 2
12+
- 3
13+
- 4
14+
- 5
15+
id: 45
16+
default: null
17+
checked: false
18+
numbers3:
19+
- 3
20+
- 4
21+
- 5
22+
chars1:
23+
- a
24+
- b
25+
- c
26+
chars2:
27+
- d
28+
- e
29+
- f

app/src/test/resources/file2.json

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,18 @@
11
{
2-
"timeout": 20,
3-
"verbose": true,
4-
"host": "hexlet.io"
2+
"setting1": "Another value",
3+
"setting2": 300,
4+
"setting3": "none",
5+
"key2": "value2",
6+
"numbers1": [1, 2, 3, 4],
7+
"numbers2": [22, 33, 44, 55],
8+
"id": null,
9+
"default": ["value1", "value2"],
10+
"checked": true,
11+
"numbers4": [4, 5, 6],
12+
"chars1": ["a", "b", "c"],
13+
"chars2": false,
14+
"obj1": {
15+
"nestedKey": "value",
16+
"isNested": true
17+
}
518
}

0 commit comments

Comments
 (0)