diff --git a/module01/pom.xml b/module01/pom.xml
index 932df7e3..3710f255 100644
--- a/module01/pom.xml
+++ b/module01/pom.xml
@@ -5,6 +5,14 @@
ru.sberbank.edu
1.0-SNAPSHOT
+
+
+ org.junit.jupiter
+ junit-jupiter-params
+ 5.10.0-M1
+ test
+
+
4.0.0
module01
diff --git a/module01/src/main/java/ru/sberbank/edu/MyCommonDivisor.java b/module01/src/main/java/ru/sberbank/edu/MyCommonDivisor.java
new file mode 100644
index 00000000..abfcac94
--- /dev/null
+++ b/module01/src/main/java/ru/sberbank/edu/MyCommonDivisor.java
@@ -0,0 +1,33 @@
+package ru.sberbank.edu;
+
+/**
+ * @author Чернов Алексей
+ */
+public class MyCommonDivisor implements CommonDivisor {
+ /**
+ * Метод расчета НОД по алгоритму Евклида
+ */
+ @Override
+ public int getDivisor(int firstNumber, int secondNumber) {
+
+ while (firstNumber > 0 && secondNumber > 0) {
+ if ((secondNumber % firstNumber) == 0) {
+ return firstNumber;
+ }
+
+ secondNumber %= firstNumber;
+
+ if ((firstNumber % secondNumber) == 0) {
+ return secondNumber;
+ }
+
+ firstNumber %= secondNumber;
+ }
+
+ if (firstNumber == 0) {
+ return secondNumber;
+ }
+
+ return firstNumber;
+ }
+}
diff --git a/module01/src/main/java/ru/sberbank/edu/MyGreeting.java b/module01/src/main/java/ru/sberbank/edu/MyGreeting.java
new file mode 100644
index 00000000..f53ac846
--- /dev/null
+++ b/module01/src/main/java/ru/sberbank/edu/MyGreeting.java
@@ -0,0 +1,13 @@
+package ru.sberbank.edu;
+/**
+ * @author Чернов Алексей
+ */
+public class MyGreeting implements Greeting{
+ /**
+ * Метод возвращает строку с информацией о хобби
+ */
+ public String getBestHobby(){
+ return "My hobby is long-distance running";
+ }
+
+}
diff --git a/module01/src/test/java/CommonDivisorTests.java b/module01/src/test/java/CommonDivisorTests.java
new file mode 100644
index 00000000..d8bba135
--- /dev/null
+++ b/module01/src/test/java/CommonDivisorTests.java
@@ -0,0 +1,39 @@
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.TestInstance;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+import ru.sberbank.edu.MyCommonDivisor;
+
+import java.util.stream.Stream;
+
+import static org.junit.jupiter.params.provider.Arguments.arguments;
+
+/**
+ * @author Чернов Алексей
+ * Класс с тестами для метода getDivisor класса ru.sberbank.edu.MyCommonDivisor
+ */
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
+public class CommonDivisorTests {
+
+ private static Stream testArguments() {
+ return Stream.of(
+ arguments(0, 0, 0),
+ arguments(5, 50, 5),
+ arguments(77, 14, 7),
+ arguments(13, 13, 13),
+ arguments(1, 1, 1)
+ );
+ }
+
+
+ MyCommonDivisor TestCommonDivisor = new MyCommonDivisor();
+
+ @ParameterizedTest
+ @MethodSource("testArguments")
+ public void CommonDivisorTest(int a, int b, int result) {
+
+ Assertions.assertEquals(TestCommonDivisor.getDivisor(a, b), result);
+ }
+
+}
\ No newline at end of file
diff --git a/module01/src/test/java/GreetingTests.java b/module01/src/test/java/GreetingTests.java
new file mode 100644
index 00000000..5050def2
--- /dev/null
+++ b/module01/src/test/java/GreetingTests.java
@@ -0,0 +1,17 @@
+import org.junit.jupiter.api.Test;
+import ru.sberbank.edu.MyGreeting;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class GreetingTests {
+ /**
+ * @author Чернов Алексей
+ * Класс с тестами для метода getBestHobby класса ru.sberbank.edu.MyGreeting
+ */
+ @Test
+ public void greetingMainTest(){
+ MyGreeting testGreeting = new MyGreeting();
+ assertEquals(testGreeting.getBestHobby(), "My hobby is long-distance running");
+ }
+
+}
diff --git a/module02/README.md b/module02/README.md
index 3179ee7a..05f5ddd0 100644
--- a/module02/README.md
+++ b/module02/README.md
@@ -2,10 +2,10 @@
## Задание №1
-* Напишите программу которая принимает на вход файл, содержащий некую инфомацию на нескольких строках.
+* Напишите программу, которая принимает на вход файл, содержащий некую информацию на нескольких строках.
* Необходимо собрать статистику, сколько строк, какая строка самая длинная, сколько всего пробелов.
* Результат записать в другой файл.
-* Подумать как лучше организовать, если у клиента должен быть выбор сохоранять в бд или в файл.
+* Подумать как лучше организовать, если у клиента должен быть выбор сохранять в бд или в файл.
## Критерии приемки
diff --git a/module02/pom.xml b/module02/pom.xml
index 45e842be..4aa4ddf9 100644
--- a/module02/pom.xml
+++ b/module02/pom.xml
@@ -5,6 +5,26 @@
ru.sberbank.edu
1.0-SNAPSHOT
+
+
+ org.junit.jupiter
+ junit-jupiter-params
+ 5.10.0-M1
+ test
+
+
+ ru.sberbank.edu
+ module01
+ 1.0-SNAPSHOT
+ test
+
+
+ junit
+ junit
+ 4.13.2
+ test
+
+
4.0.0
module02
diff --git a/module02/src/main/java/ru/sberbank/edu/App.java b/module02/src/main/java/ru/sberbank/edu/App.java
index 5419c026..378e4308 100644
--- a/module02/src/main/java/ru/sberbank/edu/App.java
+++ b/module02/src/main/java/ru/sberbank/edu/App.java
@@ -1,13 +1,13 @@
package ru.sberbank.edu;
+import java.io.IOException;
+
/**
* Hello world!
- *
*/
-public class App
-{
- public static void main( String[] args )
- {
- System.out.println( "Hello World!" );
+public class App {
+ public static void main(String[] args) throws IOException {
+ StatisticCollectorToFile result = new StatisticCollectorToFile("module02/src/main/resources/dev_data", "AppResult.txt");
+ result.save(result.getLineCount(), result.getSpaceCount(), result.getLongestLine());
}
}
diff --git a/module02/src/main/java/ru/sberbank/edu/Statistic.java b/module02/src/main/java/ru/sberbank/edu/Statistic.java
index 49ef9698..15f58374 100644
--- a/module02/src/main/java/ru/sberbank/edu/Statistic.java
+++ b/module02/src/main/java/ru/sberbank/edu/Statistic.java
@@ -1,11 +1,16 @@
package ru.sberbank.edu;
-// интерфейс можно менять
+import java.io.IOException;
+
+
public interface Statistic {
- int getLineCount();
- int getSpaceCount();
- String getLongestLine();
- void save(int lineCount, int spaceCount, String line);
+ int getLineCount() throws IOException;
+
+
+ int getSpaceCount() throws IOException;
+
+ void save(int lineCount, int spaceCount, String line) throws IOException;
-}
+ String getLongestLine() throws IOException;
+}
\ No newline at end of file
diff --git a/module02/src/main/java/ru/sberbank/edu/StatisticCollector.java b/module02/src/main/java/ru/sberbank/edu/StatisticCollector.java
new file mode 100644
index 00000000..059de0f2
--- /dev/null
+++ b/module02/src/main/java/ru/sberbank/edu/StatisticCollector.java
@@ -0,0 +1,94 @@
+package ru.sberbank.edu;
+
+import java.io.*;
+/**
+ * @author Чернов Алексей
+ */
+
+abstract class StatisticCollector implements Statistic {
+
+ /**
+ * Переменная с адресом файла-источника для стастистики
+ */
+ private final File statisticSource;
+
+ StatisticCollector(String file) {
+ statisticSource = new File(file);
+ }
+
+ /**
+ * Метод получения количества линий в файле
+ */
+ @Override
+ public int getLineCount() throws IOException {
+
+ FileReader fileReader = new FileReader(statisticSource);
+
+ BufferedReader bufferedReader = new BufferedReader(fileReader);
+
+ int lineCounter = 0;
+
+ String line = bufferedReader.readLine();
+
+ while (line != null) {
+ lineCounter += 1;
+ line = bufferedReader.readLine();
+ }
+
+ fileReader.close();
+ return lineCounter;
+ }
+
+ /**
+ * Метод получения количества пробелов в файле
+ */
+ @Override
+ public int getSpaceCount() throws IOException {
+
+ FileReader fileReader = new FileReader(statisticSource);
+
+ int spaceCounter = 0;
+
+ int symbol = fileReader.read();
+
+ while (symbol != -1) {
+
+ if ((char) symbol == ' ') {
+ spaceCounter += 1;
+ }
+
+ symbol = fileReader.read();
+ }
+
+ fileReader.close();
+ return spaceCounter;
+ }
+
+ /**
+ * Метод получения самой длинной строки в файле
+ */
+ @Override
+ public String getLongestLine() throws IOException {
+
+ FileReader fileReader = new FileReader(statisticSource);
+
+ BufferedReader bufferedReader = new BufferedReader(fileReader);
+
+ String theLongestString = "";
+ String line = bufferedReader.readLine();
+
+ while (line != null) {
+
+ if (line.length() > theLongestString.length()) {
+ theLongestString = line;
+ }
+
+ line = bufferedReader.readLine();
+
+ }
+
+ fileReader.close();
+ return theLongestString;
+ }
+
+}
\ No newline at end of file
diff --git a/module02/src/main/java/ru/sberbank/edu/StatisticCollectorToDB.java b/module02/src/main/java/ru/sberbank/edu/StatisticCollectorToDB.java
new file mode 100644
index 00000000..8e25d80c
--- /dev/null
+++ b/module02/src/main/java/ru/sberbank/edu/StatisticCollectorToDB.java
@@ -0,0 +1,14 @@
+package ru.sberbank.edu;
+
+public class StatisticCollectorToDB extends StatisticCollector {
+ StatisticCollectorToDB(String file) {
+ super(file);
+ }
+
+ @Override
+ public void save(int lineCount, int spaceCount, String line) {
+
+// DB recording...........
+
+ }
+}
\ No newline at end of file
diff --git a/module02/src/main/java/ru/sberbank/edu/StatisticCollectorToFile.java b/module02/src/main/java/ru/sberbank/edu/StatisticCollectorToFile.java
new file mode 100644
index 00000000..85bce0ee
--- /dev/null
+++ b/module02/src/main/java/ru/sberbank/edu/StatisticCollectorToFile.java
@@ -0,0 +1,46 @@
+package ru.sberbank.edu;
+
+import java.io.FileWriter;
+import java.io.IOException;
+
+/**
+ * Класс сохранения информации в файл
+ * @author Чернов Алексей
+ */
+public class StatisticCollectorToFile extends StatisticCollector {
+
+ /**
+ * Имя файла для записи результата
+ */
+ String resultFileName = "result.txt";
+
+ /**
+ * Фабричный метод с передачей костомного имени файла с результатом
+ */
+ public StatisticCollectorToFile(String file, String result) {
+ super(file);
+ resultFileName = result;
+ }
+ /**
+ * Реализация фабричного метода идентичная классу-родителю
+ */
+ public StatisticCollectorToFile(String file) {
+ super(file);
+ }
+
+ /**
+ * Метод записи полученных данных в файл
+ */
+ @Override
+ public void save(int lineCount, int spaceCount, String line) throws IOException {
+
+ FileWriter fileWriter = new FileWriter(resultFileName);
+ fileWriter.write("Counted lines: " + lineCount + "\n");
+ fileWriter.write("Counted spaces: " + spaceCount + "\n");
+ fileWriter.write("The longest line: \"" + line + "\"");
+
+ fileWriter.close();
+
+ }
+
+}
\ No newline at end of file
diff --git a/module02/src/main/resources/dev_data b/module02/src/main/resources/dev_data
new file mode 100644
index 00000000..ca36a254
--- /dev/null
+++ b/module02/src/main/resources/dev_data
@@ -0,0 +1,14 @@
+bdssdv
+fdbvdb
+bds gdf sdf
+ fdsg df
+ d gdfg dfgdf g
+
+ fg
+ dgfg
+ f g fd fgdfgdfgdf
+ gff
+ fdgdf
+
+
+
diff --git a/module02/src/test/java/FillingTest.java b/module02/src/test/java/FillingTest.java
new file mode 100644
index 00000000..18f18534
--- /dev/null
+++ b/module02/src/test/java/FillingTest.java
@@ -0,0 +1,140 @@
+import org.junit.Assert;
+import org.junit.Test;
+import ru.sberbank.edu.StatisticCollectorToFile;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
+
+public class FillingTest {
+
+ @Test
+ public void positiveTest() throws IOException {
+
+ StatisticCollectorToFile collector = new StatisticCollectorToFile("src/test/resources/test_data");
+
+ Assert.assertEquals(collector.getSpaceCount(), 24);
+ Assert.assertEquals(collector.getLineCount(), 11);
+ Assert.assertEquals(collector.getLongestLine(), " d gdfg dfgdf g fsd");
+
+ }
+
+ @Test
+ public void emptyTest() throws IOException {
+
+ StatisticCollectorToFile collector = new StatisticCollectorToFile("src/test/resources/test_empty_data");
+
+ Assert.assertEquals(collector.getSpaceCount(), 0);
+ Assert.assertEquals(collector.getLineCount(), 0);
+ Assert.assertEquals(collector.getLongestLine(), "");
+
+ }
+
+ @Test
+ public void blankTest() throws IOException {
+
+ StatisticCollectorToFile collector = new StatisticCollectorToFile("src/test/resources/test_blank_data");
+
+ Assert.assertEquals(collector.getSpaceCount(), 0);
+ Assert.assertEquals(collector.getLineCount(), 14);
+ Assert.assertEquals(collector.getLongestLine(), "");
+
+ }
+
+ @Test(expected = java.io.FileNotFoundException.class)
+ public void fileNotFoundTest() throws IOException {
+
+ StatisticCollectorToFile collector = new StatisticCollectorToFile("src/test/resources/aaa");
+
+ Assert.assertEquals(collector.getSpaceCount(), 0);
+
+ }
+
+ @Test
+ public void savingTestPositive() throws IOException {
+
+ StatisticCollectorToFile collectorPositive = new StatisticCollectorToFile("src/test/resources/test_data", "positive.txt");
+ collectorPositive.save(collectorPositive.getLineCount(), collectorPositive.getSpaceCount(), collectorPositive.getLongestLine());
+
+ BufferedReader reader = new BufferedReader(new FileReader("positive.txt"));
+ StringBuilder stringBuilder = new StringBuilder();
+
+ String line;
+ String ls = System.getProperty("line.separator");
+
+ while ((line = reader.readLine()) != null) {
+ stringBuilder.append(line);
+ stringBuilder.append(ls);
+ }
+
+ stringBuilder.deleteCharAt(stringBuilder.length() - 1);
+ reader.close();
+
+ String content = stringBuilder.toString();
+
+ Assert.assertEquals("""
+ Counted lines: 11
+ Counted spaces: 24
+ The longest line: " d gdfg dfgdf g fsd\"""", content);
+
+ }
+
+ @Test
+ public void savingTestEmpty() throws IOException {
+
+ StatisticCollectorToFile collectorEmpty = new StatisticCollectorToFile("src/test/resources/test_empty_data", "empty.txt");
+ collectorEmpty.save(collectorEmpty.getLineCount(), collectorEmpty.getSpaceCount(), collectorEmpty.getLongestLine());
+
+ BufferedReader reader = new BufferedReader(new FileReader("empty.txt"));
+ StringBuilder stringBuilder = new StringBuilder();
+
+ String line;
+ String ls = System.getProperty("line.separator");
+
+ while ((line = reader.readLine()) != null) {
+ stringBuilder.append(line);
+ stringBuilder.append(ls);
+ }
+
+ stringBuilder.deleteCharAt(stringBuilder.length() - 1);
+ reader.close();
+
+ String content = stringBuilder.toString();
+
+ Assert.assertEquals("""
+ Counted lines: 0
+ Counted spaces: 0
+ The longest line: "\"""", content);
+
+ }
+
+ @Test
+ public void savingTestBlank() throws IOException {
+
+ StatisticCollectorToFile collectorBlank = new StatisticCollectorToFile("src/test/resources/test_blank_data", "blank.txt");
+ collectorBlank.save(collectorBlank.getLineCount(), collectorBlank.getSpaceCount(), collectorBlank.getLongestLine());
+
+ BufferedReader reader = new BufferedReader(new FileReader("blank.txt"));
+ StringBuilder stringBuilder = new StringBuilder();
+
+ String line;
+ String ls = System.getProperty("line.separator");
+
+ while ((line = reader.readLine()) != null) {
+ stringBuilder.append(line);
+ stringBuilder.append(ls);
+ }
+
+ stringBuilder.deleteCharAt(stringBuilder.length() - 1);
+ reader.close();
+
+ String content = stringBuilder.toString();
+
+ Assert.assertEquals("""
+ Counted lines: 14
+ Counted spaces: 0
+ The longest line: "\"""", content);
+
+ }
+
+}
diff --git a/module02/src/test/resources/test_blank_data b/module02/src/test/resources/test_blank_data
new file mode 100644
index 00000000..5cf5d3dc
--- /dev/null
+++ b/module02/src/test/resources/test_blank_data
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/module02/src/test/resources/test_data b/module02/src/test/resources/test_data
new file mode 100644
index 00000000..679cf79e
--- /dev/null
+++ b/module02/src/test/resources/test_data
@@ -0,0 +1,11 @@
+bdssdvsdfsfs dvds
+fdbvdb dfv
+bds gdf sdf
+ fdsg df
+ d gdfg dfgdf g fsd
+
+ fgfsdf
+ dgfg
+ f g fd fgdfgdfgdf
+ gff
+ fdgdf
\ No newline at end of file
diff --git a/module02/src/test/resources/test_empty_data b/module02/src/test/resources/test_empty_data
new file mode 100644
index 00000000..e69de29b