From 3ec833a5bd6c9de17575b7dcf1b74a450e13deb1 Mon Sep 17 00:00:00 2001 From: Paul H Date: Fri, 13 Jun 2025 21:27:01 +0200 Subject: [PATCH] Added parser test --- .gitignore | 38 ++++++ .idea/.gitignore | 3 + .idea/encodings.xml | 7 + .idea/misc.xml | 14 ++ .idea/uiDesigner.xml | 124 ++++++++++++++++++ .idea/vcs.xml | 6 + pom.xml | 25 ++++ src/main/java/de/pabulaner/jcmd/Main.java | 23 ++++ .../de/pabulaner/jcmd/command/CdCommand.java | 25 ++++ .../pabulaner/jcmd/command/HelpCommand.java | 25 ++++ .../de/pabulaner/jcmd/command/LsCommand.java | 25 ++++ .../pabulaner/jcmd/command/MkdirCommand.java | 25 ++++ .../java/de/pabulaner/jcmd/core/Argument.java | 14 ++ .../java/de/pabulaner/jcmd/core/Command.java | 12 ++ .../java/de/pabulaner/jcmd/core/Flag.java | 28 ++++ .../java/de/pabulaner/jcmd/core/Line.java | 57 ++++++++ .../java/de/pabulaner/jcmd/core/Parser.java | 8 ++ .../de/pabulaner/jcmd/core/ParserTest.java | 31 +++++ 18 files changed, 490 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/encodings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/uiDesigner.xml create mode 100644 .idea/vcs.xml create mode 100644 pom.xml create mode 100644 src/main/java/de/pabulaner/jcmd/Main.java create mode 100644 src/main/java/de/pabulaner/jcmd/command/CdCommand.java create mode 100644 src/main/java/de/pabulaner/jcmd/command/HelpCommand.java create mode 100644 src/main/java/de/pabulaner/jcmd/command/LsCommand.java create mode 100644 src/main/java/de/pabulaner/jcmd/command/MkdirCommand.java create mode 100644 src/main/java/de/pabulaner/jcmd/core/Argument.java create mode 100644 src/main/java/de/pabulaner/jcmd/core/Command.java create mode 100644 src/main/java/de/pabulaner/jcmd/core/Flag.java create mode 100644 src/main/java/de/pabulaner/jcmd/core/Line.java create mode 100644 src/main/java/de/pabulaner/jcmd/core/Parser.java create mode 100644 src/test/java/de/pabulaner/jcmd/core/ParserTest.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5ff6309 --- /dev/null +++ b/.gitignore @@ -0,0 +1,38 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..463551f --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..946f212 --- /dev/null +++ b/pom.xml @@ -0,0 +1,25 @@ + + + 4.0.0 + + org.example + jcmd + 1.0-SNAPSHOT + + + 17 + 17 + UTF-8 + + + + + org.junit.jupiter + junit-jupiter-api + 5.13.1 + test + + + \ No newline at end of file diff --git a/src/main/java/de/pabulaner/jcmd/Main.java b/src/main/java/de/pabulaner/jcmd/Main.java new file mode 100644 index 0000000..1aa06e8 --- /dev/null +++ b/src/main/java/de/pabulaner/jcmd/Main.java @@ -0,0 +1,23 @@ +package de.pabulaner.jcmd; + +import de.pabulaner.jcmd.core.Line; +import de.pabulaner.jcmd.core.Parser; + +import java.util.Scanner; + +public class Main { + + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + Parser parser = null; + + while (true) { + String raw = scanner.nextLine(); + Line line = parser.parse(raw); + + if (line.getCommand() != null) { + // line.getCommand().exec(line.getFlags(), line.getArgs()); + } + } + } +} diff --git a/src/main/java/de/pabulaner/jcmd/command/CdCommand.java b/src/main/java/de/pabulaner/jcmd/command/CdCommand.java new file mode 100644 index 0000000..b82ac6c --- /dev/null +++ b/src/main/java/de/pabulaner/jcmd/command/CdCommand.java @@ -0,0 +1,25 @@ +package de.pabulaner.jcmd.command; + +import de.pabulaner.jcmd.core.Argument; +import de.pabulaner.jcmd.core.Command; +import de.pabulaner.jcmd.core.Flag; + +import java.util.List; + +public class CdCommand implements Command { + + @Override + public int exec(List flags, List args) { + return 0; + } + + @Override + public String getName() { + return null; + } + + @Override + public List getFlags() { + return null; + } +} diff --git a/src/main/java/de/pabulaner/jcmd/command/HelpCommand.java b/src/main/java/de/pabulaner/jcmd/command/HelpCommand.java new file mode 100644 index 0000000..fc9a383 --- /dev/null +++ b/src/main/java/de/pabulaner/jcmd/command/HelpCommand.java @@ -0,0 +1,25 @@ +package de.pabulaner.jcmd.command; + +import de.pabulaner.jcmd.core.Argument; +import de.pabulaner.jcmd.core.Command; +import de.pabulaner.jcmd.core.Flag; + +import java.util.List; + +public class HelpCommand implements Command { + + @Override + public int exec(List flags, List args) { + return 0; + } + + @Override + public String getName() { + return null; + } + + @Override + public List getFlags() { + return null; + } +} diff --git a/src/main/java/de/pabulaner/jcmd/command/LsCommand.java b/src/main/java/de/pabulaner/jcmd/command/LsCommand.java new file mode 100644 index 0000000..df0fc2b --- /dev/null +++ b/src/main/java/de/pabulaner/jcmd/command/LsCommand.java @@ -0,0 +1,25 @@ +package de.pabulaner.jcmd.command; + +import de.pabulaner.jcmd.core.Argument; +import de.pabulaner.jcmd.core.Command; +import de.pabulaner.jcmd.core.Flag; + +import java.util.List; + +public class LsCommand implements Command { + + @Override + public int exec(List flags, List args) { + return 0; + } + + @Override + public String getName() { + return null; + } + + @Override + public List getFlags() { + return null; + } +} diff --git a/src/main/java/de/pabulaner/jcmd/command/MkdirCommand.java b/src/main/java/de/pabulaner/jcmd/command/MkdirCommand.java new file mode 100644 index 0000000..3bb9283 --- /dev/null +++ b/src/main/java/de/pabulaner/jcmd/command/MkdirCommand.java @@ -0,0 +1,25 @@ +package de.pabulaner.jcmd.command; + +import de.pabulaner.jcmd.core.Argument; +import de.pabulaner.jcmd.core.Command; +import de.pabulaner.jcmd.core.Flag; + +import java.util.List; + +public class MkdirCommand implements Command { + + @Override + public int exec(List flags, List args) { + return 0; + } + + @Override + public String getName() { + return null; + } + + @Override + public List getFlags() { + return null; + } +} diff --git a/src/main/java/de/pabulaner/jcmd/core/Argument.java b/src/main/java/de/pabulaner/jcmd/core/Argument.java new file mode 100644 index 0000000..78aad0f --- /dev/null +++ b/src/main/java/de/pabulaner/jcmd/core/Argument.java @@ -0,0 +1,14 @@ +package de.pabulaner.jcmd.core; + +public class Argument { + + private final String value; + + public Argument(String value) { + this.value = value; + } + + public String getValue() { + return value; + } +} diff --git a/src/main/java/de/pabulaner/jcmd/core/Command.java b/src/main/java/de/pabulaner/jcmd/core/Command.java new file mode 100644 index 0000000..edb8f2f --- /dev/null +++ b/src/main/java/de/pabulaner/jcmd/core/Command.java @@ -0,0 +1,12 @@ +package de.pabulaner.jcmd.core; + +import java.util.List; + +public interface Command { + + int exec(List flags, List args); + + String getName(); + + List getFlags(); +} diff --git a/src/main/java/de/pabulaner/jcmd/core/Flag.java b/src/main/java/de/pabulaner/jcmd/core/Flag.java new file mode 100644 index 0000000..e07444a --- /dev/null +++ b/src/main/java/de/pabulaner/jcmd/core/Flag.java @@ -0,0 +1,28 @@ +package de.pabulaner.jcmd.core; + +public class Flag { + + private final String shortName; + + private final String longName; + + private final String description; + + public Flag(String shortName, String longName, String description) { + this.shortName = shortName; + this.longName = longName; + this.description = description; + } + + public String getShortName() { + return shortName; + } + + public String getLongName() { + return longName; + } + + public String getDescription() { + return description; + } +} diff --git a/src/main/java/de/pabulaner/jcmd/core/Line.java b/src/main/java/de/pabulaner/jcmd/core/Line.java new file mode 100644 index 0000000..5b501aa --- /dev/null +++ b/src/main/java/de/pabulaner/jcmd/core/Line.java @@ -0,0 +1,57 @@ +package de.pabulaner.jcmd.core; + +import java.util.List; + +public class Line { + + private final String command; + + private final List flags; + + private final List args; + + public Line(String command, List flags, List args) { + this.command = command; + this.flags = flags; + this.args = args; + } + + public String getCommand() { + return command; + } + + public List getFlags() { + return flags; + } + + public List getArgs() { + return args; + } + +// +// --- Please ignore this --- +// +// private final Command command; +// +// private final List flags; +// +// private final List args; +// +// public Line(Command command, List flags, List args) { +// this.command = command; +// this.flags = flags; +// this.args = args; +// } +// +// public Command getCommand() { +// return command; +// } +// +// public List getFlags() { +// return flags; +// } +// +// public List getArgs() { +// return args; +// } +} diff --git a/src/main/java/de/pabulaner/jcmd/core/Parser.java b/src/main/java/de/pabulaner/jcmd/core/Parser.java new file mode 100644 index 0000000..563be38 --- /dev/null +++ b/src/main/java/de/pabulaner/jcmd/core/Parser.java @@ -0,0 +1,8 @@ +package de.pabulaner.jcmd.core; + +public interface Parser { + + void addCommand(Command command); + + Line parse(String raw); +} diff --git a/src/test/java/de/pabulaner/jcmd/core/ParserTest.java b/src/test/java/de/pabulaner/jcmd/core/ParserTest.java new file mode 100644 index 0000000..f49d4e8 --- /dev/null +++ b/src/test/java/de/pabulaner/jcmd/core/ParserTest.java @@ -0,0 +1,31 @@ +package de.pabulaner.jcmd.core; + +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class ParserTest { + + @Test + public void testParser() { + Parser parser = null; // <-- Your implementation goes here + + testInput(parser, "ls", "ls", List.of(), List.of()); + testInput(parser, "ls -la", "ls", List.of("l", "a"), List.of()); + testInput(parser, "ls ./hello/world", "ls", List.of(), List.of("./hello/world")); + testInput(parser, "ls -la ./what", "ls", List.of("l", "a"), List.of("./what")); + testInput(parser, "rm -r /bin /opt", "rm", List.of("r"), List.of("/bin", "/opt")); + testInput(parser, "cd .", "cd", List.of(), List.of(".")); + testInput(parser, "mkdir .", "cd", List.of(), List.of(".")); + } + + private void testInput(Parser parser, String input, String expectedCommand, List expectedFlags, List expectedArgs) { + Line line = parser.parse(input); + + assertEquals(expectedCommand, line.getCommand(), "Wrong command"); + assertEquals(expectedFlags, line.getFlags(), "Wrong flags"); + assertEquals(expectedArgs, line.getArgs(), "Wrong args"); + } +} \ No newline at end of file