Skip to content

Commit 9726ad1

Browse files
committed
Testing App
1 parent 8332ff5 commit 9726ad1

File tree

3 files changed

+56
-4
lines changed

3 files changed

+56
-4
lines changed

pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,12 @@
170170
<artifactId>jackson-databind</artifactId>
171171
<version>2.13.4.2</version>
172172
</dependency>
173+
<dependency>
174+
<groupId>com.github.stefanbirkner</groupId>
175+
<artifactId>system-lambda</artifactId>
176+
<version>1.2.1</version>
177+
<scope>test</scope>
178+
</dependency>
173179
</dependencies>
174180

175181
<build>

src/main/java/de/gwdg/metadataqa/api/cli/App.java

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.apache.commons.lang3.StringUtils;
2222

2323
import java.io.IOException;
24+
import java.util.ArrayList;
2425
import java.util.List;
2526
import java.util.Map;
2627
import java.util.logging.Logger;
@@ -132,10 +133,16 @@ public static void main(String[] args) {
132133
CommandLine cmd = parser.parse(options, args);
133134
new App(cmd).run();
134135
} catch (MissingOptionException ex) {
135-
formatter.printHelp(appName, appHeader, options, "Missing options: " + ex.getMissingOptions().toString(), true);
136+
List<String> missingOptions = new ArrayList<>();
137+
for (String option : (List<String>) ex.getMissingOptions()) {
138+
missingOptions.add(String.format("--%s (-%s)", options.getOption(option).getLongOpt(), option));
139+
}
140+
formatter.printHelp(appName, appHeader, options, "ERROR\nMissing options: \n " + StringUtils.join(missingOptions, "\n "), true);
136141
System.exit(1);
137142
} catch (MissingArgumentException ex) {
138-
formatter.printHelp(appName, appHeader, options, "Missing arguments: " + ex.getOption().getArgName(), true);
143+
Option missingOption = ex.getOption();
144+
String err = String.format("%s for option --%s (-%s)", missingOption.getArgName(), missingOption.getLongOpt(), missingOption.getOpt());
145+
formatter.printHelp(appName, appHeader, options, "ERROR\nMissing arguments: " + err, true);
139146
System.exit(1);
140147
} catch (Exception ex) {
141148
formatter.printHelp(appName, appHeader, options, "Error: " + ex.getMessage(), true);
@@ -149,48 +156,55 @@ private static Options buildOptions() {
149156

150157
Option inputOption = Option.builder("i")
151158
.numberOfArgs(1)
159+
.argName("input file")
152160
.required(true)
153161
.longOpt(INPUT_FILE)
154162
.desc("Input file.")
155163
.build();
156164

157165
Option outputOption = Option.builder("o")
158166
.numberOfArgs(1)
167+
.argName("output file")
159168
.required(false)
160169
.longOpt(OUTPUT_FILE)
161170
.desc("Output file.")
162171
.build();
163172

164173
Option outputFormatOption = Option.builder("f")
165174
.numberOfArgs(1)
175+
.argName("output format")
166176
.required(false)
167177
.longOpt(OUTPUT_FORMAT)
168178
.desc("Format of the output: json, ndjson (new line delimited JSON), csv, csvjson (json encoded in csv; useful for RDB bulk loading). Default: ndjson.")
169179
.build();
170180

171181
Option schemaConfigOption = Option.builder("s")
172182
.numberOfArgs(1)
183+
.argName("schema configuration")
173184
.required(true)
174185
.longOpt(SCHEMA_CONFIG)
175186
.desc("Schema file to run assessment against.")
176187
.build();
177188

178189
Option schemaFormatOption = Option.builder("v")
179190
.numberOfArgs(1)
191+
.argName("schema format")
180192
.required(false)
181193
.longOpt(SCHEMA_FORMAT)
182194
.desc("Format of schema file: json, yaml. Default: based on file extension, else json.")
183195
.build();
184196

185197
Option measurementsConfigOption = Option.builder("m")
186198
.numberOfArgs(1)
199+
.argName("measurement configuration")
187200
.required(true)
188201
.longOpt(MEASUREMENTS_CONFIG)
189-
.desc("Config file for measurements.")
202+
.desc("Configuration file for measurements.")
190203
.build();
191204

192205
Option measurementsFormatOption = Option.builder("w")
193206
.numberOfArgs(1)
207+
.argName("measurement format")
194208
.required(false)
195209
.longOpt(MEASUREMENTS_FORMAT)
196210
.desc("Format of measurements config file: json, yaml. Default: based on file extension, else json.")
@@ -212,6 +226,7 @@ private static Options buildOptions() {
212226

213227
Option recordAddressOption = Option.builder("r")
214228
.numberOfArgs(1)
229+
.argName("record address")
215230
.required(false)
216231
.longOpt(RECORD_ADDRESS)
217232
.desc("An XPath or JSONPath expression to separate individual records in an XML or JSON files.")

src/test/java/de/gwdg/metadataqa/api/cli/AppTest.java

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package de.gwdg.metadataqa.api.cli;
22

3+
import com.github.stefanbirkner.systemlambda.SystemLambda;
34
import de.gwdg.metadataqa.api.util.FileUtils;
45
import org.junit.Before;
56
import org.junit.Test;
@@ -8,7 +9,9 @@
89
import java.io.IOException;
910
import java.util.List;
1011

11-
import static org.junit.Assert.*;
12+
import static org.junit.Assert.assertEquals;
13+
import static org.junit.Assert.assertFalse;
14+
import static org.junit.Assert.assertTrue;
1215

1316
public class AppTest {
1417

@@ -64,4 +67,32 @@ public void good_json() throws IOException {
6467
assertEquals("\"https://neurovault.org/images/384958/\",\"massivea uditory lexical decision\"", output.get(1).trim());
6568
assertEquals("\"https://neurovault.org/images/93390/\",\"Language in the aging brain\"", output.get(2).trim());
6669
}
70+
71+
@Test
72+
public void missingOptions() throws Exception {
73+
int status = SystemLambda.catchSystemExit(() -> {
74+
App.main(new String[]{
75+
"--input", BASE_DIR + "csv/meemoo-simple.csv",
76+
"--schema", BASE_DIR + "configuration/schema/simple-meemoo.yaml"
77+
});
78+
});
79+
assertEquals(1, status);
80+
81+
assertFalse(outputFile.exists());
82+
}
83+
84+
@Test
85+
public void missingArguments() throws Exception {
86+
int status = SystemLambda.catchSystemExit(() -> {
87+
App.main(new String[]{
88+
"--input", BASE_DIR + "csv/meemoo-simple.csv",
89+
"--schema", BASE_DIR + "configuration/schema/simple-meemoo.yaml",
90+
"--measurements", BASE_DIR + "configuration/measurement/simple-meemoo.yaml",
91+
"--outputFormat"
92+
});
93+
});
94+
assertEquals(1, status);
95+
96+
assertFalse(outputFile.exists());
97+
}
6798
}

0 commit comments

Comments
 (0)