From 934973b644bf3fe847347716daaf0e3f48dfaec1 Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 17 Oct 2023 00:08:29 +0300 Subject: [PATCH 1/2] module 1 solution --- module01/pom.xml | 8 ++++ .../java/ru/sberbank/edu/MyCommonDivisor.java | 33 ++++++++++++++++ .../main/java/ru/sberbank/edu/MyGreeting.java | 13 +++++++ .../src/test/java/CommonDivisorTests.java | 39 +++++++++++++++++++ module01/src/test/java/GreetingTests.java | 17 ++++++++ 5 files changed, 110 insertions(+) create mode 100644 module01/src/main/java/ru/sberbank/edu/MyCommonDivisor.java create mode 100644 module01/src/main/java/ru/sberbank/edu/MyGreeting.java create mode 100644 module01/src/test/java/CommonDivisorTests.java create mode 100644 module01/src/test/java/GreetingTests.java 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"); + } + +} From 92f149bb0631271da8d67b979296ae4133961fd7 Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 31 Oct 2023 23:39:15 +0300 Subject: [PATCH 2/2] module 2 solution --- module02/README.md | 4 +- module02/pom.xml | 20 +++ .../src/main/java/ru/sberbank/edu/App.java | 12 +- .../main/java/ru/sberbank/edu/Statistic.java | 17 ++- .../ru/sberbank/edu/StatisticCollector.java | 94 ++++++++++++ .../sberbank/edu/StatisticCollectorToDB.java | 14 ++ .../edu/StatisticCollectorToFile.java | 46 ++++++ module02/src/main/resources/dev_data | 14 ++ module02/src/test/java/FillingTest.java | 140 ++++++++++++++++++ module02/src/test/resources/test_blank_data | 14 ++ module02/src/test/resources/test_data | 11 ++ module02/src/test/resources/test_empty_data | 0 12 files changed, 372 insertions(+), 14 deletions(-) create mode 100644 module02/src/main/java/ru/sberbank/edu/StatisticCollector.java create mode 100644 module02/src/main/java/ru/sberbank/edu/StatisticCollectorToDB.java create mode 100644 module02/src/main/java/ru/sberbank/edu/StatisticCollectorToFile.java create mode 100644 module02/src/main/resources/dev_data create mode 100644 module02/src/test/java/FillingTest.java create mode 100644 module02/src/test/resources/test_blank_data create mode 100644 module02/src/test/resources/test_data create mode 100644 module02/src/test/resources/test_empty_data 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