23
24 /**
25 * @test
26 * @bug 8027634
27 * @summary Verify syntax of argument file
28 * @build TestHelper
29 * @run main ArgFileSyntax
30 */
31 import java.io.File;
32 import java.io.IOException;
33 import java.util.ArrayList;
34 import java.util.Arrays;
35 import java.util.Collections;
36 import java.util.HashMap;
37 import java.util.List;
38 import java.util.Map;
39 import java.util.regex.Matcher;
40 import java.util.regex.Pattern;
41
42 public class ArgFileSyntax extends TestHelper {
43 private File createArgFile(List<String> lines) throws IOException {
44 File argFile = new File("argfile");
45 argFile.delete();
46 createAFile(argFile, lines);
47 return argFile;
48 }
49
50 private void verifyOutput(List<String> args, TestResult tr) {
51 if (args.isEmpty()) {
52 return;
53 }
54
55 int i = 1;
56 for (String x : args) {
57 tr.matches(".*argv\\[" + i + "\\] = " + Pattern.quote(x) + ".*");
58 i++;
59 }
60 if (! tr.testStatus) {
61 System.out.println(tr);
62 throw new RuntimeException("test fails");
169 "-Xint",
170 "-version",
171 "-Dcontinue.with.leadingws=Line1continue with \f<ff> and \t<tab>"
172 }
173 }
174 };
175
176 public List<List<List<String>>> loadCases() {
177 List<List<List<String>>> rv = new ArrayList<>();
178 for (String[][] testCaseArray: testCases) {
179 List<List<String>> testCase = new ArrayList<>(2);
180 testCase.add(Arrays.asList(testCaseArray[0]));
181 testCase.add(Arrays.asList(testCaseArray[1]));
182 rv.add(testCase);
183 }
184
185 // long lines
186 String bag = "-Dgarbage=";
187 String ver = "-version";
188 // a token 8192 long
189 char[] data = new char[8192 - bag.length()];
190 Arrays.fill(data, 'O');
191 List<String> scratch = new ArrayList<>();
192 scratch.add("-Xmx32m");
193 scratch.add(bag + String.valueOf(data));
194 scratch.add(ver);
195 rv.add(Collections.nCopies(2, scratch));
196
197 data = new char[8192 + 1024];
198 Arrays.fill(data, 'O');
199 scratch = new ArrayList<>();
200 scratch.add(bag + String.valueOf(data));
201 scratch.add(ver);
202 rv.add(Collections.nCopies(2, scratch));
203
204 return rv;
205 }
206
207 // ensure the arguments in the file are read in correctly
208 private void verifyParsing(List<String> lines, List<String> args) throws IOException {
209 File argFile = createArgFile(lines);
210 String fname = "@" + argFile.getName();
211 Map<String, String> env = new HashMap<>();
212 env.put(JLDEBUG_KEY, "true");
213
214 TestResult tr;
215 if (args.contains("-version")) {
216 tr = doExec(env, javaCmd, fname);
217 } else {
218 tr = doExec(env, javaCmd, fname, "-version");
219 }
220 tr.checkPositive();
221 verifyOutput(args, tr);
222
223 String lastArg = args.contains("-version") ? "-Dlast.arg" : "-version";
|
23
24 /**
25 * @test
26 * @bug 8027634
27 * @summary Verify syntax of argument file
28 * @build TestHelper
29 * @run main ArgFileSyntax
30 */
31 import java.io.File;
32 import java.io.IOException;
33 import java.util.ArrayList;
34 import java.util.Arrays;
35 import java.util.Collections;
36 import java.util.HashMap;
37 import java.util.List;
38 import java.util.Map;
39 import java.util.regex.Matcher;
40 import java.util.regex.Pattern;
41
42 public class ArgFileSyntax extends TestHelper {
43 // Buffer size in args.c readArgFile() method
44 private static final int ARG_FILE_PARSER_BUF_SIZE = 4096;
45
46 private File createArgFile(List<String> lines) throws IOException {
47 File argFile = new File("argfile");
48 argFile.delete();
49 createAFile(argFile, lines);
50 return argFile;
51 }
52
53 private void verifyOutput(List<String> args, TestResult tr) {
54 if (args.isEmpty()) {
55 return;
56 }
57
58 int i = 1;
59 for (String x : args) {
60 tr.matches(".*argv\\[" + i + "\\] = " + Pattern.quote(x) + ".*");
61 i++;
62 }
63 if (! tr.testStatus) {
64 System.out.println(tr);
65 throw new RuntimeException("test fails");
172 "-Xint",
173 "-version",
174 "-Dcontinue.with.leadingws=Line1continue with \f<ff> and \t<tab>"
175 }
176 }
177 };
178
179 public List<List<List<String>>> loadCases() {
180 List<List<List<String>>> rv = new ArrayList<>();
181 for (String[][] testCaseArray: testCases) {
182 List<List<String>> testCase = new ArrayList<>(2);
183 testCase.add(Arrays.asList(testCaseArray[0]));
184 testCase.add(Arrays.asList(testCaseArray[1]));
185 rv.add(testCase);
186 }
187
188 // long lines
189 String bag = "-Dgarbage=";
190 String ver = "-version";
191 // a token 8192 long
192 char[] data = new char[2*ARG_FILE_PARSER_BUF_SIZE - bag.length()];
193 Arrays.fill(data, 'O');
194 List<String> scratch = new ArrayList<>();
195 scratch.add("-Xmx32m");
196 scratch.add(bag + String.valueOf(data));
197 scratch.add(ver);
198 rv.add(Collections.nCopies(2, scratch));
199
200 data = new char[2*ARG_FILE_PARSER_BUF_SIZE + 1024];
201 Arrays.fill(data, 'O');
202 scratch = new ArrayList<>();
203 scratch.add(bag + String.valueOf(data));
204 scratch.add(ver);
205 rv.add(Collections.nCopies(2, scratch));
206
207 // 8210810: position escaping character at boundary
208 // reserve space for quote and backslash
209 data = new char[ARG_FILE_PARSER_BUF_SIZE - bag.length() - 2];
210 Arrays.fill(data, 'O');
211 scratch = new ArrayList<>();
212 String filling = String.valueOf(data);
213 scratch.add(bag + "'" + filling + "\\\\aaa\\\\'");
214 scratch.add(ver);
215 rv.add(List.of(scratch, List.of(bag + filling + "\\aaa\\", ver)));
216
217 return rv;
218 }
219
220 // ensure the arguments in the file are read in correctly
221 private void verifyParsing(List<String> lines, List<String> args) throws IOException {
222 File argFile = createArgFile(lines);
223 String fname = "@" + argFile.getName();
224 Map<String, String> env = new HashMap<>();
225 env.put(JLDEBUG_KEY, "true");
226
227 TestResult tr;
228 if (args.contains("-version")) {
229 tr = doExec(env, javaCmd, fname);
230 } else {
231 tr = doExec(env, javaCmd, fname, "-version");
232 }
233 tr.checkPositive();
234 verifyOutput(args, tr);
235
236 String lastArg = args.contains("-version") ? "-Dlast.arg" : "-version";
|