Konrad Barszczyk 3 роки тому
батько
коміт
0508cf4c29

+ 8 - 1
.idea/misc.xml

@@ -1,7 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="ExternalStorageConfigurationManager" enabled="true" />
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="17" project-jdk-type="JavaSDK">
+  <component name="MavenProjectsManager">
+    <option name="originalFiles">
+      <list>
+        <option value="$PROJECT_DIR$/pom.xml" />
+      </list>
+    </option>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="temurin-11" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/out" />
   </component>
 </project>

+ 132 - 2
.idea/workspace.xml

@@ -1,15 +1,47 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
+  <component name="AutoImportSettings">
+    <option name="autoReloadType" value="SELECTIVE" />
+  </component>
   <component name="ChangeListManager">
-    <list default="true" id="37ce0d60-a7ff-4200-9d2d-0bad5aef2491" name="Changes" comment="" />
+    <list default="true" id="37ce0d60-a7ff-4200-9d2d-0bad5aef2491" name="Changes" comment="">
+      <change afterPath="$PROJECT_DIR$/.gitignore" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/.idea/encodings.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/.idea/inspectionProfiles/Project_Default.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/pom.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/java/pl/konrad/DirConverter.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/main/java/pl/konrad/FileConverter.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/test/java/pl/konrad/DirConverterBehaviourTest.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/test/java/pl/konrad/DirConverterTest.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/test/java/pl/konrad/FileConverterTest.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/test/resources/1.txt" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/test/resources/2.txt" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/test/resources/3.txt" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/test/resources/4.txt" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/test/resources/5.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/test/resources/dir_test.txt" afterDir="false" />
+    </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
     <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
     <option name="LAST_RESOLUTION" value="IGNORE" />
   </component>
+  <component name="FileTemplateManagerImpl">
+    <option name="RECENT_TEMPLATES">
+      <list>
+        <option value="Class" />
+      </list>
+    </option>
+  </component>
   <component name="Git.Settings">
     <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
   </component>
+  <component name="MarkdownSettingsMigration">
+    <option name="stateVersion" value="1" />
+  </component>
   <component name="ProjectId" id="2Hk7V2FDGShzXKkfO3kTZNRrnMl" />
   <component name="ProjectLevelVcsManager" settingsEditedManually="true" />
   <component name="ProjectViewState">
@@ -20,9 +52,103 @@
   "keyToString": {
     "RunOnceActivity.OpenProjectViewOnStart": "true",
     "RunOnceActivity.ShowReadmeOnStart": "true",
-    "WebServerToolWindowFactoryState": "false"
+    "SHARE_PROJECT_CONFIGURATION_FILES": "true",
+    "WebServerToolWindowFactoryState": "false",
+    "project.structure.last.edited": "Global Libraries",
+    "project.structure.proportion": "0.15",
+    "project.structure.side.proportion": "0.2"
   }
 }]]></component>
