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