Skip to content

Commit 910b7fa

Browse files
committed
added Parsel.java, changed Differ class, added test for yml files
1 parent d617a22 commit 910b7fa

File tree

9 files changed

+141
-27
lines changed

9 files changed

+141
-27
lines changed

app/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ dependencies {
1313
annotationProcessor("info.picocli:picocli-codegen:4.7.6") // Для генерации кода
1414
implementation("com.fasterxml.jackson.core:jackson-databind:2.15.0")
1515
testImplementation("org.junit.jupiter:junit-jupiter:5.8.1")
16+
implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.15.0") // добавляем YAML
1617
}
1718

1819
application {

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,17 @@ class App implements Runnable {
2121
description = "output format [default: stylish]", defaultValue = "stylish")
2222
private String format;
2323

24-
@CommandLine.Parameters(index = "0", paramLabel = "filepath1", description = "path to first file")
25-
private String filepath1;
24+
@CommandLine.Parameters(index = "0", paramLabel = "filePath1", description = "path to first file")
25+
private String filePath1;
2626

27-
@CommandLine.Parameters(index = "1", paramLabel = "filepath2", description = "path to second file")
28-
private String filepath2;
27+
@CommandLine.Parameters(index = "1", paramLabel = "filePath2", description = "path to second file")
28+
private String filePath2;
2929

3030

3131
@Override
3232
public void run() {
3333
try {
34-
String diff = Differ.generate(filepath1, filepath2);
34+
String diff = Differ.generate(filePath1, filePath2);
3535
System.out.println(diff);
3636
} catch (IOException e) {
3737
System.err.println("Ошибка при чтении файла: " + e.getMessage());
Lines changed: 66 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,28 @@
11
package hexlet.code;
22

3-
import com.fasterxml.jackson.core.type.TypeReference;
4-
import com.fasterxml.jackson.databind.ObjectMapper;
5-
6-
import java.io.File;
73
import java.io.IOException;
84
import java.util.Map;
95
import java.util.Set;
106
import java.util.TreeSet;
117

12-
13-
148
public class Differ {
159

1610
public static String generate(String filePath1, String filePath2) throws IOException {
17-
ObjectMapper objectMapper = new ObjectMapper();
18-
19-
// Читаю JSON и складываю в Map
20-
21-
Map<String, Object> fileInfo1 = objectMapper.readValue(new File("src/main/resources/" + filePath1),
22-
new TypeReference<Map<String, Object>>() { });
23-
Map<String, Object> fileInfo2 = objectMapper.readValue(new File("src/main/resources/" + filePath2),
24-
new TypeReference<Map<String, Object>>() { });
11+
// Используем новый Parser для обработки разных форматов
12+
Map<String, Object> fileInfo1 = Parser.parse(filePath1);
13+
Map<String, Object> fileInfo2 = Parser.parse(filePath2);
2514

2615
return generateDiff(fileInfo1, fileInfo2);
2716
}
2817

2918
public static String generateDiff(Map<String, Object> fileInfo1, Map<String, Object> fileInfo2) {
30-
31-
//разбиваю на значения
3219
Set<String> allKeys = new TreeSet<>();
3320
allKeys.addAll(fileInfo1.keySet());
3421
allKeys.addAll(fileInfo2.keySet());
3522

36-
// тут буду хранить результат сравнения
37-
StringBuilder differences = new StringBuilder("\n"
38-
+ "{\n");
23+
StringBuilder differences = new StringBuilder("\n{\n");
3924

40-
//сравниваю по значениям и вывожу обратно ключ-значение
4125
for (String key : allKeys) {
42-
4326
Object value1 = fileInfo1.get(key);
4427
Object value2 = fileInfo2.get(key);
4528

@@ -59,3 +42,65 @@ public static String generateDiff(Map<String, Object> fileInfo1, Map<String, Obj
5942
return differences.toString();
6043
}
6144
}
45+
46+
47+
//package hexlet.code;
48+
//
49+
//import com.fasterxml.jackson.core.type.TypeReference;
50+
//import com.fasterxml.jackson.databind.ObjectMapper;
51+
//
52+
//import java.io.File;
53+
//import java.io.IOException;
54+
//import java.util.Map;
55+
//import java.util.Set;
56+
//import java.util.TreeSet;
57+
//
58+
//
59+
//public class Differ {
60+
//
61+
// public static String generate(String filePath1, String filePath2) throws IOException {
62+
// ObjectMapper objectMapper = new ObjectMapper();
63+
//
64+
// // Читаю JSON и складываю в Map
65+
//
66+
// Map<String, Object> fileInfo1 = objectMapper.readValue(new File("src/main/resources/" + filePath1),
67+
// new TypeReference<Map<String, Object>>() { });
68+
// Map<String, Object> fileInfo2 = objectMapper.readValue(new File("src/main/resources/" + filePath2),
69+
// new TypeReference<Map<String, Object>>() { });
70+
//
71+
// return generateDiff(fileInfo1, fileInfo2);
72+
// }
73+
//
74+
// public static String generateDiff(Map<String, Object> fileInfo1, Map<String, Object> fileInfo2) {
75+
//
76+
// //разбиваю на значения
77+
// Set<String> allKeys = new TreeSet<>();
78+
// allKeys.addAll(fileInfo1.keySet());
79+
// allKeys.addAll(fileInfo2.keySet());
80+
//
81+
// // тут буду хранить результат сравнения
82+
// StringBuilder differences = new StringBuilder("\n"
83+
// + "{\n");
84+
//
85+
// //сравниваю по значениям и вывожу обратно ключ-значение
86+
// for (String key : allKeys) {
87+
//
88+
// Object value1 = fileInfo1.get(key);
89+
// Object value2 = fileInfo2.get(key);
90+
//
91+
// if (value1 != null && value2 != null && value1.equals(value2)) {
92+
// differences.append(" ").append(key).append(": ").append(value1).append("\n");
93+
// } else {
94+
// if (value1 != null) {
95+
// differences.append(" - ").append(key).append(": ").append(value1).append("\n");
96+
// }
97+
// if (value2 != null) {
98+
// differences.append(" + ").append(key).append(": ").append(value2).append("\n");
99+
// }
100+
// }
101+
// }
102+
//
103+
// differences.append("}\n");
104+
// return differences.toString();
105+
// }
106+
//}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package hexlet.code;
2+
3+
import com.fasterxml.jackson.core.type.TypeReference;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
6+
7+
import java.io.File;
8+
import java.io.IOException;
9+
import java.util.Map;
10+
11+
public class Parser {
12+
13+
public static Map<String, Object> parse(String filePath) throws IOException {
14+
ObjectMapper objectMapper;
15+
16+
if (filePath.endsWith(".json")) {
17+
objectMapper = new ObjectMapper();
18+
} else if (filePath.endsWith(".yaml") || filePath.endsWith(".yml")) {
19+
objectMapper = new ObjectMapper(new YAMLFactory()); // Используем YAML парсер
20+
} else {
21+
throw new IllegalArgumentException("Unsupported file format: " + filePath);
22+
}
23+
24+
return objectMapper.readValue(new File("src/main/resources/" + filePath),
25+
new TypeReference<Map<String, Object>>() {});
26+
}
27+
}

app/src/main/resources/file1.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
host: hexlet.io
2+
timeout: 50
3+
proxy: 123.234.53.22
4+
follow: false

app/src/main/resources/file2.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
timeout: 20
2+
verbose: true
3+
host: hexlet.io

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

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
class DifferTest {
88

99
@Test
10-
void testGenerateDiff() throws IOException {
10+
void testGenerateDiffJson() throws IOException {
1111
// Указываем пути к фикстурам
1212
String filePath1 = "file1.json";
1313
String filePath2 = "file2.json";
@@ -29,5 +29,32 @@ void testGenerateDiff() throws IOException {
2929

3030
// Проверяем, что результат совпадает с ожидаемым
3131
assertEquals(expectedDiff.trim(), actualDiff.trim());
32+
System.out.println("ВСЕ РАБОТАЕТ!!");
33+
}
34+
35+
@Test
36+
void testGenerateDiffYml() throws IOException {
37+
// Указываем пути к фикстурам
38+
String filePath1 = "file1.yml";
39+
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+
// Запускаем метод сравнения
54+
String actualDiff = Differ.generate(filePath1, filePath2);
55+
56+
// Проверяем, что результат совпадает с ожидаемым
57+
assertEquals(expectedDiff.trim(), actualDiff.trim());
58+
System.out.println("ВСЕ РАБОТАЕТ! лала!");
3259
}
3360
}

app/src/test/resources/file1.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
host: hexlet.io
2+
timeout: 50
3+
proxy: 123.234.53.22
4+
follow: false

app/src/test/resources/file2.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
timeout: 20
2+
verbose: true
3+
host: hexlet.io

0 commit comments

Comments
 (0)