+  <component name="RunManager" selected="JUnit.DirConverterBehaviourTest.testBehaviourWithPartialMocking">
+    <configuration name="DirConverterBehaviourTest" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
+      <module name="konwersja-liter" />
+      <extension name="coverage">
+        <pattern>
+          <option name="PATTERN" value="pl.konrad.*" />
+          <option name="ENABLED" value="true" />
+        </pattern>
+      </extension>
+      <option name="PACKAGE_NAME" value="pl.konrad" />
+      <option name="MAIN_CLASS_NAME" value="pl.konrad.DirConverterBehaviourTest" />
+      <option name="TEST_OBJECT" value="class" />
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+    <configuration name="DirConverterBehaviourTest.testBehaviourWithArgumentCaptor" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
+      <module name="konwersja-liter" />
+      <extension name="coverage">
+        <pattern>
+          <option name="PATTERN" value="pl.konrad.*" />
+          <option name="ENABLED" value="true" />
+        </pattern>
+      </extension>
+      <option name="PACKAGE_NAME" value="pl.konrad" />
+      <option name="MAIN_CLASS_NAME" value="pl.konrad.DirConverterBehaviourTest" />
+      <option name="METHOD_NAME" value="testBehaviourWithArgumentCaptor" />
+      <option name="TEST_OBJECT" value="method" />
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+    <configuration name="DirConverterBehaviourTest.testBehaviourWithCalledAnswer" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
+      <module name="konwersja-liter" />
+      <extension name="coverage">
+        <pattern>
+          <option name="PATTERN" value="pl.konrad.*" />
+          <option name="ENABLED" value="true" />
+        </pattern>
+      </extension>
+      <option name="PACKAGE_NAME" value="pl.konrad" />
+      <option name="MAIN_CLASS_NAME" value="pl.konrad.DirConverterBehaviourTest" />
+      <option name="METHOD_NAME" value="testBehaviourWithCalledAnswer" />
+      <option name="TEST_OBJECT" value="method" />
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+    <configuration name="DirConverterBehaviourTest.testBehaviourWithDoNothing" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
+      <module name="konwersja-liter" />
+      <extension name="coverage">
+        <pattern>
+          <option name="PATTERN" value="pl.konrad.*" />
+          <option name="ENABLED" value="true" />
+        </pattern>
+      </extension>
+      <option name="PACKAGE_NAME" value="pl.konrad" />
+      <option name="MAIN_CLASS_NAME" value="pl.konrad.DirConverterBehaviourTest" />
+      <option name="METHOD_NAME" value="testBehaviourWithDoNothing" />
+      <option name="TEST_OBJECT" value="method" />
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+    <configuration name="DirConverterBehaviourTest.testBehaviourWithPartialMocking" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
+      <module name="konwersja-liter" />
+      <extension name="coverage">
+        <pattern>
+          <option name="PATTERN" value="pl.konrad.*" />
+          <option name="ENABLED" value="true" />
+        </pattern>
+      </extension>
+      <option name="PACKAGE_NAME" value="pl.konrad" />
+      <option name="MAIN_CLASS_NAME" value="pl.konrad.DirConverterBehaviourTest" />
+      <option name="METHOD_NAME" value="testBehaviourWithPartialMocking" />
+      <option name="TEST_OBJECT" value="method" />
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+    <recent_temporary>
+      <list>
+        <item itemvalue="JUnit.DirConverterBehaviourTest.testBehaviourWithPartialMocking" />
+        <item itemvalue="JUnit.DirConverterBehaviourTest.testBehaviourWithCalledAnswer" />
+        <item itemvalue="JUnit.DirConverterBehaviourTest" />
+        <item itemvalue="JUnit.DirConverterBehaviourTest.testBehaviourWithArgumentCaptor" />
+        <item itemvalue="JUnit.DirConverterBehaviourTest.testBehaviourWithDoNothing" />
+      </list>
+    </recent_temporary>
+  </component>
   <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
   <component name="TaskManager">
     <task active="true" id="Default" summary="Default task">
@@ -31,9 +157,13 @@
       <option name="number" value="Default" />
       <option name="presentableId" value="Default" />
       <updated>1668817248325</updated>
+      <workItem from="1668817250034" duration="8298000" />
     </task>
     <servers />
   </component>
+  <component name="TypeScriptGeneratedFilesManager">
+    <option name="version" value="3" />
+  </component>
   <component name="Vcs.Log.Tabs.Properties">
     <option name="TAB_STATES">
       <map>

+ 66 - 3
pom.xml

@@ -7,11 +7,74 @@
     <groupId>pl.konrad</groupId>
     <artifactId>konwersja-liter</artifactId>
     <version>1.0-SNAPSHOT</version>
+    <packaging>jar</packaging>
 
     <properties>
-        <maven.compiler.source>17</maven.compiler.source>
-        <maven.compiler.target>17</maven.compiler.target>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <java.version>11</java.version>
+        <junit.jupiter.version>5.9.1</junit.jupiter.version>
+        <mockito.version>4.8.1</mockito.version>
     </properties>
-    
+    <dependencies>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-engine</artifactId>
+            <version>${junit.jupiter.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <version>${mockito.version}</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+    <build>
+        <testResources>
+            <testResource>
+                <directory>src/test/resources</directory>
+                <excludes>
+                    <exclude>**/.gitkeep</exclude>
+                </excludes>
+            </testResource>
+        </testResources>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.10.1</version>
+                <configuration>
+                    <source>${java.version}</source>
+                    <target>${java.version}</target>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>3.0.0-M7</version>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-site-plugin</artifactId>
+                <version>4.0.0-M3</version>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-resources-plugin</artifactId>
+                <version>3.1.0</version>
+                <configuration>
+                    <includeEmptyDirs>true</includeEmptyDirs>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+    <reporting>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-project-info-reports-plugin</artifactId>
+                <version>3.4.1</version>
+            </plugin>
+        </plugins>
+    </reporting>
 </project>

+ 26 - 1
src/main/java/pl/konrad/DirConverter.java

@@ -1,2 +1,27 @@
-package pl.konrad;public class DirConverter {
+package pl.konrad;
+
+import java.io.File;
+
+public class DirConverter {
+
+    private final FileConverter fileConverter;
+
+    public DirConverter(FileConverter fileConverter) {
+        this.fileConverter = fileConverter;
+    }
+
+
+    public void convert(String pathToDirectory, String fileExtension) {
+        File directoryWithFiles = new File(pathToDirectory);
+        if (directoryWithFiles.exists()) {
+            File[] files = directoryWithFiles.listFiles();
+            if (files != null && files.length > 0) {
+                for (File file : files) {
+                    if (file.getName().endsWith(fileExtension)) {
+                        fileConverter.convert(file.getAbsolutePath());
+                    }
+                }
+            }
+        }
+    }
 }

+ 27 - 1
src/main/java/pl/konrad/FileConverter.java

@@ -1,2 +1,28 @@
-package pl.konrad;public class FileConverter {
+package pl.konrad;
+
+import java.io.*;
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class FileConverter {
+
+    public void convert(String pathToFile) {
+        try (BufferedReader fileReader = new BufferedReader(new FileReader(pathToFile))) {
+            changeLettersToUpperInFile(fileReader, pathToFile);
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    private void changeLettersToUpperInFile(BufferedReader file, String pathToFile) throws IOException {
+        List<String> newUpperLines = file.lines().map(String::toUpperCase).collect(Collectors.toList());
+        try (BufferedWriter fileWriter = new BufferedWriter(new FileWriter(pathToFile))) {
+            for (String line : newUpperLines) {
+                fileWriter.write(line + System.lineSeparator());
+            }
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        }
+        file.close();
+    }
 }

+ 49 - 1
src/test/java/pl/konrad/DirConverterBehaviourTest.java

@@ -1,2 +1,50 @@
-package pl.konrad;public class DirConverterBehaviourTest {
+package pl.konrad;
+
+
+import org.junit.jupiter.api.Test;
+import org.mockito.ArgumentCaptor;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.mockito.Mockito.*;
+
+public class DirConverterBehaviourTest {
+
+    DirConverter dirConverter = mock(DirConverter.class);
+
+    @Test
+    public void testBehaviourWithDoNothing() {
+        doNothing().when(dirConverter).convert("", ".xml");
+        dirConverter.convert("", ".xml");
+        verify(dirConverter, times(1)).convert("", ".xml");
+    }
+
+    @Test
+    public void testBehaviourWithArgumentCaptor() {
+        ArgumentCaptor<String> valueCapture = ArgumentCaptor.forClass(String.class);
+        doNothing().when(dirConverter).convert(anyString(), valueCapture.capture());
+        dirConverter.convert("","captured");
+
+        assertEquals("captured",valueCapture.getValue());
+    }
+
+    @Test
+    public void testBehaviourWithCalledAnswer(){
+        doAnswer(invocationOnMock -> {
+            Object arg0 = invocationOnMock.getArgument(0);
+            Object arg1 = invocationOnMock.getArgument(1);
+            assertEquals("filepath", arg0);
+            assertEquals(".json", arg1);
+            return null;
+        }).when(dirConverter).convert(anyString(),anyString());
+        dirConverter.convert("filepath",".json");
+    }
+
+    @Test
+    public void testBehaviourWithPartialMocking(){
+        doCallRealMethod().when(dirConverter).convert(anyString(),anyString());
+        dirConverter.convert("pathToDirectory",".xml");
+
+        verify(dirConverter,times(1)).convert("pathToDirectory",".xml");
+    }
+
 }

+ 71 - 1
src/test/java/pl/konrad/DirConverterTest.java

@@ -1,2 +1,72 @@
-package pl.konrad;public class DirConverterTest {
+package pl.konrad;
+
+import org.junit.jupiter.api.Test;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class DirConverterTest {
+
+    private final FileConverter fileConverter = new FileConverter();
+    private final DirConverter dirConverter = new DirConverter(fileConverter);
+
+    @Test
+    public void testXmlExtension() throws IOException, URISyntaxException {
+        String extension = ".xml";
+        convertToUpperCase(extension);
+        List<List<String>> filesContents = getFilesContents(extension);
+        assertEquals(1, filesContents.size());
+        testContent(extension);
+    }
+
+    @Test
+    public void testTxtExtension() throws IOException, URISyntaxException {
+        String extension = ".txt";
+        convertToUpperCase(extension);
+        List<List<String>> filesContents = getFilesContents(extension);
+        assertEquals(5, filesContents.size());
+        testContent(extension);
+    }
+
+    private void testContent(String extension) throws IOException, URISyntaxException {
+        for (List<String> lines : getFilesContents(extension)) {
+            for (String line : lines) {
+                assertEquals(line, line.toUpperCase());
+            }
+        }
+    }
+
+    private List<List<String>> getFilesContents(String extension) throws IOException, URISyntaxException {
+        List<List<String>> filesContents = new ArrayList<>();
+        File directory = new File(getPath());
+        if (directory.exists()) {
+            File[] files = directory.listFiles();
+            if (files != null && files.length != 0) {
+                for (File file : files) {
+                    if (file.getName().endsWith(extension)) {
+                        filesContents.add(Files.lines(file.toPath(), Charset.defaultCharset()).collect(Collectors.toList()));
+                    }
+                }
+            }
+        }
+        return filesContents;
+    }
+
+    private void convertToUpperCase(String extension) throws URISyntaxException {
+        dirConverter.convert(getPath(), extension);
+    }
+
+    private String getPath() throws URISyntaxException {
+        return Paths.get(Objects.requireNonNull(getClass().getClassLoader().getResource("")).toURI()).toString();
+    }
 }

+ 59 - 1
src/test/java/pl/konrad/FileConverterTest.java

@@ -1,2 +1,60 @@
-package pl.konrad;public class FileConverterTest {
+package pl.konrad;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.nio.file.Paths;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertIterableEquals;
+
+public class FileConverterTest {
+    private final FileConverter fileConverter = new FileConverter();
+
+    @Test
+    public void testFileWithNumbersAndSpaces() throws URISyntaxException {
+        assertEquals("TE  STOWY   TEKST 123", getFileLines("1.txt").get(0));
+        assertEquals("KONRAD B 1234", getFileLines("2.txt").get(0));
+    }
+
+    @Test
+    public void testFileWithMultipleLines() throws URISyntaxException{
+        List<String> exceptedLines = List.of("B","A","R","S","Z","C","Z","Y","K");
+        assertIterableEquals(exceptedLines, getFileLines("3.txt"));
+    }
+
+    @Test
+    public void testFileWithMultipleLinesAndNumbers() throws URISyntaxException{
+        List<String> exceptedLines = List.of("T","E","1","4","5");
+        assertIterableEquals(exceptedLines,getFileLines("4.txt"));
+    }
+
+    private List<String> getFileLines(String fileName) throws URISyntaxException {
+        String pathToFile = getFilePath(fileName);
+        File file = new File(pathToFile);
+        fileConverter.convert(file.getAbsolutePath());
+        return readLines(file);
+    }
+
+    private String getFilePath(String fileName) throws URISyntaxException {
+        return Paths.get(Objects.requireNonNull(getClass().getClassLoader().getResource(fileName)).toURI()).toString();
+    }
+
+    private List<String> readLines(File file) {
+        try (BufferedReader fileReader = new BufferedReader(new FileReader(file))) {
+            return fileReader.lines().collect(Collectors.toList());
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        }
+        return null;
+    }
+
 }

+ 2 - 0
src/test/resources/1.txt

@@ -0,0 +1,2 @@
+te  stowy   tekst 123
+

+ 1 - 0
src/test/resources/2.txt

@@ -0,0 +1 @@
+Konrad b 1234

+ 9 - 9
src/test/resources/3.txt

@@ -1,9 +1,9 @@
-1
-2
-BAR
-3
-4
-szczyk
-6
-kon
-rad
+b
+a
+r
+s
+z
+c
+z
+y
+k

+ 5 - 0
src/test/resources/4.txt

@@ -0,0 +1,5 @@
+T
+E
+1
+4
+5

+ 5 - 0
src/test/resources/5.xml

@@ -0,0 +1,5 @@
+t
+E
+S
+t
+1

+ 1 - 0
src/test/resources/dir_test.txt

@@ -0,0 +1 @@
+ala ma kota